打印
[ZLG-ARM]

[求助]LPC的IAP功能,出现一个很费解的问题

[复制链接]
2667|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
smallwind1|  楼主 | 2011-2-24 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我把已经写好的一个测试程序,编译生成hex文件以后,用一个工具把这个文件转换成了数组文件,然后就把这个数组定义成全局的变量,打算把这个数组写进flash里,理论上如果IAP执行成功了,我的测试程序就可以运行了,但是现在出现了很奇怪的问题。以下是我的数组(只是贴个一小部分,示意一下)
unsigned char ctest[] =
{
   0x3a, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x46, 0x41, 0x0d,
0x0a, 0x3a, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46,
0x45, 0x35, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46, 0x45, 0x35, 0x31, 0x38, 0x46, 0x30, 0x39, 0x46

}
然后在主函数里定义了一个指针k,然后k = ctest,我通过观察k的值得到数组的起始地址,然后在进行IAP的ramtoflash的函数时候,我把源地址写成数组的地址
  RamToFlash(0x00002000,0x40001800,512);这个函数在debug里显示执行正确,但是在Compare(0x00002000,0x40001800,512);的时候就不正确了,

还有就是假如我没有定义那个数组,我执行Compare(0x00002000,0x40001800,512);这个还是不正确,只要源地址起始是400018000就出问题,不是这个就没问题,但是要是定义数组的话,不管是那个地址,在比对的过程中都有问题,是不是我们哪里理解有点问题呢

相关帖子

沙发
maoyanketi| | 2011-2-24 19:59 | 只看该作者
同样费解,求助版主

使用特权

评论回复
板凳
smallwind1|  楼主 | 2011-3-4 14:32 | 只看该作者
这个问题已经解决了,是分散加载文件的问题,数组定义的时候超过了5k,而给在分散加载的时候,是从40001800开始的,堆栈的加载地址是从40004000截止的,堆栈是向下生长的,那么就出现了定义的这个数组和堆栈重叠,因为栈的数据一直在变化,所以写到flash里的数据就和ram里数据不一样了

使用特权

评论回复
地板
年轻不再| | 2011-3-6 19:20 | 只看该作者
希望明白人给解释一下吧。

使用特权

评论回复
5
-自己人| | 2011-3-7 17:03 | 只看该作者
这个加载地址在哪写的呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

52

帖子

1

粉丝