结合18f4620.lkr来说明链接描述文件中代码的含义
//$Id:18f4620.lkr,v1.32004/04/2618:09:00curtissExp$
//File:18f4620.lkr
//SamplelinkerscriptforthePIC18F4620processor
//将当前目录library/object搜索路径,.代表当前目录
LIBPATH.
//FILES伪指令指定链接的目标或库文件
//注:可以在一个单独的FILES伪指令中指定多个目标或库文件。
FILESc018i.o
FILESclib.lib
FILESp18f4620.lib
//链接描述文件说明PICmicroMCU的存储器架构。这使链接器可把代码在可用的ROM空间,把变量放在可用的RAM空间。标记PROTECTED的区域不会被用于一般程序或数据的分配。只有在为代码段指定了一个绝对地址时,或在链接描述文件中使用SECTION伪指令将该代码段分配给该区域时,代码或数据才被分配到这些区域。
//CODEPAGE伪指令用于程序代码、初始化的数据值、常数值和外部存储器。
CODEPAGENAME=vectorsSTART=0x0 END=0x29 PROTECTED//复位向量和中断向量
CODEPAGENAME=pageSTART=0x2A END=0xFFFF //用户存储空间
CODEPAGENAME=idlocs START=0x200000END=0x200007PROTECTED//ID地址单元
CODEPAGENAME=configSTART=0x300000END=0x30000DPROTECTED//配置存储空间
CODEPAGENAME=devidSTART=0x3FFFFE END=0x3FFFFF PROTECTED//器件ID
CODEPAGENAME=eedataSTART=0xF00000END=0xF003FF PROTECTED//EEPROM数据
//DATABANK(分组寄存器)和ACCESSBANK(快速操作寄存器)伪指令用于内部RAM中的变量
ACCESSBANKNAME=accessramSTART=0x0END=0x7F//Bank0
DATABANKNAME=gpr0START=0x80END=0xFF//Bank0
DATABANKNAME=gpr1START=0x100END=0x1FF//Bank1
DATABANKNAME=gpr2START=0x200END=0x2FF//Bank2
DATABANKNAME=gpr3START=0x300END=0x3FF//Bank3
DATABANKNAME=gpr4START=0x400END=0x4FF//Bank4
DATABANKNAME=gpr5START=0x500END=0x5FF//Bank5
DATABANKNAME=gpr6START=0x600END=0x6FF//Bank6
DATABANKNAME=gpr7START=0x700END=0x7FF//Bank7
DATABANKNAME=gpr8START=0x800END=0x8FF//Bank8
DATABANKNAME=gpr9START=0x900END=0x9FF//Bank9
DATABANKNAME=gpr10START=0xA00END=0xAFF//Bank10
DATABANKNAME=gpr11START=0xB00END=0xBFF//Bank11
DATABANKNAME=gpr12START=0xC00END=0xCFF//Bank12
DATABANKNAME=gpr13START=0xD00END=0xDFF//Bank13
DATABANKNAME=gpr14START=0xE00END=0xEFF//Bank14
DATABANKNAME=gpr15START=0xF00END=0xF7F//Bank15
ACCESSBANKNAME=accesssfrSTART=0xF80END=0xFFFPROTECTED//Bank15SpecialFunctionRegisters(SFR)
//逻辑代码段用于指定应将定义的存储器区域的哪一个区域用于一段源代码。要使用逻辑代码段,用SECTION伪指令在链接描述文件中定义代
码段,然后使用该语言内置机制在源文件中引用该名称(如MPLABC18的#pragmasection)。此代码段伪指令通过指定代码段的名称,
//以及包含此代码段的ROM中的程序存储器区块或RAM中的数据存储器区块来定义代码段:
//SECTIONNAME=secName{ROM=memName|RAM=memName}
SECTIONNAME=CONFIGROM=config
//只有MPLABC18要求设置软件堆栈。下面的语句指定堆栈大小以及堆栈将被分配到的可选DATABANK:
//STACKSIZE=allocSize[RAM=memName]
STACKSIZE=0x100RAM=gpr14