关于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
1楼-- · 2019-07-21 08:24
本帖最后由 Sanjay 于 2018-12-17 22:19 编辑

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

如果方便,把涉及到FreeRTOS内存申请和释放的代码贴出来,特别是红 {MOD}方框里面的代码,我觉得问题就出在你红方框里面的代码,这部分代码应该将你的地址改变了。
正点原子
2楼-- · 2019-07-21 14:22
帮顶
BJTT
3楼-- · 2019-07-21 19:31
正点原子 发表于 2018-3-5 01:20
帮顶

感谢原子哥
BJTT
4楼-- · 2019-07-22 01:02
 精彩回答 2  元偷偷看……
BJTT
5楼-- · 2019-07-22 04:28
正点原子 发表于 2018-3-5 01:20
帮顶

请问原子哥,
在你们的F4  FreeRTOS实验17-1 FreeRTOS内存管理实验

        my_mem_init(SRAMIN);                    //初始化内部内存池

这里初始化内部内存池是必要的嘛?我怎么觉得跟实际的没有多大关系呢
freeRTOS我们不是选择动态分配得嘛
paulhe
6楼-- · 2019-07-22 08:16
BJTT 发表于 2018-3-5 15:22
请问原子哥,
在你们的F4  FreeRTOS实验17-1 FreeRTOS内存管理实验

整个工程看下!

一周热门 更多>