TIMON 发表于 2019-9-16 10:51:22

软件定时器喂狗可以吗

板子是STM32f429,因为多任务,所以不好估算时间,就用了个软件定时器来喂狗。
IWDGTimer_Hander = xTimerCreate("IWDG_Timer", 3000, pdTRUE, 1, IWDGTimerCallback);

软件定时器虽然也是用硬件定时器,但是在程序跑飞的情况下应该也会失效,应该会看门狗复位。
但是最近发现有各个任务灯都不闪,但是板子却没有复位,保持这种不工作状态,请问这个现象
是因为用了软件定时器导致的吗?
有可能多个任务都死了但是程序却没跑飞,软定时器还正常的这种可能吗,其中一个任务挺稳定的
而且功能单一,不容易挂死,所以还是觉得狗在一直喂。

eric2013 发表于 2019-9-16 11:06:23

不好估算时间的用时间片调度,同优先级下跑,这就方便看门狗了。

TIMON 发表于 2019-9-16 11:23:01

eric2013 发表于 2019-9-16 11:06
不好估算时间的用时间片调度,同优先级下跑,这就方便看门狗了。

谢谢,请问同优先级下跑,假如我的时间片设置为1秒,是否就意味着喂狗任务和同优先级任务每次会各运行1秒,然后切换。这样是不是在喂狗任务中的时间太长了?

eric2013 发表于 2019-9-16 11:30:10

TIMON 发表于 2019-9-16 11:23
谢谢,请问同优先级下跑,假如我的时间片设置为1秒,是否就意味着喂狗任务和同优先级任务每次会各运行1秒 ...

这个问题说到点上了,FreeRTOS的时间片仅支持1个

廷润 发表于 2019-9-17 08:09:44

我试过三个任务,在按键获取的线程喂狗。但是刷新GUI的线程死掉了,最后导致界面界面没反应,按键还可以响应。

TIMON 发表于 2019-9-17 10:08:36

廷润 发表于 2019-9-17 08:09
我试过三个任务,在按键获取的线程喂狗。但是刷新GUI的线程死掉了,最后导致界面界面没反应,按键还可以响 ...

是这样,单任务挂死,加些措施可以防。但是我有一个任务的逻辑很简单,运行很长时间也没有异常过,但是出问题时,它的灯也不闪了。感觉是系统飞了或是调度出了问题。我把喂狗放在这个任务里试试,不用软定时器了

廷润 发表于 2019-9-18 08:07:12

上了OS,也可以适当自己加一些标志位,把运行的状态,模式做一些区分。 例如运行11状态模式,就不可能运行22状态模式,降低耦合,有时候还能提升整体运行的清爽度。

fyyxxm 发表于 2019-9-19 11:31:38

@eric2013第二版的freertos教程 不准备搞了吗?

eric2013 发表于 2019-9-19 11:35:57

fyyxxm 发表于 2019-9-19 11:31
@eric2013第二版的freertos教程 不准备搞了吗?

【安富莱】RTX5及其所有中间件教程开始制作,含FreeRTOS版,采用CMSIS-RTOS V2封装层(2019-09-05)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93149&fromuid=58
(出处: 硬汉嵌入式论坛)

caicaptain2 发表于 2019-9-20 15:01:25

本帖最后由 caicaptain2 于 2019-9-20 15:05 编辑

任务死和程序跑飞是2个不同的状态。 看门狗可以解决跑飞,但是很难解决任务死。因为多数时候,任务中有while之类的语句,都可能死循环,而此时不应该触发看门狗。

所以,看门狗一般是应对异常电磁干扰,电压异常,存储器异常,堆栈溢出的。任务死,应该找任务本身的代码问题,或者任务逻辑问题。

有个变通的方法,把喂狗放在最低级的默认idle任务中,一旦有用户任务卡死,就无法进入阻塞状态,idle就运行不了,然后就重启了吧。

wdliming 发表于 2020-3-29 21:50:09

caicaptain2 发表于 2019-9-20 15:01
任务死和程序跑飞是2个不同的状态。 看门狗可以解决跑飞,但是很难解决任务死。因为多数时候,任务中有whil ...

不错学到了
页: [1]
查看完整版本: 软件定时器喂狗可以吗