我在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?某些版本正在分片,如果您分配和釋放不同大小的內存塊,將無法工作。 –