求助,FreeRTOS中,怎么重新启动一个任务?
注意,不是suspend和resume。从英文单词上理解,suspend和resume是指,任务执行到50%后,suspend可以停止,调用resume后,任务继续从50%处执行。
我需要的是,完全停止一个任务,再次启动时,这个任务函数从开头执行。。。保护任务函数内定义的变量初始化。 该怎么操作呢?
这个专业词汇叫任务reset,这个ThreadX支持,FreeRTOS好像还没有增加这种方式。
ThreadX带了复位任务函数tx_thread_reset,可以让任务重新从头开始执行
https://www.armbbs.cn/forum.php?mod=viewthread&tid=106245&fromuid=58
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2023-3-27 11:33
这个专业词汇叫任务reset,这个ThreadX支持,FreeRTOS好像还没有增加这种方式。
ThreadX带了复位任务函 ...
单个任务的reset应该是个很常见的需求,猜想FreeRTOS的作者应该考虑到了处理方法,就没有额外增加api函数了。
目前,我只能想到使用动态创建任务,删除任务来对应,但是又很担心代码处理不好,重复创建了会造成崩溃。。。 注意一下,freertos 删除任务 会在idle任务中完成删除动作 gjeoi 发表于 2023-3-27 15:16
注意一下,freertos 删除任务 会在idle任务中完成删除动作
附上官方描述,链接:https://www.freertos.org/a00126.html
我也有这个设计需求,目前也还没有想到哪种比较好的方案 本帖最后由 caicaptain2 于 2023-3-28 14:21 编辑
ou513 发表于 2023-3-28 13:39
我也有这个设计需求,目前也还没有想到哪种比较好的方案
我也在百度和FreeRTOS官网的论坛上看了一下,没有可靠的好的办法。
有个折中的办法,需要重启的任务等待通知,接收到通知,然后强制跳转(goto)到任务函数的开头部分。 caicaptain2 发表于 2023-3-27 11:43
单个任务的reset应该是个很常见的需求,猜想FreeRTOS的作者应该考虑到了处理方法,就没有额外增加api函数 ...
不用给他们留面子,FreeRTOS源码本身就没有什么亮点。
页:
[1]