[ZLG-ARM] LPC2220对片外Flash编程?

[复制链接]
3791|5
 楼主| 有意思 发表于 2007-1-21 13:26 | 显示全部楼层 |阅读模式
由于程序要对自身flash编程,平时程序是在flash中跑的,在对flash进行操作时,怎么把flash中的程序搬到RAM中运行,待操作完后,在跑回flash中运行,应该怎么实现这样的操作啊,请教各位大虾??
db10 发表于 2007-1-21 13:45 | 显示全部楼层

一片flash应该不行吧?!

 你可以用两片flash,就象smartarm2220一样,在norflash里运行,将nandflash里程序拷贝到ram中.这样也可以省掉你后面说的再将程序从ram拷贝到flash,当然你要拷贝在上述条件下也是可以的.
 楼主| 有意思 发表于 2007-1-21 17:00 | 显示全部楼层

把函数放到数组里

开玩笑,那成本提高了很多啊,<br />好像可以,在需要操作flash的时候,把擦除和编程函数放到一个数组里,这样就是在ram里运行了,编程完后,在回flash运行,就是不知道怎么实现
peater 发表于 2007-2-8 09:39 | 显示全部楼层

编译器可以实现的

如果你的是IAR,可以把对flash编程的函数前加上__ramfunc,这样在上电时,这段程序就被编译器附加的代码拷贝到RAM中。<br /><br />我想在keil/ADS里面照样可以实现的吧
luhuaren 发表于 2007-2-8 11:26 | 显示全部楼层

RE

由于程序要对自身flash编程,平时程序是在flash中跑的,在对flash进行操作时,怎么把flash中的程序搬到RAM中运行,待操作完后,在跑回flash中运行,<br /><br /><br />倒是可以把FLASH里的程序搬运到RAM里,但运行不运行就不一定了,你把FLASH里的代码搬到RAM里,然后把PC指针强制指向RAM地址,按道理可以.但要注意如下问题:你拷贝到RAM里去,程序地址是以RAM为基准进行跳转,它的运行域也应该是此地址.&nbsp;&nbsp;&nbsp;也就是说,你拷贝的这段FLASH&nbsp;的加载域与运行域是不同的.在分散加载文件里要设置好/&nbsp;<br />
gaowenbiao 发表于 2007-3-1 15:12 | 显示全部楼层

可以这样做

楼主如果用的是ADS开发的话,可以把对FLASH操作的那段函数加载到RAM中去,简单的办法就是修改一下分散加载文件,如下所示(操作FLASH的程序放在FlashDown.c中):<br />ROM_LOAD&nbsp;0x80000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000<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;FlashDown.o(+RO,+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS&nbsp;0x40004000&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack.o&nbsp;(+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ERAM&nbsp;0x81000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HEAP&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heap.o&nbsp;(+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

331

帖子

0

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