硬汉嵌入式论坛

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

[μCOS-III] UCOSIII任务重启方案

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2018-7-20 11:22:10 | 显示全部楼层 |阅读模式
运行的设备在修改参数后不允许重启,所以想直接重启受影响的任务,另外也想在任务发生异常之后重启这个任务。
设想的方案是这样的
建立一个专门的任务监测任务,需要重启哪个任务时直接向这个监测任务发布消息,然后在这个监测任务里面将制定的任务删除后再重新创建一次。
另外这个监测任务还充当任务看门狗,其它任务需定时向这个任务发布一个心跳消息,若超时没发,也要删除并重新创建指定任务。
当然如果监测任务也发生异常,那就只有重启设备了,不知道这种方案是否科学,硬汉哥提供以下参考意见呗!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107037
QQ
发表于 2018-7-20 11:38:53 | 显示全部楼层
可以的。

另外再看看此贴,通过此贴看看能否再获取点灵感:http://www.armbbs.cn/forum.php?m ... =%BF%B4%C3%C5%B9%B7
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
发表于 2018-8-1 01:12:52 | 显示全部楼层
楼主的想法完全可行,我现在就是这么用的。   我做的是用在野外无人值守的数据采集设备(太阳能供电),要求设备绝对不能死机(但是允许重启)。我就跟你的想法一样,建了一个任务监视的任务,监视任务的优先级设置为最低,同时在监视任务中喂硬件看门狗。 其他任务建立的时候,调用监视任务的API注册相关的参数和超时参数。 然后其他任务正常运行过程中,要在之前注册的超时参数之内调用 监视任务 的API喂狗(软狗)函数。
这样的结果就是,如果哪个应用任务在规定时间内没有调用喂狗(软狗)的API,监视任务就能立即进行处理,因为我的设备允许重启,我这块就对单片机进行重启了(没去单独处理异常的任务)。在一点,我的监视任务设置的是最低优先级,这点主要是基于要保证某些实时性要求高的任务的可靠运行,但也不需要担心,因为我的硬件看门狗是由 监视任务 喂的,所以,当其他任务长时间占用CPU时(死锁,比如死在了while(1)中的时候)),监视任务 就得不到运行的机会,那么硬件看门狗就不会喂的上了, 最终硬件看门狗动作也会复位整个系统。 目前设备已在户外运行5年(大概20台左右),未发生死机无法自动恢复的状况。
以上,供参考。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 09:49 , Processed in 0.154896 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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