《VxWorks7编程指南》笔记(五)——看门狗时钟(Watchdog)

VxWorks在内核中提供了看门狗机制,允许任何C函数以特定的延时挂接到一个定时器上。

看门狗定时器被作为系统时钟ISR的一部分而维持。由看门狗定时器触发的函数,将作为系统时钟的中断服务代码而执行。如下函数由wdLib库提供:

 

看门狗定时器示例

 

静态实例化看门狗定时器

wdCreate()函数执行了一个动态的、两步的操作,可以在运行时为看门狗定时器分配内存,并初始化看门狗定时器对象。看门狗定时器(包括其他VxWorks对象)也可以静态实例化(意味着在编译时为对象分配内存),然后在运行时初始化。

宏VX_WDG在编译时声明一个看门狗定时器,仅需要一个看门狗定时器名作为参数。函数wdInitialize()用于在运行时初始化看门狗定时器并将其使能。宏与函数必须使用同一个看门狗定时器名称。

 

静态实例化看门狗示例

 

使用公共看门狗定时器进行进程间通信

VxWorks看门狗定时器可以作为私有对象创建,也可以作为公共对象创建。如果创建为公共对象,那么在系统全局都可以进行访问。

 

问题:如何使用看门狗定时器周期性地执行一个特定的函数myFun()?

方法:仅需要在myFun()函数中递归地调用wdStart()函数,其中又将myFun()函数作为参数传入wdStart()中。需要注意递归退出条件的设置。示例伪代码如下:

int myFun(){
    
    if(condition is true){
        return 0;                 //跳出递归调用
    }

    wdStart(...,myFun(),...);    //在看门狗中挂接myFun()以周期执行该函数

    return 0;
}

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weekman93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值