[En-Nut-Discussion] How to move the heap start address in Nut/OS?

Malte Marwedel m.marwedel at onlinehome.de
Fri Apr 3 20:24:30 CEST 2009

I have a Arthernet board (with 512KB external memory), which has the 
memory of the CLPD and RTL chipset mapped directly after the internal 
RAM in the region 0x1100 to 0x14ff. As __heap_start is somehow defined 
as 0x19f in my program, allocating heap results in overwriting the CLPD 
and RTL memory, so that the tcps demo crashes after a first connect and 
the httpd demo does not work at all.
I tried to find a way to set __heap_start to 0x1500 but failed, to do 
so, becasue
a) I did not found out where __heap_start is initialized or even defined.
b) I tried to add __heap_start=(u_char *) 0x1500; in the NutCustomInit() 
function, but this had no effect.
c) I tried to add it into the normal main function, but it did not work 

I saw that the first malloc in a program always returned an address of 
about 0x700, so I added malloc(0xe00); as workaround, to prevent the 
memory area from being used to the beginning of the two example apps 
above. Then they worked flawlessly.

Does anybody know where I could change the __heap_start in a good way?
Moreover I found:
#define __bss_end	__heap_start
so, would not changing __heap_start then result in the bss section 
ranging into the CLPD area?

Malte Marwedel

More information about the En-Nut-Discussion mailing list