problem with .ICF FILE of IAR EWARM 5.4

I begin to develop a program for LPC2129 with IAR EWARM 5.4

I found that there is a file. ICF when I must to configure for that the linker

to the IAR generates. hex specific to my application.

i have problem to understand how i can configure its parameters.

i found an example of file .ICF in an example of project with IAR.

program_in_flash.icf file in leds example provided with iar contains these

details.

/-Memory Regions-/

define symbol ICFEDIT_region_ROM_start = 0x00000044;

define symbol ICFEDIT_region_ROM_end = 0x0003FFFF;

define symbol ICFEDIT_region_RAM_start = 0x40000040;

define symbol ICFEDIT_region_RAM_end = 0x40003FFF;

/-Sizes-/

define symbol ICFEDIT_size_cstack = 0x200;

define symbol ICFEDIT_size_svcstack = 0x0;

define symbol ICFEDIT_size_irqstack = 0x100;

define symbol ICFEDIT_size_fiqstack = 0x0;

define symbol ICFEDIT_size_undstack = 0x0;

define symbol ICFEDIT_size_abtstack = 0x0;

define symbol ICFEDIT_size_heap = 0x200;

according datasheet ROM_start = 0x00000000. why is declared 0x00000044 ?

same RAM_start = 0x40000000. I don’t understand why is declared 0x40000040 ?

and how to initialize the sizes of the stacks?

what criteria of choice are initialized these stacks?

I find in other examples:

they are different parameters of the first example

/-Sizes-/

define symbol ICFEDIT_size_cstack = 0x2000;

define symbol ICFEDIT_size_svcstack = 0x100;

define symbol ICFEDIT_size_irqstack = 0x100;

define symbol ICFEDIT_size_fiqstack = 0x100;

define symbol ICFEDIT_size_undstack = 0x100;

define symbol ICFEDIT_size_abtstack = 0x100;

define symbol ICFEDIT_size_heap = 0x8000;

I do not understand what I put as the size for each stack

IAR gives you a GUI based editor for these files.

Project, options, linker, config

Check the Override Default box, then click EDIT

The values to use are a serious matter: YOU have to estimate the maximum RAM needed for the stack (cstack) and heap (if you use malloc()). Some CPU types have duplicate stacks for the CPU modes. A too-large value wastes RAM; too small, and the program crashes, and perhaps rarely depending on real time event nesting.