ARM 双程序运行的问题

[复制链接]
2650|6
 楼主| dsp2000 发表于 2007-10-20 09:28 | 显示全部楼层 |阅读模式
我使用LPC2132实现软件升级功能,但现在发现,当侍升级的软件代码长度超过0x7fff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />时,升级后更新的软件不能正常运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实现方法如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我先写一段监控程序,叫程序1,空间在4K之内的,使用了0x0000~0x1000的扇区地址。程序1负责检查外置FLASH有没有新的有效文件(程序2),当发现有新的文件后将的文件写入0x1000~0xffff&nbsp;&nbsp;LPC2132的FLASH之内。然后跳转到0x1000之内运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当程序2文件长度小于0x8000时,能正常运行到新的程序之中,但当程序为0x8004或以上时程序不再运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内置4K的程序(程序1)是使用-entry&nbsp;0x0000&nbsp;生成的,程序2使用-entry&nbsp;0x1000&nbsp;生成的。不知这样生成是否有限制的地方。<br />另外,程序2的中断向量为0x1000的偏移量,而LPC&nbsp;2132中断向量为0x0000,是如何自动跳转到0x1000&nbsp;的,这个过程我有点含糊。<br />
wishcom 发表于 2007-10-20 12:15 | 显示全部楼层

使用scatter loading技术应该可以搞定这个问题

  
 楼主| dsp2000 发表于 2007-10-22 15:06 | 显示全部楼层

我发现程序能运行到startup.s的

我发现程序能运行到startup.s的
soso 发表于 2007-10-22 15:46 | 显示全部楼层

存储影射

是不是在&nbsp;0X1000&nbsp;+&nbsp;0x8004&nbsp;地址有其他功能,比如存储影射了,跟进去看看.
zhongyb 发表于 2007-10-22 16:09 | 显示全部楼层

一点建议

另外,程序2的中断向量为0x1000的偏移量,而LPC&nbsp;2132中断向量为0x0000,是如何自动跳转到0x1000&nbsp;的,这个过程我有点含糊。<br /><br />一点建议,先将中断向量表拷贝到RAM,然后执行remap,将中断向量表影射到RAM,这样就可以实现了,而且运行时还可以对向量表进行修改。
xieqin 发表于 2007-10-23 13:38 | 显示全部楼层

关键在于你的程序1啊

程序1的中断表(除RESET外)都直接跳转到0x1000&nbsp;+&nbsp;中断入口地址,不就跳到了程序2的中断表吗?? “含糊”的问题这样可以解决了。<br /><br />0x8000是一个奇妙的数字。因为&nbsp;signed&nbsp;short&nbsp;int是从~32767到+32767啊。 程序1如果用一个&nbsp;signed&nbsp;short&nbsp;int类型的变量来记来程序2的大小,当程序2大于等于0x8000,问题不就发生了吗?<br /><br />所以啊。问题的一切都在程序1。<br /><br /><br /><br /><br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部