Linker description file for LPC2378 Flash

Flash memory layout

/*ENTRY(ResetHandler)*/
ENTRY(_startup)
SEARCH_DIR(.)

 /*
 * Define stack size here
 */
FIQ_STACK_SIZE = 0x0040;
IRQ_STACK_SIZE = 0x0040;
ABT_STACK_SIZE = 0x0040;
UND_STACK_SIZE = 0x0040;
SVC_STACK_SIZE = 0x0040;
SYS_STACK_SIZE = 0x0800;

/*
 * This file, lpc2378_flash.ld, locate the program in the internal
 * flash of the LPC2378. For more information about the memory of the LPC2378
 * take a look in the user.manual.lpc2364.lpc2366.lpc2368.lpc2378
 * Reference is made to the user manual from 6 July 2007 Rev. 1.05
 *
 * Take a look at Chapter 2, Section 1. Memory maps
 */

MEMORY
{
    flash             : ORIGIN = 0,          LENGTH = 0x7E000    /* 516096 FLASH ROM */
    flash_isp          : ORIGIN = 0x0007E000, LENGTH = 0x2000    /* 8192 boot block */

    ram_isp_lo(A)   : ORIGIN = 0x40000040, LENGTH = 0x2000   /* 448 bytes for
                                                               variables used
                                                               by ISP bootloader
                                                               and RealMonitor
                                                               DMI need to verifiy origin */
    ram               : ORIGIN = 0x40002200, LENGTH = 0x5E00  /* 31968 free RAM area */
    ram_isp_stack   : ORIGIN = 0x40007EE0, LENGTH = 0x100   /* 256 bytes used by ISP */
    ram_isp_hi(A)   : ORIGIN = 0x40007FE0, LENGTH = 0x20    /* 32 bytes used by ISP */
}

/* define the bootloader entry address.  This is the first free address in RAM */

boot_entry = 0x40000200;

/* define a global symbol _stack_end a.k.a. first stack entry. stack grows down  */

/*_stack_end = 0x40007EDC;    */            /* 0x40007FFF-0x40007EDC=0x123=291d */


/*
 * Do not change the next code
 */
SECTIONS
{
    . = 0;                                /* set location counter to address zero  */

    startup : {
    *(.startup)
    . = ALIGN(4);
    *(.vectors);
    . = ALIGN(4);
    *(.init);
    . = ALIGN(4);
    } >flash        /* the startup code goes into FLASH */

  .text :
  {
    *(.text);
    . = ALIGN(4);
    *(.rodata);
    . = ALIGN(4);
    *(.rodata*);
    . = ALIGN(4);
    *(.glue_7t);
    . = ALIGN(4);
    *(.glue_7);
    . = ALIGN(4);
    etext = .;
    _etext = .;
  } >flash

  .data :
  {
    PROVIDE (__data_start = .);
    *(.data)
    . = ALIGN(4);
    edata = .;
    _edata = .;
    PROVIDE (__data_end = .);
  } >ram AT >flash

  .bss :
  {
    PROVIDE (__bss_start = .);
    *(.bss)
    *(COMMON)
    . = ALIGN(4);
    PROVIDE (__bss_end = .);

    . = ALIGN(256);

    /* NOTE: Stacks are Full (points to an item on the stack)
             and Decending (grows down in addresses)
             This means the very first item pushed onto the stack is
             BOS (Bottom of Stack) - 4 */
    PROVIDE (__stack_start = .);

    PROVIDE (__stack_fiq_start = .);    /* FIQ Mode TOS (Top Of Stack) max. */
    . += FIQ_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_fiq_end = .);      /* FIQ Mode BOS (Bottom of Stack) */

    PROVIDE (__stack_irq_start = .);    /* IRQ Mode TOS max. */
    . += IRQ_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_irq_end = .);      /* IRQ Mode BOS */

    PROVIDE (__stack_abt_start = .);    /* Abort Mode TOS max. */
    . += ABT_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_abt_end = .);      /* Abort Mode BOS */

    PROVIDE (__stack_und_start = .);    /* Undefined Instruction Mode TOS max. */
    . += UND_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_und_end = .);      /* Undefined Instruction Mode BOS */

    PROVIDE (__stack_svc_start = .);    /* Supervisor Mode TOS max. */
    . += SVC_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_svc_end = .);      /* Supervisor Mode BOS */

    PROVIDE (__stack_sys_start = .);    /* System/User Mode TOS max. */
    . += SYS_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_sys_end = .);      /* System/User Mode BOS */

    PROVIDE (__stack_end = .);
    PROVIDE (__heap_start = .);         /* Heap */
  } > ram
}
    _end = .;                            /* define a global symbol marking the end of application RAM */
  PROVIDE ( end = . );
  /*** EOF ***/

Table Of Contents

This Page