FreeRTOS — 独立看门狗检测任务执行状态***
以下内容转载自安富莱电子:http://forum.armfly.com/forum.php
通过前面的几个章节,我们基本已经完成了 FreeRTOS 所有功能的讲解,本章节为大家介绍一种使用独立看门狗监测任务执行状态的方法,借此为大家提供一种在软件或者硬件死机时,FreeRTOS 系统如何保证系统复位的思路。
什么是独立看门狗
假设有一只饥饿的狗正在看守一座房子,而有人要闯入。 如果这个强盗的同谋以 2 分钟的时间间隔不停的向看门狗扔肉。 那么这只狗将忙于吃肉而忽视保卫工作,因此将不会犬叫。 然而,如果同谋扔完了肉或者由于其它原因忘了喂肉,狗将开始犬叫,从而惊动邻居、 房屋主人或者警察。
嵌入式化的独立看门狗定时器遵循同样的方法。 用户需要每隔一段时间就刷新看门狗定时器,否则将导致看门狗定时器溢出。 在大多数情况下,看门狗定时器的溢出将使得系统复位。 即使经过仔细规划和设
计,嵌入式系统也有可能由于出乎预料的问题而死机,看门狗定时器就是用来处理类似情况的,看门狗定时器可用于从这种状态恢复。
教程使用的 STM32F103,STM32F407 和 STM32F429 都自带独立看门狗,使用也比较简单,用户初始化好看门狗,并设置好看门狗溢出时间即可,剩下就是在溢出时间范围内及时喂狗。
下面就提供一种利用独立看门狗监测多任务的执行状态的思路。
多任务监测实现思路
为了保证 FreeRTOS 的所有用户任务都在正常的运行,我们通过独立看门狗的形式来监测,一旦发现有某个任务长时间没有执行,看门狗就会将系统复位。
运行条件:
创建 5 个用户任务 Task1,Task2,Task3,Task4 和 Task5。其中 Task5 的优先级最高,然后依次是 Task4,Task3,Task2,Task1。
任务 Task1 到 Task4 定期发事件标志给任务 Task5,表示任务运行正常。
实现思路:
喂狗程序放在最高优先级的任务 Task5 里面,其它的 4 个任务都定期的向最高优先级任务发送事件标志,只有四个任务都发来了事件标志才进行喂狗。
看门狗的复位时间设置为多少合适呢?这个要根据四个任务Task1到Task4的最大发送事件标志间隔来确定。假设测试发现,最大的发送事件标志时间间隔是由 Task4 产生的,间隔是 6s,我们可以在此基础上再设置一些时间容限,把看门狗的复位时间设置为 10s,也就是说,四个任务 Task1 到 Task4需要在 10s 内给任务 Task5 发送事件标志,让 Task5 执行喂狗操作,否则看门狗定时器溢出,从而导致系统将复位。
推荐在最高优先级任务里面实现喂狗,这样才可以保证其它低优先级任务发来了事件标志后,Task5可以及时的喂狗。如果放在一个低优先级的任务里面会存在问题,比如所有的任务都已经发送了表示自己正常运行的事件标志,但是此低优先级任务在执行喂狗程序前被其它高优先级的任务抢占了,造成不能及时喂狗,从而导致系统复位,这种误判断会使得系统不能够正常工作。
按照上面的实现思路,我们在开发板上面实战演练下。
实验目的:
1. 学习独立看门狗监测 FreeRTOS 任务执行状态。
实验内容:
1. K1 按键按下,串口打印任务执行情况(波特率 115200,数据位 8,奇偶校验位无,停止位 1)。
2. K2 按键按下后将任务 vTaskTaskUserIF 延迟 20s 后执行,从而实现看门狗复位。
3. 看门狗监测任务执行状态说明:
(1) 设置看门狗复位时间是 10s,如果 10s 内不喂狗系统复位。
(2) 使用事件标志组,在最高优先级任务中等待其它所有用户任务发来的事件标志,如果所有任务都发来了事件标志,那么就执行喂狗程序,如果有一个任务 10s 内没有发来事件标志,那么系统会被复位。
(3) 简单的说就是为了检测任务的执行状态,我们设置每个任务 10s 内必须发一次事件标志以此来表示任务在执行。如果 10s 内有一个任务没有发来消息,系统会被复位。
(4) 等待事件标志的任务:
uxBits = xEventGroupWaitBits(xCreatedEventGroup,
TASK_BIT_ALL,
pdTRUE,
pdTRUE,
xTicksToWait);
其它四个发送事件标志的任务:
xEventGroupSetBits(xCreatedEventGroup, TASK_BIT_0);
xEventGroupSetBits(xCreatedEventGroup, TASK_BIT_1);
xEventGroupSetBits(xCreatedEventGroup, TASK_BIT_2);
xEventGroupSetBits(xCreatedEventGroup, TASK_BIT_3);
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |