heap_2.c causes out of memory

wella wrote on Thursday, August 20, 2009:

Hello,

I am running this code:
void testMem(void *pvParameters)
{
    unsigned char * mem;
    for (int v = 0; v < 100000; v++)
    {
        for (int i = 1900; i < 2500; i++)
        {
            mem = (unsigned char *) pvPortMalloc((i) * sizeof(unsigned char));
            if (NULL == mem)
            {
                // set breakpoint here
            }
            vPortFree(mem);
        }
    }
}
and after a while the mem becomes null and breakpoint is hitted. This code is running on CortexM3, LM3S8962 copiled by gcc or IAR and freeRTOS 5.4.2. Memory is configTOTAL_HEAP_SIZE ( ( size_t ) ( 32768 ) ).
This is a school problem example but I have discovered it in the real situation during receiving ethernet packets.
Have anyone the same problem?

Regard,
Martin

davedoors wrote on Thursday, August 20, 2009:

This will be caused by memory fragmentation. See http://www.freertos.org/a00111.html where it says heap_2 "Should not be used if the memory being allocated and freed is of a random size".

wella wrote on Monday, August 24, 2009:

Hi Dave,
thanks a lot. This was my problem. I am trying to implement a bget maybe it will help.