请教一个有趣的问题:在UCOSII中,还需要使用看门狗吗?如果要用,可怎么去喂这条狗?

2019-07-21 00:35发布

 大家知道,UCOSII中的各项执行任务都是个死循环,各项任务的切换都是靠自身的优先级来进行;

 而看门狗是在正常执行程序中,去喂它,使它不会溢出,而产生复位动作。但如果程序跑飞了,进入死循环,没有在一定的时间去喂它,

就会产生复位动作,使程序重新启动初始化,恢复正常工作。可在UCOSII中,各个任务本身就是个死循环,它们自己就有个专用震荡器,这还用

使用看门狗吗?如果要用,这条狗怎么去喂它,是在各项任务里,添一条喂狗指令?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
30条回答
dong
1楼-- · 2019-07-22 10:49
 精彩回答 2  元偷偷看……
dong
2楼-- · 2019-07-22 12:25
回复【24楼】正点原子:
---------------------------------
醉了
正点原子
3楼-- · 2019-07-22 16:21
假如有3个任务,可以创建一个任务为看门狗的任务(次任务优先级高于其他3个),初始化一个事件, 设置看门狗3秒复位。
3个任务会发送事件。
如果有一个任务没有发送事件,那么复位。
        status = rt_event_recv(&event_watchdog, SET_WD1 |SET_WD2 | SET_WD3 , RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 300, &event);
if(status == -RT_ETIMEOUT)
{
rt_kprintf("watchdog timeout! ");

}
        else
        {
              //rt_kprintf("receve wdog event is:%x  ",event);
              watchdog_clear();//喂狗
        }

这样做不可以吗?
q27488
4楼-- · 2019-07-22 17:56
顶一下         up++
正点原子
5楼-- · 2019-07-22 22:57
回复【23楼】q27488:
---------------------------------
看下我的那个方法呢,,,觉得可用性怎样?
q27488
6楼-- · 2019-07-23 02:01
 精彩回答 2  元偷偷看……

一周热门 更多>