我在STM32F107VC上使用FreeRTOS V6.1.1并且频繁出现malloc错误。堆区在链接脚本定义,但少数的分配后,一直陷在这个循环pvPortMalloc()的:FreeRTOS分配错误
while((pxBlock->xBlockSize < xWantedSize) && (pxBlock->pxNextFreeBlock != NULL))
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}
pxBlock: 0x20002300
pxPreviousBlock: 0x20002300
pxNewBlockLink: 0x00
xHeapHasBeenInitialised: 0x01
链接脚本:
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = 0x20010000; /* end of 64K RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x200; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}
...
怎么能这样呢?
看起来像堆栈溢出问题,你有没有尝试增加堆栈!? – Ishmeet
你的意思是_Min_Stack_Size?我现在尝试它没有成功。这个链接器文件也用于较大的项目并且工作正常。 – RootRaven
您使用的是哪个版本的堆? Heap_1.c,heap_2.c或heap_3.c?某些版本正在分片,如果您分配和释放不同大小的内存块,将无法工作。 –