这个问题我已经解决,现在把解决方案发上来,希望对后来者有
首先说明一下:解决这个问题时,我请教了很多高手有这个坛子里的,比如:00,阿南等,也有别个坛子的朋友,他们给了我很多非常有用的建议,我很感谢他们!<br />这个问题主要是我写的bootloader有问题,为了简单我省去了代码从Flas中拷贝<br />到SDRAM中部分功能,因为我是自己做着玩一下的,不是做产品,我只须在SDRAM中<br />调试出来就OK了.RO区的代码不会有问题,但RW区就不一样,它是由|Image$$RW$$Limit|和|Image$$RW$$Base|给出的,所以它和RO区可能有重复区域,如果代码是在Flash中,程序运行时由bootloader完成代码的拷贝那就不会有问题,我所用的方法在用Jtag把程序下到SDRAM中运行,原代码没有展开,地址在RW区后都是错的了,所以函数指针就不能跳到正确的地址了,因为MAP文件中的地址和实际的地址不一样的.在我生成的MAP文件中,我看到RW区的一些地址和调试时看到的不一至.这也验证了我的想法.<br />解决办法:可以加入拷贝代码部分,也可把一些局部变量数组前加上Const放到RO区.这两种方法我都试过了,都是可行的.<br />摸索的日子很痛苦,当初这个问题捆饶了我几个星期,今天翻旧,看到了这个贴子,就写了点,希望后来者可以少走这个弯.表达能力有限,让各位见笑了!<br />
|
|