本帖最后由 硬汉Eric2013 于 2016-2-18 15:22 编辑
完整PDF教程和例子下载:http://pan.baidu.com/s/1c0V2Why
【安富莱】【RTX操作系统教程】
第20章 独立看门监测多任务的执行状态 通过前面的几个章节,我们基本已经完成了RTX所有功能的讲解,本章节为大家介绍一种使用独立看门狗监测任务执行状态的方法,借此为大家提供一种RTX系统在软件或者硬件死机时,如何保证系统复位的思路。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。 20.1 独立看门狗检测多任务的执行状态 20.2 实验例程说明 20.3 总结
20.1 独立看门狗监测任务的实现思路
20.1.1 什么是独立看门狗 假设有一只饥饿的狗正在看守一座房子,而有人要闯入。如果这个强盗的同谋以2分钟的时间间隔不停的向看门狗扔肉。那么这只狗将忙于吃肉而忽视保卫工作,因此将不会犬叫。然而,如果同谋扔完了肉或者由于其它原因忘了喂肉,狗将开始犬叫,从而惊动邻居,房屋主人或者警察。 嵌入式化的独立看门狗定时器遵循同样的基本方法。非常简单,如果每隔一定间隔不刷新看门狗定时器,它将溢出。在大多数情况下,看门狗定时器的溢出将复位系统。即使经过仔细规划和设计,嵌入式系统也有可能由于出乎预料的问题而死机,看门狗定时器就是用来处理类似情况的。看门狗可用于从这种状态恢复。 教程使用的STM32F103和STM32F407都自带独立看门狗,使用也比较简单,用户初始化好看门狗,并设置好看门狗溢出时间即可,剩下就是在溢出时间的范围内及时喂狗。 下面就提供一种利用独立看门狗监测多任务的执行状态的思路。
20.1.2 多任务监测实现思路 为了保证RTX的所有用户任务都在正常的执行,我们通过独立看门的形式来监测,一旦发现有某个任务长时间没有执行,看门狗就会将系统复位。
运行条件: (1)创建5个用户任务Task1,Task2,Task3,Task4和Task5。其中Task5的优先级最高,然后依次是Task4,Task3,Task2,Task1。 (2)任务Task1到Task4定期发事件标志给任务Task5,表示任务运行正常。 实现思路: (1)喂狗程序放在最高优先级的任务Task5里面,其它的4个任务都定期的向最高优先级任务发送事件标志,只有四个任务都发来了事件标志才进行喂狗。 (2)看门狗的复位时间设置为多少合适呢,这个要根据四个任务Task1到Task4的最大发送事件标志间隔来确定。假设测试发现,最大的发送事件标志时间间隔是由Task4产生的,间隔是6s,我们可以再设置一些时间容限,把看门的复位时间设置为10s,也就是说,如果四个任务Task1到Task4在10s内给任务Task5发送事件标志,让Task5执行喂狗操作,那么系统将复位。 (3)推荐在最高优先级任务里面实现喂狗,这样才可以保证其它低优先级任务发来了事件标志后,Task5可以及时的喂狗,如果放在一个低优先级的任务里面,那么当所有的任务任务都已经发送任务运行正常的事件标志,但是此任务在执行喂狗程序前被其它高优先级的任务抢占了造成不能及时喂狗,从而造成系统复位,这种误判断会造成系统不能够正常工作。
|