IAR下编译问题:Error[e16]: Segment XDATA_Z (size: 0x1d90 align: 0) is too long for ……

爱上穿马甲的妞 2012-03-27 04:40:46
在用IAR编译程序时出现了下面的问题:
Error[e16]: Segment XDATA_Z (size: 0x1d90 align: 0) is too long for segment definition. At least 0x210 more bytes needed. The problem occurred while processing the
segment placement command "-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment of placement the available memory
ranges were "XDATA:280-1dff"
Reserved ranges relevant to this placement:
XDATA:100-27f XSTACK
XDATA:280-1dff XDATA_N
BIT:0-7 BREG
BIT:80-97 SFR_AN
BIT:a8-af SFR_AN
BIT:b8-c7 SFR_AN
BIT:d8-df SFR_AN
BIT:e8-ef SFR_AN
当在Xcl文件里把XDATA范围改大之后,程序编译跟链接都没问题,在Simulator下Debug时也没问题,但连接上硬件就不行了,板子的初始化过不去都,就是这个函数Hal_Board_Init(),硬件用的是TI的CC2530,望各位大侠帮帮忙哦!
...全文
7375 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lancheqing 2013-03-13
  • 打赏
  • 举报
回复
这个原因是你程序里面有比较大的数据量,单片机里的RAM放不下。。。你可以把数据定义成const的,这样IAR会把数据放到单片机的flash里。。。 我QQ:397435376 可以交流一下
snail_rao 2012-11-27
  • 打赏
  • 举报
回复
楼主帮了我大忙了,谢谢!
「已注销」 2012-10-13
  • 打赏
  • 举报
回复
options--Linker--Config-Linker command file --override default---设置为$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8w2530.xcl
klcblfxy 2012-04-13
  • 打赏
  • 举报
回复
Fatal Error[e72]: Segment banked code must be defined in a segment definition option (-Z, -b or -P)
解决了这个
Fatal Error[e72]: Segment ZIGNV_ADDRESS_SPACE must be defined in a segment definition option (-Z, -b or -P)
但我出现里这个
  • 打赏
  • 举报
回复
存储类型介绍
存储类型 | 与存储器空间对应的关系
data | 直接寻址片内数据存储区,访问速度块(128字节)
bdata | 可为寻址片内数据存储区,允许位与字节混合访问(16字节)
idata | 间接寻址片内数据存储区,可访问片内全部RAM地址空间
pdata | 分页寻址片外数据存储区(256字节)MOVX@R0访问
xdata | 片外数据存储区(64K),由MOVX@DPTR访问
code | 代码存储区(64K),由MOVC@DPTR访问
这个是数据手册里面的,我理解的xdata是64k吧,你说的芯片内部选择XDATA大小什么意思?我老师的意思是c51只有64k可直接寻址,让我看看其他的64k该如何寻址。还有他问我XDATA设置到RAM没不理解什么意思?是不是跟你说的一样?
  • 打赏
  • 举报
回复
之前是提示的这个错误:Fatal Error[e72]: Segment XDATA_HEAP must be defined in a segment definition option (-Z, -b or -P) ,我在XCL文件里面加了一句话:
-Z(DATA)XDATA_HEAP=_XDATA_START-_XDATA_END,就变成上面那样的错误了,不知道到底是哪的问题了……
dceacho 2012-03-28
  • 打赏
  • 举报
回复
Error[e16]: Segment XDATA_Z (size: 0x1d90 align: 0) is too long for segment definition. At least 0x210 more bytes needed.

只看这句话是说你定义的XDATA小了,还需要多定义0x210字节的空间.

我看CC2530是8K的SRAM,映射到DATA存储空间和部分XDATA存储空间,而看错误提示你的XDATA_Z一共需要0x1fa0字节

逼近CC2530的8K的SRAM,所以你需要办法降低消耗的XDATA,或者换一个XDATA更大的芯片
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
程序变量定义的问题 即使在软件上把XDATA的范围扩大 硬件还是不支持的
[/Quote]能不能说详细点啊?我用blowfish加密算法改的……
woshi_ziyu 2012-03-28
  • 打赏
  • 举报
回复
程序变量定义的问题 即使在软件上把XDATA的范围扩大 硬件还是不支持的
dceacho 2012-03-27
  • 打赏
  • 举报
回复
CC2530没用过,你确定这芯片的XDATA有这么大?看下芯片内部是不是需要选择XDATA的大小

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧