我使用 IAR5.20 (large模式)编译了一个占用50K 程序FLASH、23K数据flash、RAM13000K的程序,程序存在一个严重的问题:当程序规模达到一定程度时,指针变量指向的数据地址远远超过16K,达到了几百K,如下图

详细情况是:定义了一个结构体,比如
struct
{
uint16 id
void* data
}ds
void*指针指向的是数据的地址,id代表数据的类型,在需要数据的地方,就强制类型转换, 比如void*存储了一个结构体realdata,那么这样还原
RealData data = (RealData *)(ds->data),;这时候,错误发生了,data被赋予了一个错误的地址,而不是void*指针存贮的地址, 错误的地址偏移真实地址一个字节,比如真实地址是0x1122,转换后错误的地址是 0x?2200,"?"不确定是多少,从而变成了一个根本没有的地址,感觉很可能是5系列20位寻址结构的问题,iar编译器没有处理好。
程序结构较复杂,免不了用指针,所以这个错误不好躲避。
其实早在2009年,我们就已经遇到了这个问题,只要程序一大,占用内存超过12k,就会出现莫名的故障,甚至死机,当初以为是代码问题。
请Ti工程师帮我们解决这个问题