[En-Nut-Discussion] How to determin size of RAM
Ole Reinhardt
ole.reinhardt at embedded-it.de
Mon Aug 23 11:20:21 CEST 2010
Hi Ulrich,
Sorry for doing a nearly full quote.. but I think this is needed to
understand the calculations.
> /*!
> * \brief Last memory address.
> */
> #define NUTMEM_END (uptr_t)(NUTMEM_START + NUTMEM_SIZE - 1U)
> extern void *__heap_start;
>
> #define HEAP_START &__heap_start
> #define HEAP_SIZE ((uptr_t) (NUTMEM_END - 256 - (uptr_t) (&__heap_start)))
>
> To do it more automatically I have the following in my linker file:
>
> MEMORY
> {
> FLASH0 (rx) : ORIGIN = 0x00000000, LENGTH = 256K
> SRAM0 (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
> }
> ....
> .bss :
> {
> PROVIDE (_sbss = .);
> *(.bss)
> *(COMMON)
> . = ALIGN(4);
> PROVIDE (_ebss = .);
> . += 0x400;
> PROVIDE (__exp_stack = .);
> . += 0x400;
> PROVIDE (_estack = .);
> PROVIDE (__heap_start = .);
> } > SRAM0
>
> So adding "extern void *__heap_start;" to nutinit.c is the first part of
> the action. But how to figure out the size between this and the end of
> the RAM? Is there such a thing like a variable filler to declare
> __heap_end or something to calculate something like
> origin+size-__heap_start?
What's about:
__ram_start__ = ORIGIN(SRAM0);
__ram_size__ = LENGTH(SRAM0);
__ram_end__ = __ram_start__ + __ram_size__;
__heap_size__ = __ram_end__ - __heap_start;
Regards,
Ole Reinhardt
--
Thermotemp GmbH, Embedded-IT
Embedded Hard-/ Software and Open Source Development,
Integration and Consulting
http://www.embedded-it.de
Geschäftsstelle Siegen - Steinstraße 67 - D-57072 Siegen -
tel +49 (0)271 5513597, +49 (0)271-73681 - fax +49 (0)271 736 97
Hauptsitz - Hademarscher Weg 7 - 13503 Berlin
Tel +49 (0)30 4315205 - Fax +49 (0)30 43665002
Geschäftsführer: Jörg Friedrichs, Ole Reinhardt
Handelsregister Berlin Charlottenburg HRB 45978 UstID DE 156329280
More information about the En-Nut-Discussion
mailing list