mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			219 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*;******************** (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  <your_object_file(s)>
 | 
						|
;*                    : -s <program start label>  <C/C++ runtime library>
 | 
						|
;*************************************************************************************
 | 
						|
;* 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
 |