Ich verwende FreeRTOS V6.1.1 auf einem STM32F107VC und bekomme häufige malloc Fehler. Der Heap-Bereich ist in der Linker-Skript definiert, aber es hält in dieser Schleife von pvPortMalloc() nach einigen Zuteilungen stecken:FreeRTOS Zuordnungsfehler
while((pxBlock->xBlockSize < xWantedSize) && (pxBlock->pxNextFreeBlock != NULL))
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}
pxBlock: 0x20002300
pxPreviousBlock: 0x20002300
pxNewBlockLink: 0x00
xHeapHasBeenInitialised: 0x01
Linker-Skript:
/* 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
}
...
Wie kann das sein?
Sieht aus wie ein Stack-Überlauf-Problem, haben Sie versucht, den Stack zu erhöhen !? – Ishmeet
Sie meinen _Min_Stack_Size? Ich habe es jetzt ohne Erfolg versucht. Diese Linker-Datei wurde auch in größeren Projekten verwendet und funktionierte gut. – RootRaven
Welche Version des Heap verwenden Sie? Heap_1.c, heap_2.c oder heap_3.c? Einige Versionen werden fragmentiert und funktionieren nicht, wenn Sie Speicherblöcke mit unterschiedlichen Größen zuweisen und freigeben. –