打印
[ZLG-ARM]

如何把程序放到RAM运行

[复制链接]
2130|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
youngerger|  楼主 | 2007-4-12 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于LPC2214的内部FLASH空间有限,只好把程序写道外部FLASH,但是外部FLASH有一个问题就是,访问速度很慢,即使将BCFG配置好。
所以希望在运行的时候把程序加载到外部RAM中。 在分散加载文件中,RW ,ZI段的重定位是__main会完成的。 但是好像分散加载无法将 完成复制和清零的代码和数据加载到另外的位置。 
那么要怎么样才能将所有的RO段都重定位到外部RAM呢, 是不是仅仅修改分散加载文件无法达到这样的要求呢? 有没有什么其它办法?是不是需要自己写复制RO段的代码?
 
还有就是如果程序在外部FLASH运行,那么是不是中断向量表也就在外部FLASH, 这样会不会使得中断响应减慢? 如果仅仅想将中断向量表复制到内部RAM,该怎么做?

相关帖子

沙发
zlgARM| | 2007-4-12 21:08 | 只看该作者

youngerger

    请研究一下我们的Easyarm2200模板。翻书了解一下内存映射和中断向量表的概念。如果您有这些资料,那么您的问题根本不需要到版面上来问了。
   如果没有买开发板和配套书,建议买上。书和开发板、配套的光盘本身已经是一个比较大的FAQ。没有这个FAQ,什么都自己去问别人,去摸索的话,浪费的时间也许足以赚回好几台开发板的钱。

使用特权

评论回复
板凳
youngerger|  楼主 | 2007-4-13 15:01 | 只看该作者

都有买

开发板的全套都买了。 
内存映射和中断向量表的概念都可以找到。 
但是,光配置scatter 文件就是无法将整个下载到FLASH中的程序copy到external RAM里面运行。 
今天请教过师兄。
还有就是看过:
RootRegion(根区)
根区是一个执行块,它的加载地址与执行地址是一致的。每个scatter文件至少有一个根区。分散加载有一个限制:创建执行块的代码和数据(即完成复制和清零的代码和数据)无法自行复制到另一个位置。因此,在根区中必须含有下面的部分:
_main.o,包含复制代码/数据的代码;
连接器输出变量$$Table和ZISection$$Table,包含被复制代码/数据的地址。
由于上面两个部分的属性是只读的,因此他们被*〈+RO〉通配符语法匹配。如果*〈+RO〉被用在了非根区中,则在根区中必须显式地指明另一个RO区域。

使用特权

评论回复
地板
有意思| | 2007-4-14 13:54 | 只看该作者

简单点的

    IRAM 0x40000000 
    {
        Startup.o (+RW,+ZI)
        * (+RW,+ZI)
        main.o(+RO,+RW,+ZI)
        LPC_Uart.o(+RO,+RW,+ZI)
        LPC_LCD.o(+RO,+RW,+ZI)
        LPC_Rtc.o(+RO,+RW,+ZI)
        libspace.o(+RO,+RW,+ZI)
      
    }

使用特权

评论回复
5
VisionShow| | 2007-4-15 18:35 | 只看该作者

象这样

  LDR    R0,     =0x80000000
  MOV    R1,     #0x40000000
  MOV    R2,     #0xC000
CopyProgram:
  LDR    R3,     [R0], #4
  STR    R3,     [R1], #4
  SUBS   R2,     R2,   #4
  BNE    CopyProgram

这段程序将外部FLASH中程序拷贝到RAM中,R0外部FLASH地址
R1内部RAM地址,R2程序长度(注意:在执行这段程序之前要
关闭中断,而且执行完成要把地址映射到内部RAM中(MAMMAP=1))

使用特权

评论回复
6
gotomy| | 2008-5-5 09:06 | 只看该作者

学习LZ

使用特权

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

本版积分规则

5

主题

12

帖子

0

粉丝