[ZLG-ARM] 如何把程序放到RAM运行

[复制链接]
3167|5
 楼主| youngerger 发表于 2007-4-12 09:49 | 显示全部楼层 |阅读模式
由于LPC2214的内部FLASH空间有限,只好把程序写道外部FLASH,但是外部FLASH有一个问题就是,访问速度很慢,即使将BCFG配置好。<br />所以希望在运行的时候把程序加载到外部RAM中。&nbsp;在分散加载文件中,RW&nbsp;,ZI段的重定位是__main会完成的。&nbsp;但是好像分散加载无法将&nbsp;完成复制和清零的代码和数据加载到另外的位置。&nbsp;<br />那么要怎么样才能将所有的RO段都重定位到外部RAM呢,&nbsp;是不是仅仅修改分散加载文件无法达到这样的要求呢?&nbsp;有没有什么其它办法?是不是需要自己写复制RO段的代码?<br />&nbsp;<br />还有就是如果程序在外部FLASH运行,那么是不是中断向量表也就在外部FLASH,&nbsp;这样会不会使得中断响应减慢?&nbsp;如果仅仅想将中断向量表复制到内部RAM,该怎么做?
zlgARM 发表于 2007-4-12 21:08 | 显示全部楼层

youngerger

&nbsp;&nbsp;&nbsp;&nbsp;请研究一下我们的Easyarm2200模板。翻书了解一下内存映射和中断向量表的概念。如果您有这些资料,那么您的问题根本不需要到版面上来问了。<br />&nbsp;&nbsp;&nbsp;如果没有买开发板和配套书,建议买上。书和开发板、配套的光盘本身已经是一个比较大的FAQ。没有这个FAQ,什么都自己去问别人,去摸索的话,浪费的时间也许足以赚回好几台开发板的钱。
 楼主| youngerger 发表于 2007-4-13 15:01 | 显示全部楼层

都有买

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

简单点的

&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPC_Uart.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPC_LCD.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPC_Rtc.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;libspace.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
VisionShow 发表于 2007-4-15 18:35 | 显示全部楼层

象这样

&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0x80000000<br />&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#0x40000000<br />&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#0xC000<br />CopyProgram:<br />&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[R0],&nbsp;#4<br />&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[R1],&nbsp;#4<br />&nbsp;&nbsp;SUBS&nbsp;&nbsp;&nbsp;R2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;&nbsp;&nbsp;#4<br />&nbsp;&nbsp;BNE&nbsp;&nbsp;&nbsp;&nbsp;CopyProgram<br /><br />这段程序将外部FLASH中程序拷贝到RAM中,R0外部FLASH地址<br />R1内部RAM地址,R2程序长度(注意:在执行这段程序之前要<br />关闭中断,而且执行完成要把地址映射到内部RAM中(MAMMAP=1))<br />
gotomy 发表于 2008-5-5 09:06 | 显示全部楼层

学习LZ

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

12

帖子

0

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