Il 14/03/2018 20:26, goldsi...@gmx.de ha scritto:
On 14.03.2018 16:42, Giuseppe Modugno wrote:
I was experimenting with lwip memory allocator. I defined:

#define MEM_LIBC_MALLOC  0
#define MEM_USE_POOLS      0
#define MEM_SIZE  (32 * 1024)
#define LWIP_RAM_HEAP_POINTER  ( (void *)0x2007C000 )

I'm using LPC1768 that has a 32kB SRAM block starting from address
0x2007C000. However I have a Hard Fault error during mem_init(), because
ram_end is initialized to 0x2007C000 + (32*1024), that is over the
available memory.

So MEM_SIZE should be smaller than available heap memory.

Is that a question? Or an action request?
It was a question, even if I forgot to add a question mark :-)

To my understanding, the comment above #ifndef LWIP_RAM_HEAP_POINTER in mem.c clearly states that enough memory is required. It does NOT say that amount is MEM_SIZE. If you want, create a patch with a better documentation and we could apply it.
Ah ok, I now understand the comment "we need one struct mem at the end and some room for alignment".

MEM_SIZE isn't the total available memory for heap management (including accessory structs), but it is the *useful* memory space the application needs for the heap (excluding accessory structs). For example, if MEM_SIZE is 1024, I can be sure one malloc(1024) won't fail.

In my case, I have a completely free (not used by the linker) 32kB RAM region starting from 0x2007C000. To instruct lwip to use that region for heap, I think I have to define:

#define MEM_SIZE      (32 * 1024 - 1 * SIZEOF_STRUCT_MEM)
#define LWIP_RAM_HEAP_POINTER     ( (void *)0x2007C000 )

Supposing we don't need other additional space for alignment.
In this case the total free heap memory available for data is exactly MEM_SIZE, that is less than 32kB.

Is it correct?

_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to