Skip to main content
Graduate
September 12, 2024
Solved

LWIP_RAND uses newlib rand() and fails

  • September 12, 2024
  • 1 reply
  • 1180 views

CubeMX generated project defines

 

#define LWIP_RAND() ((u32_t)rand())

 

which fails with the following call stack...

Gustavo_AR_1-1726157473699.png

and the following assert text

assertion "REENT malloc succeeded" failed: file "/build/gnu-tools-for-stm32_12.3.rel1.20240612-1315/src/newlib/newlib/libc/stdlib/rand.c", line 82

Line 82 of rand.c is:

 

_REENT_CHECK_RAND48(reent);

 

which in turn ends up calling a malloc... 

I've read that reentrancy in newlib could cause problems, but I thought it would be memory corruption.

Is there a solution for this?

Thanks in advance!

    This topic has been closed for replies.
    Best answer by Imen.D

    Hello @Gustavo_AR ,

    Seems you have the same issue reported in these posts:

    Hope the shared posts will help you, otherwise please share more details about the device, the tools version used and how to reproduce the issue.

    1 reply

    Imen.DAnswer
    Technical Moderator
    September 12, 2024

    Hello @Gustavo_AR ,

    Seems you have the same issue reported in these posts:

    Hope the shared posts will help you, otherwise please share more details about the device, the tools version used and how to reproduce the issue.

    Graduate
    September 13, 2024

    Thanks @Imen.D I've fixed it by 

    /* Defining malloc/free should overwrite the standard versions provided by the compiler. */
    
    void *malloc(size_t size) {
     /* Call the FreeRTOS version of malloc. */
     return pvPortMalloc(size);
    }
    
    void free(void *ptr) {
     /* Call the FreeRTOS version of free. */
     vPortFree(ptr);
    }