打印
[ZLG-ARM]

LPC2220对片外Flash编程?

[复制链接]
2386|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有意思|  楼主 | 2007-1-21 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
db10| | 2007-1-21 13:45 | 只看该作者

一片flash应该不行吧?!

 你可以用两片flash,就象smartarm2220一样,在norflash里运行,将nandflash里程序拷贝到ram中.这样也可以省掉你后面说的再将程序从ram拷贝到flash,当然你要拷贝在上述条件下也是可以的.

使用特权

评论回复
板凳
有意思|  楼主 | 2007-1-21 17:00 | 只看该作者

把函数放到数组里

开玩笑,那成本提高了很多啊,
好像可以,在需要操作flash的时候,把擦除和编程函数放到一个数组里,这样就是在ram里运行了,编程完后,在回flash运行,就是不知道怎么实现

使用特权

评论回复
地板
peater| | 2007-2-8 09:39 | 只看该作者

编译器可以实现的

如果你的是IAR,可以把对flash编程的函数前加上__ramfunc,这样在上电时,这段程序就被编译器附加的代码拷贝到RAM中。

我想在keil/ADS里面照样可以实现的吧

使用特权

评论回复
5
luhuaren| | 2007-2-8 11:26 | 只看该作者

RE

由于程序要对自身flash编程,平时程序是在flash中跑的,在对flash进行操作时,怎么把flash中的程序搬到RAM中运行,待操作完后,在跑回flash中运行,


倒是可以把FLASH里的程序搬运到RAM里,但运行不运行就不一定了,你把FLASH里的代码搬到RAM里,然后把PC指针强制指向RAM地址,按道理可以.但要注意如下问题:你拷贝到RAM里去,程序地址是以RAM为基准进行跳转,它的运行域也应该是此地址.   也就是说,你拷贝的这段FLASH 的加载域与运行域是不同的.在分散加载文件里要设置好/ 

使用特权

评论回复
6
gaowenbiao| | 2007-3-1 15:12 | 只看该作者

可以这样做

楼主如果用的是ADS开发的话,可以把对FLASH操作的那段函数加载到RAM中去,简单的办法就是修改一下分散加载文件,如下所示(操作FLASH的程序放在FlashDown.c中):
ROM_LOAD 0x80000000
{
    ROM_EXEC 0x80000000
    {
        Startup.o (vectors, +First)
        * (+RO)
    }

    IRAM 0x40000000
    {
        Startup.o (+RW,+ZI)
        FlashDown.o(+RO,+RW,+ZI)
    }

    STACKS 0x40004000 UNINIT
    {
        stack.o (+ZI)
    }

    ERAM 0x81000000
    {
        * (+RW,+ZI)
    }

    HEAP +0 UNINIT
    {
        heap.o (+ZI)
    }
}

使用特权

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

本版积分规则

79

主题

331

帖子

0

粉丝