黑暗骑士寒心雨 发表于 2020-3-25 22:46:57

FreeRTOS可以挂起任务,无法删除任务

代码如下,同样的位置,任务可以被挂起,但是不能被删除。


系统会卡死在这里:



security 发表于 2020-3-26 09:58:13

看起来,这里的问题是 vPortFree 的问题。
那边注释不是写着:Memory cannot be freed using this scheme. 不能释放内存,所以卡在断言处了。
本质不是删除函数的问题。

security 发表于 2020-3-26 09:59:23

另外,你用什么 IDE?
在 VS 上,软件仿真?还是直接下到板子,在线调试?

lusson 发表于 2020-3-25 22:46:58

heap类型用的不对,你当前用的是不能free的版本。你在freeRTOS config文件里看一下,或者你去找一下FreeRTOS Heap0~4的区别。

黑暗骑士寒心雨 发表于 2020-3-26 10:33:48

security 发表于 2020-3-26 09:59
另外,你用什么 IDE?
在 VS 上,软件仿真?还是直接下到板子,在线调试?

谢谢,我用的是Atmel单片机,用的是他配套的IDE——Atmel Studio。

黑暗骑士寒心雨 发表于 2020-3-26 10:34:54

lusson 发表于 2020-3-26 10:01
heap类型用的不对,你当前用的是不能free的版本。你在freeRTOS config文件里看一下,或者你去找一下FreeRTO ...

谢谢,我看一下,是用的heap1

lusson 发表于 2020-3-26 10:35:51

黑暗骑士寒心雨 发表于 2020-3-26 10:34
谢谢,我看一下,是用的heap1

Heap1是不支持free的,建议去学习一下他几个heap类型的区别。

黑暗骑士寒心雨 发表于 2020-3-26 10:36:14

lusson 发表于 2020-3-26 10:35
Heap1是不支持free的,建议去学习一下他几个heap类型的区别。

好的,非常感谢!

lusson 发表于 2020-3-26 10:37:13

另外比较好奇你是什么情况下会需要删除task。

黑暗骑士寒心雨 发表于 2020-3-26 10:40:00

lusson 发表于 2020-3-26 10:37
另外比较好奇你是什么情况下会需要删除task。

就是我这个程序会开机判断一下是否有TF卡,如果没有,这个任务就删除了。

黑暗骑士寒心雨 发表于 2020-3-26 10:41:29

lusson 发表于 2020-3-26 10:37
另外比较好奇你是什么情况下会需要删除task。

我还想问一下,这个heap文件需要去哪里下载呢?
Atmel这个FreeRTOS是10.0.0版本,但是工程只有heap1,我需要去github下一个别的heap文件就可以兼容是吧?

security 发表于 2020-3-26 10:43:14

黑暗骑士寒心雨 发表于 2020-3-26 10:40
就是我这个程序会开机判断一下是否有TF卡,如果没有,这个任务就删除了。 ...

那还不如没有 TF 卡,就不创建任务。

lusson 发表于 2020-3-26 10:44:41

黑暗骑士寒心雨 发表于 2020-3-26 10:40
就是我这个程序会开机判断一下是否有TF卡,如果没有,这个任务就删除了。 ...

只是判断一下TF卡也要专门的task,真浪费。直接在其他task开始的地方判断就可以了啊。
尽量减少动态创建task以及删除task,OS更稳定。。

你去FreeRTOS官网下载,用法官网上也都有介绍,再不济网上搜一下也有。

黑暗骑士寒心雨 发表于 2020-3-26 10:57:00

security 发表于 2020-3-26 10:43
那还不如没有 TF 卡,就不创建任务。

{:3_45:} 也是。。。

黑暗骑士寒心雨 发表于 2020-3-26 10:58:47

lusson 发表于 2020-3-26 10:44
只是判断一下TF卡也要专门的task,真浪费。直接在其他task开始的地方判断就可以了啊。
尽量减少动态创建t ...

好的,谢谢您!
页: [1]
查看完整版本: FreeRTOS可以挂起任务,无法删除任务