找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5619|回复: 0
打印 上一主题 下一主题
收起左侧

IAR FOR 8051之Z-STACK -函数存储地址定位(f8w2430.xcl自定义区域块)

[复制链接]
跳转到指定楼层
楼主
ID:71477 发表于 2015-1-1 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  File: f8w2430.xcl
  4. //
  5. //  Description:
  6. //    This is an extended command line file for XLINK tool to be used when
  7. //    developing/debugging applications written for the Chipcon CC2430.
  8. //    This file was originally created by concatenation of default files
  9. //    provided by IAR: lnk51ew_cc2430.xcl  and  lnk_base.xcl.
  10. //
  11. //  Important:
  12. //    Data cannot be located at address zero, this address is reserved for
  13. //    the null pointer.
  14. //
  15. ////////////////////////////////////////////////////////////////////////////////

  16. ////////////////////////////////////////////////////////////////////////////////
  17. //
  18. // Variables (used by lnk_base.xcl)
  19. // ================================
  20. //
  21. // Segment limits
  22. // --------------
  23. //
  24. //
  25. //    IDATA
  26. //
  27. -D_IDATA_END=0xFF              // Last address of Idata memory
  28. //
  29. //
  30. //    PDATA
  31. //
  32. -D_PDATA_START=0xEF00          // First address for PDATA memory.
  33. -D_PDATA_END=0xEFFF            // Last address for PDATA memory.
  34. //
  35. //
  36. //    IXDATA
  37. //
  38. // These settings are used for devices that don't use PM2/PM3
  39. -D_IXDATA_START=E000           // The internal IXDATA block is 8K,
  40. -D_IXDATA_END=FEFF             // End of IXDATA if PM2/PM3 are not used
  41. //
  42. // These settings must be used for devices that use PM2/PM3.
  43. // Note that the IXDATA_START allows the XSTACK to grow down into the non-persistent RAM, but
  44. // checks in HAL Sleep insure that the stack is back into persistent RAM before entering PM2/PM3.
  45. //-D_IXDATA_START=EE00         // The internal IXDATA block is 4K+,
  46. //-D_IXDATA_END=FD55           // FD56-FEFF is used for saving the CC2430 registers before sleep.
  47. //
  48. // FF00-FFFF is mapped to IDATA.
  49. //
  50. //
  51. //    XDATA
  52. //
  53. -D_XDATA_START=_IXDATA_START   // The IXDATA is used as XDATA.
  54. -D_XDATA_END=_IXDATA_END
  55. //
  56. //
  57. //    NEAR CODE
  58. //
  59. -D_NEAR_CODE_END=0x7FFF        // Last address for near code, near code segment is 32KB in banked code model.
  60. //
  61. //
  62. //    TINY CODE
  63. //
  64. -D_TINY_CODE_END=0x7FF         // Last address for tiny code.
  65. //
  66. //
  67. //    CODE
  68. //
  69. // These settings determine the size/location of the ROOT segment.
  70. // Increase _CODE_END to increase ROOT memory, i.e. for constants.
  71. -D_CODE_START=0x0000           // Code size = 128k for CC2430-F128
  72. //-D_CODE_END=0x28FF             // Last address for ROOT bank 原来的默认配置
  73. -D_CODE_END=0x27FF             // Last address for ROOT bank  自定义的配置
  74. //
  75. //-D_BANK1A=(10000+_CODE_END+1)  // First address for BANK1 原来的默认配置
  76. //
  77. ///////////////自定义的BANK0分区//////////////////////////////////////////////////
  78. ///////////////自定义的BANK0分区//////////////////////////////////////////////////
  79. //把BANK0区域自定义为3块 注意:0X0000-0X27FF前面这些有关于中断等的地址,不要乱动。
  80. -D_BLCODE1_START=0x2800           // 自定义的8K
  81. -D_BLCODE1_END=0x47FF
  82. //可以在函数定义前用#pragma  location="BLCODE1" 把该函数的存储地址定位到BLCODE1区域中。多个函数可以//多次使用,地址默认连续存储  BLCODE1在下面定义
  83. -D_BLCODE2_START=0x4800           //自定义的8K
  84. -D_BLCODE2_END=0x67FF
  85. //
  86. -D_BLCODE3_START=0x6800           //自定义的6K
  87. -D_BLCODE3_END=0x7FFF            //BANK0 的32K从0X0000-0X07FFF 这里把BANK0分区3块
  88. //
  89. -D_BANK1A=(10000+_BLCODE3_END+1)  // First address for BANK1 0x18000 这个10000是16进制的,注意
  90. ////////////////////////////////////////////////////////////////////////////////
  91. ////////////////////////////////////////////////////////////////////////////////
  92. //    ZigBee Stack Non-Volatile Storage
  93. //默认的配置,不要动
  94. -D_ZIGNV_START=0x3E000         // The two pages before the last two pages of the 3rd overlayed bank.
  95. -D_ZIGNV_SIZE=0x1000           // Size of ZigBee NV (2 pages)
  96. -D_ZIGNV_END=(_ZIGNV_START+_ZIGNV_SIZE-1)
  97. //
  98. //
  99. //    HEX FILE GENERATION
  100. //
  101. // Include the following line when generating hex file:
  102. //-M(CODE)_BANK1A-1FFFF,28000-2FFFF,38000-3DFFF,3F000-3fff7=(_CODE_END+1)-0xFFFF,0x10000-0x17FFF,0x18000-0x1DFFF,0x1F000-0x1FFF7
  103. //
  104. //
  105. // Special SFRs
  106. // ------------
  107. //
  108. //
  109. //    Register bank setup
  110. //默认的配置,不要动
  111. -D?REGISTER_BANK=0             // Default register bank (0,1,2,3).
  112. -D_REGISTER_BANK_START=0       // Start address for default register bank (00,08,10,18).
  113. -D_FIRST_BANK_ADDR=0x10000
  114. -D_NR_OF_BANKS=0x03
  115. //
  116. //
  117. //    PDATA bank setup
  118. //
  119. -D?PBANK_NUMBER=EF             // High byte of 16-bit address to the PDATA area
  120. -D?PBANK=93                    // Most significant byte in MOVX A,@R0. (0x93 is sfr MPAGE)
  121. //
  122. //
  123. //    Virtual register setup
  124. //    ----------------------
  125. //
  126. -D_BREG_START=0x00             // The bit address where the BREG segments starts.
  127.                                // Must be placed on: _BREG_START%8=0 where _BREG_START <= 0x78.
  128. -D?VB=0x20                     // ?VB is used when referencing BREG as whole byte.
  129.                                // Must be placed on: ?VB=0x20+_BREG_START/8
  130. //
  131. //
  132. //
  133. // To the reader: Ignore this section ------------------------------------------
  134. //默认的配置,不要动
  135. // Dummy definitions needed to satisfy lnk_base.xcl
  136. -D_FAR_DATA_NR_OF_BANKS=0x0E   // Number of banks in far data memory.
  137. -D_FAR_DATA_START=0x010001     // First address of far memory.
  138. -D_FAR_DATA_END=0xFFFFFF       // Last address of far memory.
  139. -D_FAR_CODE_START=_CODE_START  // First address for far code.
  140. -D_FAR_CODE_END=_CODE_END      // Last address for far code.
  141. // End of the section to ignore ------------------------------------------------
  142. //
  143. ////////////////////////////////////////////////////////////////////////////////

  144. ////////////////////////////////////////////////////////////////////////////////
  145. //
  146. //  File: the following defintions are extracted from the lnkbase.xcl file
  147. //
  148. ////////////////////////////////////////////////////////////////////////////////
  149. //
  150. //
  151. //    IDATA memory
  152. //默认的配置,不要动
  153. // Setup "bit" segments (only for '__no_init bool' variables).
  154. -Z(BIT)BREG=_BREG_START
  155. -Z(BIT)BIT_N=0-7F
  156. //
  157. -Z(DATA)REGISTERS+8=_REGISTER_BANK_START
  158. -Z(DATA)BDATA_Z,BDATA_N,BDATA_I=20-2F
  159. -Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F
  160. -Z(DATA)PSP,XSP=08-7F
  161. -Z(DATA)DOVERLAY=08-7F
  162. -Z(DATA)DATA_I,DATA_Z,DATA_N=08-7F
  163. //
  164. -U(IDATA)0-7F=(DATA)0-7F
  165. -Z(IDATA)IDATA_I,IDATA_Z,IDATA_N=08-_IDATA_END
  166. -Z(IDATA)ISTACK+_IDATA_STACK_SIZE#08-_IDATA_END
  167. -Z(IDATA)IOVERLAY=08-FF
  168. //
  169. //
  170. //    ROM memory
  171. //
  172. // Note: INTVEC must be placed first.
  173. // Note: CSTART Must be located in first 64k.
  174. //
  175. //    Program memory
  176. //默认的配置,不要动
  177. -Z(CODE)INTVEC=0
  178. -Z(CODE)CSTART=_CODE_START-_CODE_END
  179. -Z(CODE)RCODE=_CODE_START-_CODE_END
  180. -Z(CODE)TINY_CODE=_CODE_START-_TINY_CODE_END
  181. -Z(CODE)NEAR_CODE=_CODE_START-_NEAR_CODE_END
  182. -Z(CODE)DIFUNCT=_CODE_START-_CODE_END
  183. -Z(CODE)FAR_CODE=_CODE_START-_CODE_END
  184. -Z(CODE)BANK_RELAYS=_CODE_START-_CODE_END
  185. //
  186. ////////////////////////////////////////////////////////////////////////////////
  187. ////////////////////////////////////////////////////////////////////////////////
  188. //可以在函数定义前用#pragma  location="BLCODE1" 把该函数的存储地址定位到BLCODE1区域中。多个函数可以//多次使用,地址默认连续存储
  189. -Z(CODE)BLCODE1=_BLCODE1_START-_BLCODE1_END //自定义的BANK0中的块8K
  190. -Z(CODE)BLCODE2=_BLCODE2_START-_BLCODE2_END //自定义的BANK0中的块8K
  191. -Z(CODE)BLCODE3=_BLCODE3_START-_BLCODE3_END //自定义的BANK0中的块6K
  192. //
  193. ////////////////////////////////////////////////////////////////////////////////
  194. ////////////////////////////////////////////////////////////////////////////////
  195. //默认的配置,不用管
  196. -P(CODE)BANKED_CODE=_BANK1_START-_BANK1_END,_BANK2_START-_BANK2_END,_BANK3_START-_BANK3_END,_BANK3b_START-_BANK3b_END
  197. //
  198. //
  199. //    Initializers
  200. //默认的配置,不用管
  201. -Z(CODE)BIT_ID,BDATA_ID,DATA_ID,IDATA_ID,IXDATA_ID,PDATA_ID,XDATA_ID=_CODE_START-_CODE_END
  202. -Z(CODE)HUGE_ID=_FAR_CODE_START-_FAR_CODE_END
  203. //
  204. //
  205. //    Constants located in code memory
  206. //默认的配置,不用管
  207. -Z(CODE)CODE_C=_CODE_START-_CODE_END
  208. -Z(CODE)FAR_CODE_C=_FAR_CODE_START-_FAR_CODE_END
  209. -Z(CODE)HUGE_CODE_C=_FAR_CODE_START-_FAR_CODE_END
  210. -Z(CODE)CHECKSUM#_CODE_END
  211. //
  212. //
  213. //    Stacks located in XDATA
  214. //默认的配置,不用管
  215. -Z(XDATA)EXT_STACK+_EXTENDED_STACK_SIZE=_EXTENDED_STACK_START-_EXTENDED_STACK_END
  216. -Z(XDATA)PSTACK+_PDATA_STACK_SIZE=_PDATA_START-_PDATA_END
  217. -Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_START-_XDATA_END
  218. //
  219. //
  220. //    PDATA - data memory
  221. //默认的配置,不用管
  222. -Z(XDATA)PDATA_N,PDATA_Z,PDATA_I=_PDATA_START-_PDATA_END
  223. //
  224. //
  225. //    XDATA - data memory
  226. //默认的配置,不用管
  227. -Z(XDATA)IXDATA_N,IXDATA_Z,IXDATA_I=_IXDATA_START-_IXDATA_END
  228. -Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END
  229. -Z(XDATA)XDATA_HEAP+_XDATA_HEAP_SIZE=_XDATA_START-_XDATA_END
  230. -Z(CONST)XDATA_ROM_C=_XDATA_START-_XDATA_END
  231. //
  232. //
  233. //    FAR - extended data memory
  234. //默认的配置,不用管
  235. // Initialized FAR data
  236. // Note: The segment FAR_I and FAR_ID must start at the same address within a 64k bank,
  237. // they must therefore be located first in the FAR data area, and in the xlink linker file
  238. // Note: *_I segment is located in RAM but *_ID segments is located in ROM
  239. -Z(SPLIT-XDATA)FAR_Z=[_FAR_DATA_START-_FAR_DATA_END]/10000
  240. -Z(SPLIT-XDATA)FAR_I=[_FAR_DATA_START-_FAR_DATA_END]/10000
  241. -Z(SPLIT-CODE)FAR_ID=[_FAR_CODE_START-_FAR_CODE_END]/10000
  242. -Z(SPLIT-XDATA)FAR_HEAP+_FAR_HEAP_SIZE=[_FAR_DATA_START-_FAR_DATA_END]/10000
  243. -P(XDATA)FAR_N=[_FAR_DATA_START-_FAR_DATA_END]*_FAR_DATA_NR_OF_BANKS+10000
  244. -P(CONST)FAR_ROM_C=[_FAR_DATA_START-_FAR_DATA_END]*E+10000
  245. //
  246. //
  247. //    HUGE - extended data memory
  248. //默认的配置,不用管
  249. -Z(XDATA)HUGE_N,HUGE_Z,HUGE_I=_FAR_DATA_START-_FAR_DATA_END
  250. -Z(XDATA)HUGE_HEAP+_HUGE_HEAP_SIZE=_FAR_DATA_START-_FAR_DATA_END
  251. -Z(CONST)HUGE_ROM_C=_FAR_DATA_START-_FAR_DATA_END
  252. //
  253. //
  254. -cx51
  255. //
  256. //
  257. //    CC2430 Device Specific
  258. //    ======================
  259. //
  260. //    Overlayed Code Bank Addresses
  261. //逻辑地址定义,便于识别,逻辑地址并不连续,对应的物理地址就是连续的,从0-1FFFF是BANK0-BANK3
  262. -D_BANK1_START=_BANK1A         // 1st overlayed code bank
  263. -D_BANK1_END=0x1FFFF         //这是逻辑地址,并不是实际地址,这样写便于识别1代码BANK1
  264. //
  265. -D_BANK2_START=0x28000         // 2nd overlayed code bank
  266. -D_BANK2_END=0x2FFFF           //这是逻辑地址,并不是实际地址,这样写便于识别2代码BANK2
  267. //
  268. -D_BANK3_START=0x38000         // 3rd overlayed code bank
  269. -D_BANK3_END=0x3DFFF //这是逻辑地址,并不是实际地址,这样写便于识别3代码BANK3
  270. //
  271. -D_BANK3b_START=(_ZIGNV_END+1)  // 3rd overlayed code bank after the pages dedicated to NV.
  272. -D_BANK3b_END=0x3FFF7           // Last 8 bytes of last Flash page reserved for IEEE address.
  273. //
  274. -P(CODE)BANK1=_BANK1_START-_BANK1_END
  275. -P(CODE)BANK2=_BANK2_START-_BANK2_END
  276. -P(CODE)BANK3=_BANK3_START-_BANK3_END
  277. -P(CODE)ZIGNV=_ZIGNV_START-_ZIGNV_END
  278. -P(CODE)BANK3b=_BANK3b_START-_BANK3b_END
  279. //
  280. //    IEEE Address Space
  281. //默认的配置,不用管
  282. -D_IEEE_ADDR_START=0x3FFF8  // Last 8 bytes of flash
  283. -D_IEEE_ADDR_END=0x3FFFF
  284. //
  285. ////////////////////////////////////////////////////////////////////////////////
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表