【IAR-10.30.1】最新版本IAR常见编译问题总结
简介
近期,老师经常使用旧版本协议栈布置作业,但是我使用的是最新版本的IAR,导致打开工程的时候,编译的时候总有莫名奇妙的版本兼容问题。
所以本篇博客总结一些IAR编译旧版本工程报错以及解决方案。
有不对的地方还请指正,感激不尽。
系统环境
- Win10 1909
- IAR 10.30.1
- Z-Stack
- VScode
1.Error[e16]: Segment RAM_CODE_FLASH
Error[e16]: Segment RAM_CODE_FLASH (size: 0x27 align: 0) is too long for segment definition. At least 0x4 more bytes needed. The problem occurred while processing the segment placement command
"-Z(CODE)RAM_CODE_FLASH=_RAM_CODE_FLASH_START-_RAM_CODE_FLASH_END", where at the moment of placement the available memory ranges were "CODE:39edd-39eff"
根据报错,RAM_CODE_FLASH需要再扩大至少4个字节。
所以打开Tool里面的fw82530.xcl文件,将RAM_CODE_FLASH_END的值再增大至少0x04.
在fw82530.xcl的第226行左右
-D_RAM_CODE_XDATA_START=0x01EDD
-D_RAM_CODE_XDATA_END=(_RAM_CODE_XDATA_START+0x22)
-Z(XDATA)RAM_CODE_XDATA=_RAM_CODE_XDATA_START-_RAM_CODE_XDATA_END
//
-D_RAM_CODE_FLASH_START=0x39EDD
-D_RAM_CODE_FLASH_END=(_RAM_CODE_FLASH_START+0x26)//这里原本是+0x22
修改之后,点击rebuild。应该不会再有这个错误。但是一般来说,可能还会遇到下面的错误。
2.Error[e46]: Undefined external “?V1” referred in AF
这个问题可以参考 这个连接 。里面解决了这个问题。
不过,还是简单翻译一下:
需要添加一个workaround.s51 文件加到工程里。注意,这个文件的后缀名就是.s51,不是.c或者其他。请务必保存为正确的后缀名。
我是加到了E:\StudyMaterial2019\URAT\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\ZMain\TI2530DB目录下,注意要在工程里该目录右击“add file … ”,添加你新建的这个文件进去。
然后再次rebuild后,原来的问题没有了,
workaround.s51文件内容如下:
;----------------------------------------------------------------;
; Virtual registers ;
; ================= ;
; Below is some segment needed for the IAR ICC C/EC++ compiler