Używam FreeRTOS V6.1.1 na STM32F107VC i otrzymuję częste błędy malloc. Obszar sterty jest zdefiniowana w skrypcie linkera ale utrzymuje utknięcie w tej pętli pvPortMalloc() po kilku alokacji: skryptBłąd przydziału FreeRTOS
while((pxBlock->xBlockSize < xWantedSize) && (pxBlock->pxNextFreeBlock != NULL))
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}
pxBlock: 0x20002300
pxPreviousBlock: 0x20002300
pxNewBlockLink: 0x00
xHeapHasBeenInitialised: 0x01
łącznikową:
/* 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
}
...
Jak to może być?
Wygląda na problem z przepełnieniem stosu, czy próbowałeś zwiększyć stos !? – Ishmeet
Masz na myśli _Min_Stack_Size? Wypróbowałem to teraz bez powodzenia. Ten plik łącznika był również używany w większych projektach i działał dobrze. – RootRaven
Z której wersji sterty korzystasz? Heap_1.c, heap_2.c lub heap_3.c? Niektóre wersje są fragmentaryczne i nie będą działać, jeśli przydzielisz i zwolnisz bloki pamięci o różnych rozmiarach. –