Skip to main content
Visitor II
January 25, 2021
Question

STM32F4 LWIP freezes after fixed send number

  • January 25, 2021
  • 2 replies
  • 756 views

I'm using nucleo f429zi with LWIP v 2.1.2. Documentation states that for TX buffer PBUF_RAM should be used. In my case whole LWIP stack freeze after 28 send messages. When I change pbuf type to PBUF_POOL, everything works like a charm. Although in the docs it written that this type should be used for RX buffer. Here is my implementation of udp callback function.

void
udp_descserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) {
 
uint8_t triesNumber = 0;
err_t error; 
udp_connect(upcb, addr, port);
pbuf_free(p);
p = NULL;
p = pbuf_alloc(PBUF_TRANSPORT, sizeof(PING_INFO), PBUF_POOL);
if(p != NULL) {
 pbuf_take(p, &pingInfo, sizeof(PING_INFO));
 do {
 error = udp_send(upcb, p);
 triesNumber++;
 } while (error && triesNumber < RESEND_TRIES);
}
pbuf_free(p);
udp_disconnect(upcb);
}

Also I get message "Assertion failed p != NULL"

My question is, why the method which is contrary to docs works.

    This topic has been closed for replies.

    2 replies

    Graduate II
    January 25, 2021

    Well that looks prone to die if p is NULL

    I'd definitely do something different on line 17 to stop it freeing a NULL pointer.

    Are the allocation routines thread safe?

    Kajetan.BAuthor
    Visitor II
    January 25, 2021

    I could move line 17th inside IF statement. I think they should be I only use one thread, no OS.