"C:\StellarisWare\boards\ek-lm3s8962\qs_ek-lm3s8962"에 있는 "qs_ek-lm3s8962.icf"를 분석해 보았다.

//*****************************************************************************
//
// qs_ek-lm3s8962.icf - Linker configuration file for qs_ek-lm3s8962.
//
// Copyright (c) 2007-2009 Texas Instruments Incorporated. All rights reserved.
// Software License Agreement
//
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
//
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 5450 of the EK-LM3S8962 Firmware Package.
//
//*****************************************************************************

//
// Define a memory region that covers the entire 4 GB addressible space of the
// processor.
//
define memory mem with size = 4G; 
// 전체 메모리 영역의 크기 정의 :: 4G
define memory mem with size = 4G;

//
// Define a region for the on-chip flash.
//
define region FLASH = mem:[from 0x00000000 to 0x0003ffff];
// on-chip flash 영역의 크기 지정
define region FLASH = mem:[from 0x00000000 to 0x0003ffff];


LM3S8962 메모리 맵에서 On-chip Flash 영역은 0x0000 0000 ~ 0x0003 FFFF (256KB) 인 것을 확인 할 수 있다.


//
// Define a region for the on-chip SRAM.
//
define region SRAM = mem:[from 0x20000000 to 0x2000ffff];
// on-chip SRAM영역의 크기 지정
define region SRAM = mem:[from 0x20000000 to 0x2000ffff];


LM3S8962 메모리 맵에서 Bit-banede on-chip SRAM 영역은 0x2000 0000 ~ 0x2000 FFFF (64KB) 인 것을 확인 할 수 있다.



//
// Define a block for the heap.  The size should be set to something other
// than zero if things in the C library that require the heap are used.
//
define block HEAP with alignment = 8, size = 0x00000000 { };

// Heap을 위한 block 영역을 정의
// Heap 이 사용되도록 하는  C 라이브러리가 있다면 heap의 size는 0보다 크게 설정해야 한다.
define block HEAP with alignment = 8, size = 0x00000000 { };

여기서는 Heap영역을 사용하지 않는다.


//
// Indicate that the read/write values should be initialized by copying from
// flash.
//
initialize by copy { readwrite };
// read/write value는 flash로부터 복사됨에 의해 초기화 되어야만 하는 것을 나타냄.
initialize by copy { readwrite };


//
// Indicate that the noinit values should be left alone.  This includes the
// stack, which if initialized will destroy the return address from the
// initialization code, causing the processor to branch to zero and fault.
//
do not initialize { section .noinit };
//noinit values 는 홀로 남아있어야만 함을 나타냄(초기화 되지 말야야 함). 이것은 stack을 포함하고, 만약 초기화되면 initialization code로부터 return address를 파괴하고 processor를 zero나 fault로 분기시키는 원인이 됨.
do not initialize { section .noinit };


//
// Place the interrupt vectors at the start of flash.
//
place at start of FLASH { readonly section .intvec };
// Flash의 시작에 interrupt vectors를 위치시킴.
place at start of FLASH { readonly section .intvec };


//
// Place the remainder of the read-only items into flash.
//
place in FLASH { readonly };
// read-only items의 나머지를 Flash로 위치시킴.
place in FLASH { readonly };


//
// Place the RAM vector table at the start of SRAM.
//
place at start of SRAM { section VTABLE };
// SRAM의 시작에 RAM vector table을 위치시킴.
place at start of SRAM { section VTABLE };


* 런타임시 인터럽트 벡터를 바꾸기 위해 SRAM 영역 사용.
* 어플에서 벡터테이블 위치를 바꾸게 하기 위해 사용.



//
// Place all read/write items into SRAM.
//
place in SRAM { readwrite, block HEAP };
// SRAM으로 모든 read/write items를 위치시킴.
place in SRAM { readwrite, block HEAP };


Posted by eoseontaek