关于freeRTOS heap_4.c报错

2019-07-21 05:28发布

在使用freeRTOS系统时,系统总是会报错,
Error:...FreeRTOSportableMemMangheap_4.c,320
Error:...FreeRTOSportableMemMangheap_4.c,321

我看了是在vPortFree()里的一个断言抛出的错误,主要是判断是否真正分配
        /* Check the block is actually allocated. */
        configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
        configASSERT( pxLink->pxNextFreeBlock == NULL );

我的任务里面也只分配了没多大的空间啊,而且任务堆栈我都设置了  4096了,还是会报错
char *pntr = pvPortMalloc(20);
...
...

...
if(pntr != NULL)
vPortFree(pntr);
实在是搞不懂,有遇到过这种情况的嘛

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
Sanjay
2019-07-21 08:24
本帖最后由 Sanjay 于 2018-12-17 22:19 编辑

这个问题和你的任务堆栈没关系,首先看你的错误地方。
你可到heap4.c里面去看看320行和321行,发现是内存释放函数的位置,说明内存释放出问题。
而你的内存申请是成功的,说明释放的时候释放错地址了。
你可以打印出申请内存后的地址add1,释放内存前的地址add2,对比一下就知道了。

如果方便,把涉及到FreeRTOS内存申请和释放的代码贴出来,特别是红 {MOD}方框里面的代码,我觉得问题就出在你红方框里面的代码,这部分代码应该将你的地址改变了。

一周热门 更多>