DEVELHELP flag in Makefiles

Hi everyone,

Can someone explain me what this flag in Makefile examples do ?

I just finished an app for a custom board. As my Makefile was based on an example, there was still this flag present. As its comment suggests, it's for development so I decided to remove it.

After removing it, my application starts normally right after flashing my board but as soon as I unplug it from power supply and plug it again, the app doesn't start anymore. I flashed the app on a Nucleo-F303RE to get some console output but I just get garbage from pyterm. I decided to keep this flag as it works flawlessly with it and takes only 4kB more in ROM but it could be great if someone knows a little more about it.

What could cause my app on two boards to fail starting without this flag ? In my app, I use some DEBUG() macros, I start two threads, do some UDP packets exchanges with another boards and that's it.

Best regards


Hi Joel,

It enables additional debug output and sanity checks. You can find more information at [1].

Kind regards, Bas


Thank you for your answer. I've already read the docs but my real question was why do I get this "strange" behaviour ? My app works fine with the flag (flashed on over 50 boards) but without it the app can't start anymore as soon as I unplug the board from power and replug it. With the flag I have no issue.

Where can I look for something bad in my code that can explain this difference ? I looked a bit in the RIOT source code but didn't find anything for the moment that can give me an answer.

Envoyé par BlueMail<>

In the docs, we find :

"Additional code parts such as (extensive) debug output and sanity checks using assertions. To activate it set environment variable DEVELHELP=1, or disable explicitly with DEVELHELP=0."<>

But, everywhere in RIOT source code, the DEVELHELP is checked with "#ifdef DEVELHELP" or "#if defined(DEVELHELP)". So, correct me if I'm wrong, but it shouldn't change anything if the DEVELHELP is set to 0, 1 or anything else ? In this case, the doc is wrong ? We really need to comment it out as suggested in the Makefiles of examples to remove it. But then it causes my app to not restart after simulated power outage.

Finally, I found that if I remove the flag DEVELHELP but I add the flag SCHED_TEST_STACK, my app survives the simulated power outages. Then I tried to work without any of these flags in my Makefile and to remove some #ifdef. After a while, I found that removing the #ifdef in files :

  • core/thread.c around line “cb->stack_start = stack;”

  • core/include/thread.h around line : “char *stack_start;”

was solving my issue.

I’m launching two threads in my app. One with THREAD_CREATE_SLEEPING and one with 0 as flags.

I’m curious to know why this solves my issue and how it affects RIOT ? Does anyone knows ?

1 Like

Hi Joel,