打印

ARM 双程序运行的问题

[复制链接]
1641|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsp2000|  楼主 | 2007-10-20 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用LPC2132实现软件升级功能,但现在发现,当侍升级的软件代码长度超过0x7fff        
时,升级后更新的软件不能正常运行。
     实现方法如下:
     我先写一段监控程序,叫程序1,空间在4K之内的,使用了0x0000~0x1000的扇区地址。程序1负责检查外置FLASH有没有新的有效文件(程序2),当发现有新的文件后将的文件写入0x1000~0xffff  LPC2132的FLASH之内。然后跳转到0x1000之内运行。
     当程序2文件长度小于0x8000时,能正常运行到新的程序之中,但当程序为0x8004或以上时程序不再运行。
     内置4K的程序(程序1)是使用-entry 0x0000 生成的,程序2使用-entry 0x1000 生成的。不知这样生成是否有限制的地方。
另外,程序2的中断向量为0x1000的偏移量,而LPC 2132中断向量为0x0000,是如何自动跳转到0x1000 的,这个过程我有点含糊。

相关帖子

沙发
wishcom| | 2007-10-20 12:15 | 只看该作者

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

使用特权

评论回复
板凳
dsp2000|  楼主 | 2007-10-22 15:06 | 只看该作者

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

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

使用特权

评论回复
地板
soso| | 2007-10-22 15:46 | 只看该作者

存储影射

是不是在 0X1000 + 0x8004 地址有其他功能,比如存储影射了,跟进去看看.

使用特权

评论回复
5
zhongyb| | 2007-10-22 16:09 | 只看该作者

一点建议

另外,程序2的中断向量为0x1000的偏移量,而LPC 2132中断向量为0x0000,是如何自动跳转到0x1000 的,这个过程我有点含糊。

一点建议,先将中断向量表拷贝到RAM,然后执行remap,将中断向量表影射到RAM,这样就可以实现了,而且运行时还可以对向量表进行修改。

使用特权

评论回复
6
xieqin| | 2007-10-23 13:38 | 只看该作者

关键在于你的程序1啊

程序1的中断表(除RESET外)都直接跳转到0x1000 + 中断入口地址,不就跳到了程序2的中断表吗?? “含糊”的问题这样可以解决了。

0x8000是一个奇妙的数字。因为 signed short int是从~32767到+32767啊。 程序1如果用一个 signed short int类型的变量来记来程序2的大小,当程序2大于等于0x8000,问题不就发生了吗?

所以啊。问题的一切都在程序1。





使用特权

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

本版积分规则

3

主题

6

帖子

0

粉丝