Error[e16]: Segment XDATA_I (size: 0xd5 align: 0) is too long for segment definition. At least 0x38 more bytes needed. The problem
occurred while processing the segment placement command "-Z(XDATA)XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END",
where at the moment of placement the available memory ranges were "XDATA:1e63-1eff" Reserved ranges relevant to this placement: XDATA:1-300 XSTACK XDATA:301-1eff XDATA_Z BIT:0-7 BREG BIT:80-97 SFR_AN BIT:a0-af SFR_AN BIT:b8-c7 SFR_AN BIT:d8-df SFR_AN BIT:e8-ef SFR_AN BIT:f8-ff SFR_ANError while running Linker
请问这个错误该怎么解决?我定义了一个白名单数组,当数组元素个数小于70没有问题,大于70就会报错。
YiKai Chen:
你的RAM用爆掉了,代表你最大只能設置到70组白名单
Alvin Chen:
CC2530 ram 本来不算大,你这是ram 不足,如果你不想改变这个白名单,建议参考下面的优化试试,不行的话只能去改白名单。
www.ti.com/…/swra635.pdf
user4711142:
回复 Alvin Chen:
1、我用的协议栈是2.3.0-1.4.0。跟这个是通用
2、请问3.0.2要用那个IAR版本?能否发一个链接
Alvin Chen:
回复 user4711142:
通用的,如果你用CC2530做Z-stack3.0的RAM会更受限。
– All CC2538 projects have been built and tested with IAR EWARM 8.11.1
– All CC2530 and CC2531 projects have been built and tested with IAR EW8051 10.10.1
https://www.iar.com/
user4711142:
回复 Alvin Chen:
有没有什么办法,去压缩占用内存。每个子函数中,大一点的变量用申请内存,用完之后释放,会不会好一点?
Alvin Chen:
回复 user4711142:
是个思路,但是我更推荐的是用一个强一些的mcu做coordinator 比如CC2538,或者CC2652R。
YiKai Chen:
回复 user4711142:
如果沒有在用串口,把串口相關的源碼都關閉應該可以擠出一些內存
user4711142:
回复 Alvin Chen:
老版本协议栈和代码均兼容么?
user4711142:
回复 YiKai Chen:
用到了串口
YiKai Chen:
回复 user4711142:
老版本协议栈和代码不能跑在CC2538跟CC2652R上