我是靠谱客的博主 阔达猎豹,最近开发中收集的这篇文章主要介绍【IAR-10.30.1】最新版本IAR常见编译问题总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【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常见编译问题总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部