[En-Nut-Discussion] no source in debugger solved, next step

Harald Kipp harald.kipp at egnite.de
Tue Oct 4 12:54:16 CEST 2011


Hi Klaus,

On 02.10.2011 22:27, Klaus Kloos wrote:

> [4] Connected, 1444 bytes free
> 
> [4] Low mem
> 
> [4] Low mem

The provided http sample is a bit overdone. Over the years, more and
more demo code had been added to it. Most real applications will not
need all the implemented features.

I just tried a short compile/link test with Nut/OS 4.10 and debugging
enabled. It turns out, that 12k static RAM is already required before
the application starts.

The debug version of the code requires more stack space. For this, the
Configurator simply defines

 NUT_THREAD_STACK_MULT=3

So every thread's stack space reservation is multiplied by 3. Probably
this could be lowered. And then there is a bug in httpserv.c itself,
defining

 #define HTTPD_SERVICE_STACK ((1024 * NUT_THREAD_STACK_MULT) +
NUT_THREAD_STACK_ADD)

and

 NutThreadCreate(thname, Service, (void *) (uptr_t) i,
    (HTTPD_SERVICE_STACK * NUT_THREAD_STACK_MULT) + NUT_THREAD_STACK_ADD);

which actually reserves 9k stack (3 * 3 * 1024) for each of the 4 server
threads. Together with statically allocated RAM space, we are nearly at
50k. The CPU has 64k RAM only.

This has been fixed in 4.10, but not yet in 4.8. I haven't been aware,
that this is a show stopper for the SAM7X-EK when running debug code.

Changing the line to

NutThreadCreate(thname, Service, (void *) (uintptr_t) i,
HTTPD_SERVICE_STACK);

should help in a first step.

When compiling without debugging info, a lot more RAM is available.
Furthermore, you can build Nut/OS libs _without_ and your application
code _with_ debugging info to debug application code only.

Regards,

Harald




More information about the En-Nut-Discussion mailing list