/*;******************** (C) COPYRIGHT 2005 STMicroelectronics ************************** ;* File Name : lnkarm_ram.xcl ;* Author : MCD Application Team ;* Date First Issued : 09/27/2005 : V1.0 ;* Description : XLINK command file for EWARM/ICCARM ;* : Usage: xlink -f lnkarm ;* : -s ;************************************************************************************* ;* History: ;* 09/27/2005 : V1.0 ;************************************************************************************* ; THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT ; OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT ; OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION ; CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ;*************************************************************************************/ // Code memory in flash -DROMSTART=0x00000000 -DROMEND=0x00080000 -DVECSTART=ROMSTART // Data memory -DRAMSTART=0x4000000 -DRAMEND=0x04018000 //************************************************************************* // In this file it is assumed that the system has the following // memory layout: // // Exception vectors [0x000000--0x00001F] RAM or ROM // ROMSTART--ROMEND [0x008000--0x0FFFFF] ROM (or other non-volatile memory) // RAMSTART--RAMEND [0x100000--0x7FFFFF] RAM (or other read/write memory) // // ------------- // Code segments - may be placed anywhere in memory. // ------------- // // INTVEC -- Exception vector table. // SWITAB -- Software interrupt vector table. // ICODE -- Startup (cstartup) and exception code. // DIFUNCT -- Dynamic initialization vectors used by C++. // CODE -- Compiler generated code. // CODE_I -- Compiler generated code declared __ramfunc (executes in RAM) // CODE_ID -- Initializer for CODE_I (ROM). // // ------------- // Data segments - may be placed anywhere in memory. // ------------- // // CSTACK -- The stack used by C/C++ programs (system and user mode). // IRQ_STACK -- The stack used by IRQ service routines. // SVC_STACK -- The stack used in supervisor mode // (Define other exception stacks as needed for // FIQ, ABT, UND). // HEAP -- The heap used by malloc and free in C and new and // delete in C++. // INITTAB -- Table containing addresses and sizes of segments that // need to be initialized at startup (by cstartup). // CHECKSUM -- The linker places checksum byte(s) in this segment, // when the -J linker command line option is used. // DATA_y -- Data objects. // // Where _y can be one of: // // _AN -- Holds uninitialized located objects, i.e. objects with // an absolute location given by the @ operator or the // #pragma location directive. Since these segments // contain objects which already have a fixed address, // they should not be mentioned in this linker command // file. // _C -- Constants (ROM). // _I -- Initialized data (RAM). // _ID -- The original content of _I (copied to _I by cstartup) (ROM). // _N -- Uninitialized data (RAM). // _Z -- Zero initialized data (RAM). // // Note: Be sure to use end values for the defined address ranges. // Otherwise, the linker may allocate space outside the // intended memory range. //************************************************************************* //************************************************ // Inform the linker about the CPU family used. //************************************************ -carm //************************************************************************* // Segment placement - General information // // All numbers in the segment placement command lines below are interpreted // as hexadecimal unless they are immediately preceded by a '.', which // denotes decimal notation. // // When specifying the segment placement using the -P instead of the -Z // option, the linker is free to split each segment into its segment parts // and randomly place these parts within the given ranges in order to // achieve a more efficient memory usage. One disadvantage, however, is // that it is not possible to find the start or end address (using // the assembler operators .sfb./.sfe.) of a segment which has been split // and reformed. // // When generating an output file which is to be used for programming // external ROM/Flash devices, the -M linker option is very useful // (see xlink.pdf for details). //************************************************************************* //************************************************************************* // Read-only segments mapped to ROM. //************************************************************************* //************************************************ // Address range for reset and exception // vectors (INTVEC). // The vector area is 32 bytes, // an additional 32 bytes is allocated for the // constant table used by ldr PC in cstartup.s79. //************************************************ -Z(CODE)INTVEC=ROMSTART-ROMEND //************************************************ // Startup code and exception routines (ICODE). //************************************************ -Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND -Z(CODE)SWITAB=ROMSTART-ROMEND //************************************************ // Code segments may be placed anywhere. //************************************************ -Z(CODE)CODE=ROMSTART-ROMEND //************************************************ // Original ROM location for __ramfunc code copied // to and executed from RAM. //************************************************ -Z(CONST)CODE_ID=ROMSTART-ROMEND //************************************************ // Various constants and initializers. //************************************************ -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND -Z(CONST)CHECKSUM=ROMSTART-ROMEND //************************************************************************* // Read/write segments mapped to RAM. //************************************************************************* //************************************************ // Data segments. //************************************************ -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND //************************************************ // __ramfunc code copied to and executed from RAM. //************************************************ -Z(DATA)CODE_I=RAMSTART-RAMEND //************************************************ // ICCARM produces code for __ramfunc functions in // CODE_I segments. The -Q XLINK command line // option redirects XLINK to emit the code in the // CODE_ID segment instead, but to keep symbol and // debug information associated with the CODE_I // segment, where the code will execute. //************************************************ -QCODE_I=CODE_ID //************************************************************************* // Stack and heap segments. //************************************************************************* //-D_CSTACK_SIZE=0x1000 //-D_SVC_STACK_SIZE=0x100 //-D_IRQ_STACK_SIZE=0x400 //-D_FIQ_STACK_SIZE=0x40 //-D_ABT_STACK_SIZE=0x40 //-D_UND_STACK_SIZE=0x40 //-D_HEAP_SIZE=0x400 //-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND //-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND //-Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND //-Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND //-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND //-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND //-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND //************************************************************************* // ELF/DWARF support. // // Uncomment the line "-Felf" below to generate ELF/DWARF output. // Available format specifiers are: // // "-yn": Suppress DWARF debug output // "-yp": Multiple ELF program sections // "-yas": Format suitable for debuggers from ARM Ltd (also sets -p flag) // // "-Felf" and the format specifiers can also be supplied directly as // command line options, or selected from the Xlink Output tab in the // IAR Embedded Workbench. //************************************************************************* // -Felf