概述
【IAR-10.30.1】最新版本IAR常见编译问题总结
- 简介
- 系统环境
- 1.Error[e16]: Segment RAM_CODE_FLASH
- 2.Error[e46]: Undefined external "?V1" referred in AF
- 3.Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.
- 查看更多原文
简介
近期,老师经常使用旧版本协议栈布置作业,但是我使用的是最新版本的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:StudyMaterial2019URATTexas InstrumentsZStack-CC2530-2.3.0-1.4.0ProjectszstackZMainTI2530DB目录下,注意要在工程里该目录右击“add file … ”,添加你新建的这个文件进去。
然后再次rebuild后,原来的问题没有了,
workaround.s51文件内容如下:
;----------------------------------------------------------------;
; Virtual registers ;
; ================= ;
; Below is some segment needed for the IAR ICC C/EC++ compiler ;
; ;
; BREG : A segment for 8 bit registers for use by the compiler. ;
; ?B0 is the first register. ;
; VREG : Segment that holds up to 32 virtual registers for ;
; use by the compiler. ?V0 is the first register. ;
; PSP : Segment containing the PDATA stack pointer (?PSP) ;
; XSP : Segment containing the XDATA stack pointer (?XSP) ;
; ;
;----------------------------------------------------------------;
;----------------------------------------------------------------;
PROGRAM VIRTUAL_REGISTERS
PUBLIC ?B0
PUBLIC ?V0
PUBLIC ?V1
PUBLIC ?V2
PUBLIC ?V3
PUBLIC ?V4
PUBLIC ?V5
PUBLIC ?V6
PUBLIC ?V7
PUBLIC ?V8
PUBLIC ?V9
PUBLIC ?V10
PUBLIC ?V11
PUBLIC ?V12
PUBLIC ?V13
PUBLIC ?V14
PUBLIC ?V15
PUBLIC ?V16
PUBLIC ?V17
PUBLIC ?V18
PUBLIC ?V19
PUBLIC ?V20
PUBLIC ?V21
PUBLIC ?V22
PUBLIC ?V23
PUBLIC ?V24
PUBLIC ?V25
PUBLIC ?V26
PUBLIC ?V27
PUBLIC ?V28
PUBLIC ?V29
PUBLIC ?V30
PUBLIC ?V31
PUBLIC ?PSP
PUBLIC ?XSP
RSEG BREG:BIT:NOROOT
?B0:
DS 8
RSEG VREG:DATA:NOROOT
?V0:
DS 1
?V1:
DS 1
?V2:
DS 1
?V3:
DS 1
?V4:
DS 1
?V5:
DS 1
?V6:
DS 1
?V7:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V7
?V8:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V8
?V9:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V9
?V10:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V10
?V11:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V11
?V12:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V12
?V13:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V13
?V14:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V14
?V15:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V15
?V16:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V16
?V17:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V17
?V18:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V18
?V19:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V19
?V20:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V20
?V21:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V21
?V22:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V22
?V23:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V23
?V24:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V24
?V25:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V25
?V26:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V26
?V27:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V27
?V28:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V28
?V29:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V29
?V30:
DS 1
RSEG VREG:DATA:NOROOT
REQUIRE ?V30
?V31:
DS 1
RSEG PSP:DATA:NOROOT
EXTERN ?RESET_PSP
REQUIRE ?RESET_PSP
?PSP:
DS 1
RSEG XSP:DATA:NOROOT
EXTERN ?RESET_XSP
REQUIRE ?RESET_XSP
?XSP:
DS 2
ENDMOD ; VIRTUAL_REGISTERS
END
3.Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.
Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment placement command
还是打开Tool里面的fw82530.xcl文件。找到“-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F”,修改成“-Z(DATA)VREG=08-7F” 即可。
好了,今天就到这里,后面我遇到问题再更新本博客内容吧。有缘再见。
提示;上面的图片是我使用的其他图床,不是csdn的。如果图片查看不了,请移步到我的博客查看。地址是:https://stefancharles.xyz/
查看更多原文
这里不提供全文。需要全文查看请移步我的自搭建博客:
Stefan的博客
最后
以上就是阔达猎豹为你收集整理的【IAR-10.30.1】最新版本IAR常见编译问题总结的全部内容,希望文章能够帮你解决【IAR-10.30.1】最新版本IAR常见编译问题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复