微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 请教:Failed to fit all segments into specified ranges.........问题如下,帮忙啊。。。

请教:Failed to fit all segments into specified ranges.........问题如下,帮忙啊。。。

时间:12-23 整理:3721RD 点击:

Z-STACK协议栈  IAR编译环境

#define MAX_ADDRMAP_ITEM    300//

typedef struct
{
    uint8 NetAddr[2];
    uint8 MeterAddr[6];
}AddrMap_t;

AddrMap_t AddrMap[MAX_ADDRMAP_ITEM];

void Meter_JoinAddrMap(uint16 routerAddr, const uint8 *phyAddr)
{
    //对结构体数组赋值
}

问题:
1.若在Meter_JoinAddrMap()函数中不给结构体数组赋值,编译连接不报错;
2.若在Meter_JoinAddrMap()函数中给结构体数组赋值,连接报错,如下:
Linking
Error[e104]: Failed to fit all segments into specified ranges. Problem discovered in segment XDATA_N. Unable to place 2 block(s) (0xc02 byte(s) total) in 0x998 byte(s) of memory. The problem occurred while processing the segment  
placement command "-P(XDATA)XDATA_N=_XDATA_START-_XDATA_END", where at the moment of placement the available memory ranges were "XDATA:1568-1eff"
Error while running Linker
3.若将MAX_ADDRMAP_ITEM定义为22(或22以下),在Meter_JoinAddrMap()函数中给结构体数组赋值,正常;

内存空间不足了,没办法放下这么大的一个数组。

可是结构体数组在定义、不赋值的情况下没有问题。。。这时不是已经分配好空间了吗?

关键是看你在后面有没有用到这个数组。有可能IAR在优化编译的时候已经去掉了这个数组。

结构体数组,总的字节大小 >=184 就有报错,这时我该怎么办?我现在至少需要300*8个字节的大小?请教。。。。

结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。

对对。。我现在的系统中,定义的结构体数组(或者普通数组,刚才试了,一样的额),在不赋值的情况下,大小大于184BYTE没有关系,不报错,但是在程序中赋值后,就报错。。

也就是说我现在系统中,只要想给定义的数组赋值,就必须将定义的数组大小设置为小于184 byte?

但是我现在的项目中需要  300*8  byte,该怎么处理这个问题,希望能指点。。。。

就是定义的结构体数组变量。。

typedef struct
{
    uint8 NetAddr[2];  
    uint8 MeterAddr[6];   
}AddrMap_t;

AddrMap_t AddrMap[300];

300 -> 22(或者更小,22*8)之后,给这个数组变量赋值就没有问题。。但是我现在至少要300个

用的是那块片子。300*8会造成内存不足。只有两种方式,一优化代码,减少冗余数组。二更换内存更大的片子。

cc2530.


 152 270 bytes of CODE  memory
      32 bytes of DATA  memory (+ 72 absolute )
   7 929 bytes of XDATA memory
     192 bytes of IDATA memory
       8 bits  of BIT   memory
     169 bytes of CONST memory

Errors: none
Warnings: none

这是sample工程中map文件中的memory情况,保证不报错,数组使用的最大情况(也就是上面说的22,换成23就会报错)。。

能不能再请教你个问题:

CC2530的flash是256KB,SRAM是8K,CODE、DATA、XDATA、IDATA、BIT、CONST哪些是存储在flash?哪些是存储在SRAM?

能不能再请教你个问题:

CC2530的flash是256KB,SRAM是8K,CODE、DATA、XDATA、IDATA、BIT、CONST哪些是存储在flash?哪些是存储在SRAM?

你好,你的问题解决了吗?我也遇到了同样的问题,想请教一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top