搜索
bottom↓
回复: 13

请教rtt操作系统中如何使用看门狗?

[复制链接]

出0入0汤圆

发表于 2010-6-26 06:34:24 | 显示全部楼层 |阅读模式
请教rtt操作系统中如何使用看门狗?

出0入0汤圆

发表于 2010-6-26 08:02:16 | 显示全部楼层
同问!

出0入0汤圆

发表于 2010-6-26 12:14:23 | 显示全部楼层
如果是直接使用硬件看门狗应该是很简单的。
如果是软件看门狗,用来监控多个任务,可以参考这个帖子的讨论。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3477082&bbs_page_no=1&bbs_id=3004

出0入0汤圆

 楼主| 发表于 2010-6-26 13:14:15 | 显示全部楼层
能不能明确一点,rtt操作系统中如何使用看门狗?

出0入0汤圆

发表于 2010-6-26 13:33:29 | 显示全部楼层
while(1)
{
    喂狗();
    rt_thread_delay(100);
}

是否可以回答如何喂狗?

你发的贴子:
建议RTT做个看门狗模块 : http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4099137

狗得自己喂.让系统帮喂了,还不如不喂.
喂狗和用什么系统无直接关系.自己养的自己喂.

可能的情况.在进入可能出不来的程序的后面喂狗.如果程序一旦出不来,就可以被咬.
然后一般在低优先级的线程里面喂.如果一直不能运行到这个线程,则也可以被咬.

出0入0汤圆

发表于 2010-6-26 14:24:41 | 显示全部楼层
实现多任务系统喂狗是跟应用需求相关的,不同的应用需求可能会考虑不同的喂狗方案。
所以,RTT也很难做统一的喂狗方案。
如果你的应用需要实现多任务监控,又不考虑每个任务都喂狗的方式,那可以尝试使用空闲任务喂狗的方式,但是用这种方式需要考虑的东西比较多,需要合理安排系统中的所有任务以及喂狗时间。

出0入0汤圆

 楼主| 发表于 2010-6-26 17:24:35 | 显示全部楼层
回复【4楼】aozima  
while(1)
{
    喂狗();
    rt_thread_delay(100);
}
-----------------------------------------------------------------------
在前后台系统中可以。但多任务系统中,每个任务都独立占有CPU,不合适。如果rtt能做个看门狗模块,就好了。
最近一直为RTT如何喂狗的问题头痛。

出0入0汤圆

发表于 2010-6-26 18:03:10 | 显示全部楼层
如果是喂硬件狗,直接放到定时器任务中去喂狗,没那么麻烦的。

出0入0汤圆

发表于 2010-6-26 22:13:26 | 显示全部楼层
定时器中断服务历程去喂狗是掩耳盗铃

出0入0汤圆

发表于 2010-6-26 22:13:55 | 显示全部楼层
就例如shaolin给的帖子中那样,可以实现多重喂狗。

单独在OS中做一个看门狗模块确实不太适合,最好的还是依照自身应用情况来进行喂狗。即使在OS中做了看门狗模块,那它也仅仅是对硬件的一个封装,如何去喂狗还是依赖于应用程序员。

出0入0汤圆

 楼主| 发表于 2010-6-27 07:28:37 | 显示全部楼层
回复【9楼】ffxz  
就例如shaolin给的帖子中那样,可以实现多重喂狗。
单独在os中做一个看门狗模块确实不太适合,最好的还是依照自身应用情况来进行喂狗。即使在os中做了看门狗模块,那它也仅仅是对硬件的一个封装,如何去喂狗还是依赖于应用程序员。
-----------------------------------------------------------------------

能不能说说有什么不合适?
djyos里面就有一个看门狗模块。我看了还不错,但就是不好移植到其他的系统中。

出0入0汤圆

发表于 2010-6-27 07:41:05 | 显示全部楼层
回复【8楼】ningmeng7294
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-6-27 08:00:20 | 显示全部楼层
回复【10楼】luxinsun  
能不能说说有什么不合适?
djyos里面就有一个看门狗模块。我看了还不错,但就是不好移植到其他的系统中。
-----------------------------------------------------------------------

关键一个,喂狗动作放在哪里。在RT-Thread中有可能的地方是可以放在每次线程切换的时候,但如果确实某个时候线程切换是很长很长时间才发生一次,所以这种方式也不太合适(并且因为这个在线程切换的时候挂接上,那么将人为延长系统的上下文切换时间)。

或者假设你的系统是这样的:
关键实时任务是A
系统中还存在idle任务

喂狗方式:
1. 优先级比任务A高的定时任务B中
2. 优先级比任务A低的定时任务C中
3. idle任务中
4. 线程切换钩子中

方式1
好处:线程B可能基本上就相当于系统中优先级最高的线程,只要系统不出现问题,那么就会被周期性地执行喂狗动作。
弊端:如果线程A进入一个死循环,喂狗动作将没什么意义。

方式2
好处:如果线程A因为错误而进入死循环,系统能够自动触发看门狗进行系统复位。
弊端:如果线程A执行的时间比较长,有可能线程C来不及执行。

方式3
类似于方式2,但优先级更低,受系统中其他任务的影响更大。

方式4
得不偿失且有方式1的弊端。

综合来看,方式2或方式3的方式更好,但这种方式必须要知道,线程A或其他线程(方式3中)的执行时间的影响情况。所以对于看门狗模块,OS能做的也仅仅是提供一个硬件资源的封装,如何喂狗还是由用户来抉择,OS不应做一些用户不明白的事情。

关于移植的问题,正规意义上,在移植或使用一个模块时需要特别注意它的许可证,不要做那种许可证不兼容的移植。

出0入0汤圆

 楼主| 发表于 2010-6-27 08:08:01 | 显示全部楼层
受教。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 14:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表