硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3529|回复: 9
收起左侧

[FreeRTOS] 软件定时器喂狗可以吗

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2019-9-16 10:51:22 | 显示全部楼层 |阅读模式
板子是STM32f429,因为多任务,所以不好估算时间,就用了个软件定时器来喂狗。
IWDGTimer_Hander = xTimerCreate("IWDG_Timer", 3000, pdTRUE, 1, IWDGTimerCallback);

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

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2019-9-16 11:06:23 | 显示全部楼层
不好估算时间的用时间片调度,同优先级下跑,这就方便看门狗了。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2019-9-16 11:23:01 | 显示全部楼层
eric2013 发表于 2019-9-16 11:06
不好估算时间的用时间片调度,同优先级下跑,这就方便看门狗了。

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2019-9-16 11:30:10 | 显示全部楼层
TIMON 发表于 2019-9-16 11:23
谢谢,请问同优先级下跑,假如我的时间片设置为1秒,是否就意味着喂狗任务和同优先级任务每次会各运行1秒 ...

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

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2019-9-17 08:09:44 | 显示全部楼层
我试过三个任务,在按键获取的线程喂狗。但是刷新GUI的线程死掉了,最后导致界面界面没反应,按键还可以响应。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

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

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

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2019-9-18 08:07:12 | 显示全部楼层
上了OS,也可以适当自己加一些标志位,把运行的状态,模式做一些区分。 例如运行11状态模式,就不可能运行22状态模式,降低耦合,有时候还能提升整体运行的清爽度。
Releasing your creativity
回复

使用道具 举报

4

主题

159

回帖

171

积分

初级会员

积分
171
发表于 2019-9-19 11:31:38 | 显示全部楼层
@eric2013  第二版的freertos教程 不准备搞了吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 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?m ... 3149&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-9-20 15:01:25 | 显示全部楼层
本帖最后由 caicaptain2 于 2019-9-20 15:05 编辑

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

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

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

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

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

不错学到了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 22:22 , Processed in 0.287334 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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