applededipan 发表于 2017-8-29 10:59:14

freeRTOS某个任务死了该怎么处理?

第一次用freeRTOS, 其中创建了5个任务,现在发现其中有个任务会挂掉,应该怎么处理?不想复位重启,想单独重启这个任务,可以实现吗?怎么实现?

zack_cf 发表于 2017-8-29 11:02:53

先找到挂掉的原因再说

security 发表于 2017-8-29 11:12:55

对于没有 MMU、单进程的应用环境,不行。
某个任务挂掉的话,去找出原因吧,不然整个系统,可能都被搞挂掉。

myxiaonia 发表于 2017-8-29 11:59:36

可以重启任务的,如果没有破坏其他的任务栈内容,包括os相关的数据结构,应该可以关闭任务再重启任务

applededipan 发表于 2017-8-29 15:27:44

myxiaonia 发表于 2017-8-29 11:59
可以重启任务的,如果没有破坏其他的任务栈内容,包括os相关的数据结构,应该可以关闭任务再重启任务 ...

具体怎么实现呢?

applededipan 发表于 2017-8-29 15:28:21

zack_cf 发表于 2017-8-29 11:02
先找到挂掉的原因再说

还没找到原因,想先找个可以临时解决的办法

myxiaonia 发表于 2017-8-29 16:25:01

applededipan 发表于 2017-8-29 15:27
具体怎么实现呢?

这个 我可能想当然了。。。不过rtx中是可以的,那里有任务启动,关闭等api啊

trey21ic 发表于 2017-8-29 16:28:44

是挂掉了?还是被阻塞了?或者被挂起了?终需找到原因才行!

security 发表于 2017-8-29 16:34:25

本帖最后由 security 于 2017-8-29 16:39 编辑

myxiaonia 发表于 2017-8-29 16:25
这个 我可能想当然了。。。不过rtx中是可以的,那里有任务启动,关闭等api啊 ...

FreeRTOS 里面应该也有对应的 task_delete、task_create 接口。
只不过对于操作系统而言,在 task 外部调用 task_delete 接口,来关闭删除 task,这是一个暴力的操作,一般是不推荐的。
因为 task 跑起来后,可能或多或少,都会申请一些资源,而这些资源的释放,期望通过 task_delete 接口,来释放,是做不到的。
所以正规的做法是:尽量少在 task 外部杀死 task,而应该是在 task 内部,回收相应的资源,然后结束掉自身。
然而,这仅是对于 task 运行正常的情况,
楼主的情况,task 已经是运行不正常的,就算不申请资源的话,不破坏栈的概率也是很低的,去 debug 才是王道。

security 发表于 2017-8-29 16:38:57

本帖最后由 security 于 2017-8-29 16:40 编辑

myxiaonia 发表于 2017-8-29 16:25
这个 我可能想当然了。。。不过rtx中是可以的,那里有任务启动,关闭等api啊 ...

鼠标多按了几次,与上一楼的发言重复了,
直接忽略本楼吧。

security 发表于 2017-8-29 16:41:52

applededipan 发表于 2017-8-29 15:28
还没找到原因,想先找个可以临时解决的办法

去 debug 才是正确的做法。
如果 fix 不了,贴出 code,或许大家能帮助到你。
页: [1]
查看完整版本: freeRTOS某个任务死了该怎么处理?