zynq ucos中watchdog timer

2015-07-20 20:59 阅读 364 次 评论 0 条

zynq中watchdog timer很多,使用也很灵活,本日志所说的并不是如何应用这些watchdog,而是单纯的说一下,在ucos系统中watchdog喂狗怎么进行。

由于有ucos系统,是实时多任务系统,喂狗不能和硬件编程中那样,在循环中进行。

而由于中断有硬件响应并跳转执行,所以在中断服务函数中喂狗也是不行。经常遇到程序中的任务已经死了,而中断却能够正常响应,所以不会触发watchdog复位,达不到喂狗的目的。

有人说在最低优先级任务中喂狗,基于没有任务一直占用cpu,会给低优先级任务执行时间,从而喂狗。但是这样会有风险,因为嵌入式系统通常以外部中断触发任务,在外部任务较重时,很有可能会长时间不会执行低优先级任务。所以低优先级任务不执行只是死机的必要条件,而非充分条件。

网上倾向于单独常见一个低优先级的定时器任务,定时查询所有任务watchdog计数状态,在超出门限值时复位。

以上方法本人都觉得不可取。最后一种觉得效率低,每个任务需要计数,而且还有通过定时器任务遍历,效率较低。以本人接触的导航接收机软件中,最主要的任务是PVT结算,其他的任务都是辅助任务,我们选择在主任务(PVT任务)中增加watchdog喂狗,如果主任务挂了,那么就复位。当然导航接收机软件的规模也不大。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq ucos中watchdog timer | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情