5

STM32F107VC で FreeRTOS V6.1.1 を使用していますが、頻繁に malloc エラーが発生します。ヒープ領域はリンカー スクリプトで定義されていますが、いくつかの割り当ての後、pvPortMalloc() のこのループでスタックし続けます。

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
}

...

どうすればいいの?

4

1 に答える 1

2

これはおそらく、heap_2.c の断片化が原因でした。割り当てはかなり小さいものでしたが、動作は一貫していました。heap_4.c を使用すると解決しました。

于 2014-01-28T00:28:39.500 に答える