This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教 MSP430F5418A&IAR5.20 程序大小的问题



我使用 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工程师帮我们解决这个问题