在使用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);
实在是搞不懂,有遇到过这种情况的嘛
这个问题和你的任务堆栈没关系,首先看你的错误地方。
你可到heap4.c里面去看看320行和321行,发现是内存释放函数的位置,说明内存释放出问题。
而你的内存申请是成功的,说明释放的时候释放错地址了。
你可以打印出申请内存后的地址add1,释放内存前的地址add2,对比一下就知道了。
如果方便,把涉及到FreeRTOS内存申请和释放的代码贴出来,特别是红 {MOD}方框里面的代码,我觉得问题就出在你红方框里面的代码,这部分代码应该将你的地址改变了。
感谢原子哥
请问原子哥,
在你们的F4 FreeRTOS实验17-1 FreeRTOS内存管理实验
my_mem_init(SRAMIN); //初始化内部内存池
这里初始化内部内存池是必要的嘛?我怎么觉得跟实际的没有多大关系呢
freeRTOS我们不是选择动态分配得嘛
整个工程看下!
一周热门 更多>