저는 FreeRTOS V6.1.1을 STM32F107VC에서 사용하고 있으며 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? 일부 버전은 조각화되어 있으며 크기가 다른 메모리 블록을 할당하고 해제 할 경우 작동하지 않습니다. –