Showing results for 
Search instead for 
Did you mean: 

LwIP pbuf components and memory use for stm32f2 mcu udp server implementation.

Associate III

I'm trying to understand the documents (having in mind this stm32 document: AN3384), stm32 examples and comments on some source files from this stack in order to choose the correct options for my application.

According to the literature I see there are 3 types of pbuf: ROM, RAM and POOL.

Some authors say that:

  1. PBUF_POOL can be managed as a pools of dynamic memory (heap) that can be freed after being used. But it can also be used as static memory pools. But reading literature "pbuf allocation is performed from a pool of statically pre-allocated pbufs".
  2. The way for having static or dynamic pbufs is enabling one of this two options: MEM_USE_POOLS or MEMP_MEM_MALLOC.
  3. Source code comment says about PBUF_POOL: "pbuf payload refers to RAM. This one comes from a pool and should be used for RX... Don't use this for TX with TCP packets".
  4. PBUF_ROM is for constant data payload that doesn't change.
  5. PBUF_RAM only can be used as a dynamic ram memory. Only MEMP_MEM_MALLOC.

  • Regarding point 1: Are they only static objects or can they be treated as both static and dynamic elements?
  • Regarding point 2: is it true that defining MEMP_MEM_MALLOC I would have all the pbufs dynamically allocated? and defining MEM_USE_POOLS is used for having all the pbuf statically allocated. This questions are not clear on stm32 literature documents so I need it to clarify.
  • Regarding point 3: If I'm not wrong I can only define one way for memory managing on opt.h file: static or dynamic (MEM_USE_POOLS or not). If I enable static memory for reception incoming pbuf, how could I work with non static pbuf for transmission packets if I've defined static memory (in order to have received pbuf statically allocated)? Can static buffers (PBUF_POOL) be used packets transmission if packets are UDP ones?
  • Regarding point 4: I guess in case of need of pbuf_rom the opt.h defined option must be static memory: MEM_USE_POOLS.
  • Regarding pint 5: is this assertion true?

I'm a bit confused and I'm not sure if the options I'have explined are correctly understood for me. So, please let me know which of them are my missunderstunding.

 Thanks in advance.


There's not much non-STM32-specific lwip support here. Try perhaps the lwip-users mailing list.


Maybe you are right but the most of my questions are regarding stm32 AN3384 documentation. I have read the whole text and these were my doubts after reading its explanations and its assertions. So I hope that some of them could be also answered here.

Thanks for your advice, too.