//
// File: f8w2430.xcl
//
// Description:
// This is an extended command line file for XLINK tool to be used when
// developing/debugging applications written for the Chipcon CC2430.
// This file was originally created by concatenation of default files
// provided by IAR: lnk51ew_cc2430.xcl and lnk_base.xcl.
//
// Important:
// Data cannot be located at address zero, this address is reserved for
// the null pointer.
//
//
// Variables (used by lnk_base.xcl)
// ================================
//
// Segment limits
// --------------
//
//
// IDATA
//
-D_IDATA_END=0xFF // Last address of Idata memory
//
//
// PDATA
//
-D_PDATA_START=0xEF00 // First address for PDATA memory.
-D_PDATA_END=0xEFFF // Last address for PDATA memory.
//
//
// IXDATA
//
// These settings are used for devices that don't use PM2/PM3
-D_IXDATA_START=E000 // The internal IXDATA block is 8K,
-D_IXDATA_END=FEFF // End of IXDATA if PM2/PM3 are not used
//
// These settings must be used for devices that use PM2/PM3.
// Note that the IXDATA_START allows the XSTACK to grow down into the non-persistent RAM, but
// checks in HAL Sleep insure that the stack is back into persistent RAM before entering PM2/PM3.
//-D_IXDATA_START=EE00 // The internal IXDATA block is 4K+,
//-D_IXDATA_END=FD55 // FD56-FEFF is used for saving the CC2430 registers before sleep.
//
// FF00-FFFF is mapped to IDATA.
//
//
// XDATA
//
-D_XDATA_START=_IXDATA_START // The IXDATA is used as XDATA.
-D_XDATA_END=_IXDATA_END
//
//
// NEAR CODE
//
-D_NEAR_CODE_END=0x7FFF // Last address for near code, near code segment is 32KB in banked code model.
//
//
// TINY CODE
//
-D_TINY_CODE_END=0x7FF // Last address for tiny code.
//
//
// CODE
//
// These settings determine the size/location of the ROOT segment.
// Increase _CODE_END to increase ROOT memory, i.e. for constants.
-D_CODE_START=0x0000 // Code size = 128k for CC2430-F128
//-D_CODE_END=0x28FF // Last address for ROOT bank 原来的默认配置
-D_CODE_END=0x27FF // Last address for ROOT bank 自定义的配置
//
//-D_BANK1A=(10000+_CODE_END+1) // First address for BANK1 原来的默认配置
//
///自定义的BANK0分区//
///自定义的BANK0分区//
//把BANK0区域自定义为3块 注意:0X0000-0X27FF前面这些有关于中断等的地址,不要乱动。
-D_BLCODE1_START=0x2800 // 自定义的8K
-D_BLCODE1_END=0x47FF
//可以在函数定义前用#pragma location="BLCODE1" 把该函数的存储地址定位到BLCODE1区域中。多个函数可以//多次使用,地址默认连续存储 BLCODE1在下面定义
-D_BLCODE2_START=0x4800 //自定义的8K
-D_BLCODE2_END=0x67FF
//
-D_BLCODE3_START=0x6800 //自定义的6K
-D_BLCODE3_END=0x7FFF //BANK0 的32K从0X0000-0X07FFF 这里把BANK0分区3块
//
-D_BANK1A=(10000+_BLCODE3_END+1) // First address for BANK1 0x18000 这个10000是16进制的,注意
// ZigBee Stack Non-Volatile Storage
//默认的配置,不要动
-D_ZIGNV_START=0x3E000 // The two pages before the last two pages of the 3rd overlayed bank.
-D_ZIGNV_SIZE=0x1000 // Size of ZigBee NV (2 pages)
-D_ZIGNV_END=(_ZIGNV_START+_ZIGNV_SIZE-1)
//
//
// HEX FILE GENERATION
//
// Include the following line when generating hex file:
//-M(CODE)_BANK1A-1FFFF,28000-2FFFF,38000-3DFFF,3F000-3fff7=(_CODE_END+1)-0xFFFF,0x10000-0x17FFF,0x18000-0x1DFFF,0x1F000-0x1FFF7
//
//
// Special SFRs
// ------------
//
//
// Register bank setup
//默认的配置,不要动
-D?REGISTER_BANK=0 // Default register bank (0,1,2,3).
-D_REGISTER_BANK_START=0 // Start address for default register bank (00,08,10,18).
-D_FIRST_BANK_ADDR=0x10000
-D_NR_OF_BANKS=0x03
//
//
// PDATA bank setup
//
-D?PBANK_NUMBER=EF // High byte of 16-bit address to the PDATA area
-D?PBANK=93 // Most significant byte in MOVX A,@R0. (0x93 is sfr MPAGE)
//
//
// Virtual register setup
// ----------------------
//
-D_BREG_START=0x00 // The bit address where the BREG segments starts.
// Must be placed on: _BREG_START%8=0 where _BREG_START <= 0x78.
-D?VB=0x20 // ?VB is used when referencing BREG as whole byte.
// Must be placed on: ?VB=0x20+_BREG_START/8
//
//
//
// To the reader: Ignore this section ------------------------------------------
//默认的配置,不要动
// Dummy definitions needed to satisfy lnk_base.xcl
-D_FAR_DATA_NR_OF_BANKS=0x0E // Number of banks in far data memory.
-D_FAR_DATA_START=0x010001 // First address of far memory.
-D_FAR_DATA_END=0xFFFFFF // Last address of far memory.
-D_FAR_CODE_START=_CODE_START // First address for far code.
-D_FAR_CODE_END=_CODE_END // Last address for far code.
// End of the section to ignore ------------------------------------------------
//
//
// File: the following defintions are extracted from the lnkbase.xcl file
//
//
//
// IDATA memory
//默认的配置,不要动
// Setup "bit" segments (only for '__no_init bool' variables).
-Z(BIT)BREG=_BREG_START
-Z(BIT)BIT_N=0-7F
//
-Z(DATA)REGISTERS+8=_REGISTER_BANK_START
-Z(DATA)BDATA_Z,BDATA_N,BDATA_I=20-2F
-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F
-Z(DATA)PSP,XSP=08-7F
-Z(DATA)DOVERLAY=08-7F
-Z(DATA)DATA_I,DATA_Z,DATA_N=08-7F
//
-U(IDATA)0-7F=(DATA)0-7F
-Z(IDATA)IDATA_I,IDATA_Z,IDATA_N=08-_IDATA_END
-Z(IDATA)ISTACK+_IDATA_STACK_SIZE#08-_IDATA_END
-Z(IDATA)IOVERLAY=08-FF
//
//
// ROM memory
//
// Note: INTVEC must be placed first.
// Note: CSTART Must be located in first 64k.
//
// Program memory
//默认的配置,不要动
-Z(CODE)INTVEC=0
-Z(CODE)CSTART=_CODE_START-_CODE_END
-Z(CODE)RCODE=_CODE_START-_CODE_END
-Z(CODE)TINY_CODE=_CODE_START-_TINY_CODE_END
-Z(CODE)NEAR_CODE=_CODE_START-_NEAR_CODE_END
-Z(CODE)DIFUNCT=_CODE_START-_CODE_END
-Z(CODE)FAR_CODE=_CODE_START-_CODE_END
-Z(CODE)BANK_RELAYS=_CODE_START-_CODE_END
//
//可以在函数定义前用#pragma location="BLCODE1" 把该函数的存储地址定位到BLCODE1区域中。多个函数可以//多次使用,地址默认连续存储
-Z(CODE)BLCODE1=_BLCODE1_START-_BLCODE1_END //自定义的BANK0中的块8K
-Z(CODE)BLCODE2=_BLCODE2_START-_BLCODE2_END //自定义的BANK0中的块8K
-Z(CODE)BLCODE3=_BLCODE3_START-_BLCODE3_END //自定义的BANK0中的块6K
//
//默认的配置,不用管
-P(CODE)BANKED_CODE=_BANK1_START-_BANK1_END,_BANK2_START-_BANK2_END,_BANK3_START-_BANK3_END,_BANK3b_START-_BANK3b_END
//
//
// Initializers
//默认的配置,不用管
-Z(CODE)BIT_ID,BDATA_ID,DATA_ID,IDATA_ID,IXDATA_ID,PDATA_ID,XDATA_ID=_CODE_START-_CODE_END
-Z(CODE)HUGE_ID=_FAR_CODE_START-_FAR_CODE_END
//
//
// Constants located in code memory
//默认的配置,不用管
-Z(CODE)CODE_C=_CODE_START-_CODE_END
-Z(CODE)FAR_CODE_C=_FAR_CODE_START-_FAR_CODE_END
-Z(CODE)HUGE_CODE_C=_FAR_CODE_START-_FAR_CODE_END
-Z(CODE)CHECKSUM#_CODE_END
//
//
// Stacks located in XDATA
//默认的配置,不用管
-Z(XDATA)EXT_STACK+_EXTENDED_STACK_SIZE=_EXTENDED_STACK_START-_EXTENDED_STACK_END
-Z(XDATA)PSTACK+_PDATA_STACK_SIZE=_PDATA_START-_PDATA_END
-Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_START-_XDATA_END
//
//
// PDATA - data memory
//默认的配置,不用管
-Z(XDATA)PDATA_N,PDATA_Z,PDATA_I=_PDATA_START-_PDATA_END
//
//
// XDATA - data memory
//默认的配置,不用管
-Z(XDATA)IXDATA_N,IXDATA_Z,IXDATA_I=_IXDATA_START-_IXDATA_END
-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END
-Z(XDATA)XDATA_HEAP+_XDATA_HEAP_SIZE=_XDATA_START-_XDATA_END
-Z(CONST)XDATA_ROM_C=_XDATA_START-_XDATA_END
//
//
// FAR - extended data memory
//默认的配置,不用管
// Initialized FAR data
// Note: The segment FAR_I and FAR_ID must start at the same address within a 64k bank,
// they must therefore be located first in the FAR data area, and in the xlink linker file
// Note: *_I segment is located in RAM but *_ID segments is located in ROM
//
//
// Stacks located in XDATA
//默认的配置,不用管
-Z(XDATA)EXT_STACK+_EXTENDED_STACK_SIZE=_EXTENDED_STACK_START-_EXTENDED_STACK_END
-Z(XDATA)PSTACK+_PDATA_STACK_SIZE=_PDATA_START-_PDATA_END
-Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_START-_XDATA_END
//
//
// PDATA - data memory
//默认的配置,不用管
-Z(XDATA)PDATA_N,PDATA_Z,PDATA_I=_PDATA_START-_PDATA_END
//
//
// XDATA - data memory
//默认的配置,不用管
-Z(XDATA)IXDATA_N,IXDATA_Z,IXDATA_I=_IXDATA_START-_IXDATA_END
-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END
-Z(XDATA)XDATA_HEAP+_XDATA_HEAP_SIZE=_XDATA_START-_XDATA_END
-Z(CONST)XDATA_ROM_C=_XDATA_START-_XDATA_END
//
//
// FAR - extended data memory
//默认的配置,不用管
// Initialized FAR data
// Note: The segment FAR_I and FAR_ID must start at the same address within a 64k bank,
// they must therefore be located first in the FAR data area, and in the xlink linker file
// Note: *_I segment is located in RAM but *_ID segments is located in ROM
-Z(SPLIT-XDATA)FAR_Z=[_FAR_DATA_START-_FAR_DATA_END]/10000
-Z(SPLIT-XDATA)FAR_I=[_FAR_DATA_START-_FAR_DATA_END]/10000
-Z(SPLIT-CODE)FAR_ID=[_FAR_CODE_START-_FAR_CODE_END]/10000
-Z(SPLIT-XDATA)FAR_HEAP+_FAR_HEAP_SIZE=[_FAR_DATA_START-_FAR_DATA_END]/10000
-P(XDATA)FAR_N=[_FAR_DATA_START-_FAR_DATA_END]*_FAR_DATA_NR_OF_BANKS+10000
-P(CONST)FAR_ROM_C=[_FAR_DATA_START-_FAR_DATA_END]*E+10000
//
//
// HUGE - extended data memory
//默认的配置,不用管
-Z(XDATA)HUGE_N,HUGE_Z,HUGE_I=_FAR_DATA_START-_FAR_DATA_END
-Z(XDATA)HUGE_HEAP+_HUGE_HEAP_SIZE=_FAR_DATA_START-_FAR_DATA_END
-Z(CONST)HUGE_ROM_C=_FAR_DATA_START-_FAR_DATA_END
//
//
-cx51
//
//
// CC2430 Device Specific
// ======================
//
// Overlayed Code Bank Addresses
//逻辑地址定义,便于识别,逻辑地址并不连续,对应的物理地址就是连续的,从0-1FFFF是BANK0-BANK3
-D_BANK1_START=_BANK1A // 1st overlayed code bank
-D_BANK1_END=0x1FFFF //这是逻辑地址,并不是实际地址,这样写便于识别1代码BANK1
//
-D_BANK2_START=0x28000 // 2nd overlayed code bank
-D_BANK2_END=0x2FFFF //这是逻辑地址,并不是实际地址,这样写便于识别2代码BANK2
//
-D_BANK3_START=0x38000 // 3rd overlayed code bank
-D_BANK3_END=0x3DFFF //这是逻辑地址,并不是实际地址,这样写便于识别3代码BANK3
//
-D_BANK3b_START=(_ZIGNV_END+1) // 3rd overlayed code bank after the pages dedicated to NV.
-D_BANK3b_END=0x3FFF7 // Last 8 bytes of last Flash page reserved for IEEE address.
//
-P(CODE)BANK1=_BANK1_START-_BANK1_END
-P(CODE)BANK2=_BANK2_START-_BANK2_END
-P(CODE)BANK3=_BANK3_START-_BANK3_END
-P(CODE)ZIGNV=_ZIGNV_START-_ZIGNV_END
-P(CODE)BANK3b=_BANK3b_START-_BANK3b_END
//
// IEEE Address Space
//默认的配置,不用管
-D_IEEE_ADDR_START=0x3FFF8 // Last 8 bytes of flash
-D_IEEE_ADDR_END=0x3FFFF
//
-Z(SPLIT-XDATA)FAR_I=[_FAR_DATA_START-_FAR_DATA_END]/10000
-Z(SPLIT-CODE)FAR_ID=[_FAR_CODE_START-_FAR_CODE_END]/10000
-Z(SPLIT-XDATA)FAR_HEAP+_FAR_HEAP_SIZE=[_FAR_DATA_START-_FAR_DATA_END]/10000
-P(XDATA)FAR_N=[_FAR_DATA_START-_FAR_DATA_END]*_FAR_DATA_NR_OF_BANKS+10000
-P(CONST)FAR_ROM_C=[_FAR_DATA_START-_FAR_DATA_END]*E+10000
//
//
// HUGE - extended data memory
//默认的配置,不用管
-Z(XDATA)HUGE_N,HUGE_Z,HUGE_I=_FAR_DATA_START-_FAR_DATA_END
-Z(XDATA)HUGE_HEAP+_HUGE_HEAP_SIZE=_FAR_DATA_START-_FAR_DATA_END
-Z(CONST)HUGE_ROM_C=_FAR_DATA_START-_FAR_DATA_END
//
//
-cx51
//
//
// CC2430 Device Specific
// ======================
//
// Overlayed Code Bank Addresses
//逻辑地址定义,便于识别,逻辑地址并不连续,对应的物理地址就是连续的,从0-1FFFF是BANK0-BANK3
-D_BANK1_START=_BANK1A // 1st overlayed code bank
-D_BANK1_END=0x1FFFF //这是逻辑地址,并不是实际地址,这样写便于识别1代码BANK1
//
-D_BANK2_START=0x28000 // 2nd overlayed code bank
-D_BANK2_END=0x2FFFF //这是逻辑地址,并不是实际地址,这样写便于识别2代码BANK2
//
-D_BANK3_START=0x38000 // 3rd overlayed code bank
-D_BANK3_END=0x3DFFF //这是逻辑地址,并不是实际地址,这样写便于识别3代码BANK3
//
-D_BANK3b_START=(_ZIGNV_END+1) // 3rd overlayed code bank after the pages dedicated to NV.
-D_BANK3b_END=0x3FFF7 // Last 8 bytes of last Flash page reserved for IEEE address.
//
-P(CODE)BANK1=_BANK1_START-_BANK1_END
-P(CODE)BANK2=_BANK2_START-_BANK2_END
-P(CODE)BANK3=_BANK3_START-_BANK3_END
-P(CODE)ZIGNV=_ZIGNV_START-_ZIGNV_END
-P(CODE)BANK3b=_BANK3b_START-_BANK3b_END
//
// IEEE Address Space
//默认的配置,不用管
-D_IEEE_ADDR_START=0x3FFF8 // Last 8 bytes of flash
-D_IEEE_ADDR_END=0x3FFFF
//