caicaptain2 发表于 2023-3-27 11:24:54

求助,FreeRTOS中,怎么重新启动一个任务?

注意,不是suspend和resume。

从英文单词上理解,suspend和resume是指,任务执行到50%后,suspend可以停止,调用resume后,任务继续从50%处执行。

我需要的是,完全停止一个任务,再次启动时,这个任务函数从开头执行。。。保护任务函数内定义的变量初始化。 该怎么操作呢?

eric2013 发表于 2023-3-27 11:33:21

这个专业词汇叫任务reset,这个ThreadX支持,FreeRTOS好像还没有增加这种方式。

ThreadX带了复位任务函数tx_thread_reset,可以让任务重新从头开始执行
https://www.armbbs.cn/forum.php?mod=viewthread&tid=106245&fromuid=58
(出处: 硬汉嵌入式论坛)

caicaptain2 发表于 2023-3-27 11:43:35

eric2013 发表于 2023-3-27 11:33
这个专业词汇叫任务reset,这个ThreadX支持,FreeRTOS好像还没有增加这种方式。

ThreadX带了复位任务函 ...

单个任务的reset应该是个很常见的需求,猜想FreeRTOS的作者应该考虑到了处理方法,就没有额外增加api函数了。

目前,我只能想到使用动态创建任务,删除任务来对应,但是又很担心代码处理不好,重复创建了会造成崩溃。。。

gjeoi 发表于 2023-3-27 15:16:30

注意一下,freertos 删除任务 会在idle任务中完成删除动作

gjeoi 发表于 2023-3-27 15:38:58

gjeoi 发表于 2023-3-27 15:16
注意一下,freertos 删除任务 会在idle任务中完成删除动作

附上官方描述,链接:https://www.freertos.org/a00126.html


ou513 发表于 2023-3-28 13:39:00

我也有这个设计需求,目前也还没有想到哪种比较好的方案

caicaptain2 发表于 2023-3-28 14:19:25

本帖最后由 caicaptain2 于 2023-3-28 14:21 编辑

ou513 发表于 2023-3-28 13:39
我也有这个设计需求,目前也还没有想到哪种比较好的方案
我也在百度和FreeRTOS官网的论坛上看了一下,没有可靠的好的办法。
有个折中的办法,需要重启的任务等待通知,接收到通知,然后强制跳转(goto)到任务函数的开头部分。

missfox 发表于 2023-3-28 14:28:59

caicaptain2 发表于 2023-3-27 11:43
单个任务的reset应该是个很常见的需求,猜想FreeRTOS的作者应该考虑到了处理方法,就没有额外增加api函数 ...

不用给他们留面子,FreeRTOS源码本身就没有什么亮点。
页: [1]
查看完整版本: 求助,FreeRTOS中,怎么重新启动一个任务?