Skip to main content
Visitor II
February 22, 2024
Question

lwIP pool location

  • February 22, 2024
  • 2 replies
  • 1557 views

Hi,

Does any one how to make pbuf’s be in a certain memory range?

For example when I call pbuf_alloc(PBUF_RAW, PBUF_POOL_BUFSIZE, PBUF_POOL) it will allocate a pbuf from a pool that is contained in this array memp_memory, is there a better way/proper way to do this no how I did.

memp.c:

....

 /** This is the actual memory used by the pools (all pools in one big block). */

static u8_t memp_memory[MEM_ALIGNMENT - 1

#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )

#include "lwip/memp_std.h"

] __attribute__((section(".my_mem")));

....

I just added __attribute__((section(".my_mem"))), in my linker scrip I have that section tied to an absolute address.

And I'm using lwIP 1.4.0.

 

Best regards,

Alex

    This topic has been closed for replies.

    2 replies

    ST Employee
    March 6, 2024

    Hello @abeslic ,

    if you are using CubeIDE the way to set you memory pool in a dedicated memory region has no apparent flows from my side  .

    but if you want to place the Pbufs in a spesific place in RAM for example you can do the following :

    To relocate a pool, declare it as extern in cc.h. Example for GCC:

    * extern u8_t \_\_attribute\_\_((section(".onchip_mem"))) memp_memory_my_private_pool_base[];

    __attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];

    BR

    Graduate II
    March 6, 2024

    With LWIP 2.x and a STM32H733 I'm using this in lwip/arch.h :

    in lwip/arch.h:
    #ifndef LWIP_DECLARE_MEMORY_ALIGNED
    #define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)] __ATT_SECT_LWIPPOOL
    #endif
    
    in main.h:
    #define __ATT_SECT_LWIPPOOL __attribute__((section(".LwipPoolSection")))
    
    in linker file:
    SRAXI_D1(xrw)		: ORIGIN = 0x24000000, LENGTH = 320K
    ...
    /* lwIP POOL section */
    	.LwipPoolSection (NOLOAD):
    	{
    		. = ALIGN(4);
    		*(.LwipPoolSection)
    		*(.LwipPoolSection*)
    		. = ALIGN(4);
    	} >SRAXI_D1
    /*	} >SRAXI_D1_LWIP */