TI中文支持网
TI专业的中文技术问题搜集分享网站

cc2541 IAR 编译报错 Range error

和这个贴的情况一模一样

e2echina.ti.com/…/92218

大概是程序超过一个BANK?注释掉一点程序就可以,只要加一点程序都不行,看似乎是空间不够,但整个项目才100多K

YiKai Chen:

你是編譯沒有修改過的源程序看到这樣的問題還是你修改過的程序

Viki Shi:

map文件看一下内存占用情况

user1975381:

回复 YiKai Chen:

程序一直在修改都没事,昨天加了些程序就不行,但把其它没用的删掉一点就可以

user1975381:

回复 Viki Shi:

编译不过,map文件没有信息吧,是看正常的情况下吗?

YiKai Chen:

回复 user1975381:

你用的BLE Stack版本跟原始例程上那一個?

user1975381:

回复 YiKai Chen:

我用的是stack是1.4.2.2  , IAR 9.10.3,  例改自simpleBLEPeripheral例程, MAP文件内容是这样的:

Error[e18]: Range error,

Number out of range

File: C:\Texas Instruments\BLE-CC254x-1.4.2.2\Projects\ble\SolarStreetlight\Source\simpleBLEPeripheral.c, Line: 1857

Source: LJMP    ??powerControlTask_2

 Where $ = powerControlTask + 0x1B5CD  [0x1B5CD]

           in module "simpleBLEPeripheral" (C:\Texas Instruments\BLE-CC254x-1.4.2.2\Projects\ble\SolarStreetlight\CC2541DB\CC2541DK-MINI Keyfob\Obj\simpleBLEPeripheral.r51),

           offset 0x50 in segment part 124, segment BANKED_CODE

 What: (powerControlTask + 0xEF) [0x1B66C]

 Allowed range: 0xFFFF8000 – 0xFFFF

 Operand: powerControlTask [0x1b66c]

          in module simpleBLEPeripheral (C:\Texas Instruments\BLE-CC254x-1.4.2.2\Projects\ble\SolarStreetlight\CC2541DB\CC2541DK-MINI Keyfob\Obj\simpleBLEPeripheral.r51),

          Offset 0xef in segment part 124, segment BANKED_CODE

YiKai Chen:

回复 user1975381:

如果你是加了太多自己的應用程序上去導致flash用光了,那就沒什麼好辦法解決

user1975381:

回复 YiKai Chen:

问题是没有用光啊,正常的时候是*******************************************END OF CROSS REFERENCE*******************************************
116 497 bytes of CODEmemory34 bytes of DATAmemory (+ 84 absolute )6 497 bytes of XDATA memory194 bytes of IDATA memory8 bitsof BITmemory561 bytes of CONST memory

Errors: none
Warnings: none

然后我加几条代码就变成了上面说的情况,芯片不是256K吗?

YiKai Chen:

回复 user1975381:

你加了哪几条代码?

user1975381:

回复 YiKai Chen:

真的好奇怪,已经排除了空间不足问题,出现得比较随机,偶尔出现,举个例子,只是一种情况,如下 if(condition) { //do something } else { // do something } 这时编译不通过! 当我改成 if(condition) { //do something } //else //注释了else { // do something } 就通过了 还有一种解决办法,当出现不通过时,只要我在程序中特定位置加入nop就能能解决,如改成如下 if(condition) { //do something asm("nop"); } else  { // do something } 它又能链接成功了!

赞(0)
未经允许不得转载:TI中文支持网 » cc2541 IAR 编译报错 Range error
分享到: 更多 (0)