打印
[ZLG-ARM]

看我是如何在LPC2214上实现把代码copy到SRAM中运行

[复制链接]
2239|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vimman|  楼主 | 2007-8-2 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LPC2214的SRAM虽然只有16K,但把代码和数据一起放到上面还是有机会的,比如你写的程序小到一定程度而且要求效率的时候可以尝试;本人以ZLG模板为基础在keil uvsion3实现了,但是还有很多不明白的地方,希望大侠指教啊!
一、修改scf如下:
ROM_LOAD 0x0
{
    ROM_EXEC 0x00000000
    {
        Startup.o (vectors, +First)
        *armlib* (+RO)
        anon$$obj.o (+RO)
        target.o (+RO)
    }

    RAM_EXEC 0x40000044
    {
        * (+RO)
    }
    
    IRAM 0x40003000
    {
        Startup.o (MyStacks)
        * (+RW,+ZI)
    }
    
    IRQSTACK 0x40003080 UNINIT
    {
       IrqStack.o (IrqStack)
    }
        
    HEAP +0 UNINIT
    {
        heap.o (+ZI)
    }

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

其中 *armlib* (+RO)是把rv的库函数定位,可以在rv_link.pdf中找到说明;anon$$obj.o (+RO)这个本人没弄明白是怎么生成的,好像是一个跳转表,是通过map文件看出来的;把跟启动代码相关的只执行一次的代码放到内部flash中,把应用层代码放到sram中;同时仿照stack.s增加了irqStack.s,这样做是为了避免IRQ时再去读取flash中的文字池。  RAM_EXEC 0x40000044 之所以没有从0x40000000开始是为了留出SRAM中断向量的位置。
二、修改startup.s:

初始化堆栈后添加以下代码
        MOV     R1, #0
        MOV     R2, #0x40000000
        LDR     R3, Vend
CopyVec CMP     R2, R3
        LDRLO   R0, [R1], #4
        STRLO   R0, [R2], #4
        BLO     CopyVec
Vend    DCD     0x40000040
 copy中断向量到SRAM,copy代码段到SRAM,调至__main后rv的库函数会scatter load相应的代码到sram中。这中间不要忘记设置MEMMAP=0x2,将向量映射到SRAM。
这样程序就可以在内部SRAM中运行起来了。

相关帖子

沙发
gotomy| | 2008-5-5 08:57 | 只看该作者

留位

使用特权

评论回复
板凳
WGC204| | 2009-11-19 11:08 | 只看该作者
楼主能否给个代码包,让俺学习看看,多谢谢!
mail:wgc204@163.com

使用特权

评论回复
地板
linhai1986| | 2009-11-20 00:09 | 只看该作者
这个很好,赞一下

使用特权

评论回复
5
linhai1986| | 2009-11-20 00:10 | 只看该作者
不知LZ在哪找到的这个资料?

使用特权

评论回复
6
xiaoxin1986| | 2009-11-20 23:42 | 只看该作者
LZ很厉害

使用特权

评论回复
7
xiaoxin1986| | 2009-11-20 23:43 | 只看该作者
支持支持,希望有跟多这中学习资料

使用特权

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

本版积分规则

12

主题

81

帖子

0

粉丝