这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » S3C44B0,RAM,remap 请教S3C44B0 RAM数据拷贝完成后是怎

共2条 1/1 1 跳转至

S3C44B0,RAM,remap 请教S3C44B0 RAM数据拷贝完成后是怎样完城remap的?

院士
2006-09-17 18:14:16     打赏
S3C44B0,RAM,remap 请教S3C44B0 RAM数据拷贝完成后是怎样完城remap的?



关键词: S3C44B0     remap     请教     数据     拷贝     完成    

院士
2006-12-22 22:43:00     打赏
2楼
问 我们都知道代码在RAM中执行的速度要比在ROM中要快,所以一般的系统都会做REMAP动作。
    在S3C4510中是通过特殊寄存器来完成的。S3C44B0我好像没有看到REMAP相关的代码,请教各位大侠,因为小弟查了一些资料但是没有找到答案! 1: 44b无remap功能只能自己作一个跳转 2: RE:centimetrecentimetre兄你好,谢谢你的解答。
我有一些疑问:  
1)如果是没有remap功能,但是我看到的引导代码,都有在RAM中间划出了复位地址
和中断向量。
1)如果有的话,是怎样实现的。当其中有异常出现时它的地址是固定的啊,比如FIRQ,就是0x0000001CH。这个物理地址是在ROM区的,但是CODE是在RAM区执行的。 3: 确实 4: 对不起,没写完4510可以REMAP,但是44B0不能,确实是做了一个跳转
AREA    boot, CODE, READONLY
不知道你看到有没有如下代码?
VECTORS    EQU    0x0c000000

    ENTRY
    
    mov    pc, #VECTORS
    ldr    pc, =VECTORS+4
    ldr    pc, =VECTORS+8
    ldr    pc, =VECTORS+0x0c
    ldr    pc, =VECTORS+0x10
    ldr    pc, =VECTORS+0x14
    ldr    pc, =VECTORS+0x18
    ldr    pc, =VECTORS+0x1c
    
    END 5: RE:weiganglnu回weiganglnu,我看到过这段代码。
想问一下,编译的时候,
AREA    boot, CODE, READONLY

VECTORS    EQU    0x0c000000

    ENTRY                      ;这里编译出来的地址是0x00000000吗?
    
    mov    pc, #VECTORS
    ldr    pc, =VECTORS+4
    ldr    pc, =VECTORS+8
    ldr    pc, =VECTORS+0x0c
    ldr    pc, =VECTORS+0x10
    ldr    pc, =VECTORS+0x14
    ldr    pc, =VECTORS+0x18
    ldr    pc, =VECTORS+0x1c
    
    END
6: 我已经实现了44B0X在RAM中运行程序其实,最开始那段复位向量程序:
AREA    boot, CODE, READONLY

    ENTRY
    
    mov    pc, #VECTORS
    ldr    pc, =VECTORS+4
    ldr    pc, =VECTORS+8
    ldr    pc, =VECTORS+0x0c
    ldr    pc, =VECTORS+0x10
    ldr    pc, =VECTORS+0x14
    ldr    pc, =VECTORS+0x18
    ldr    pc, =VECTORS+0x1c
始终位于FLASH中而不是RAM中运行,包括中断ISR的程序的汇编入口部分,都是在FLASH中运行的.用户用C语言编写的ISR程序是在RAM中运行的.这是由44B0X的硬件条件决定的,不会因为你将所有代码都复制到RAM中而改变.
我是这样做的:
在BOOTLOADER的中,将存储器\堆栈\WDT等设置好之后,就复制RW域的数据到正确的位置.然后将RO域的数据复制到RWLIMIT之后的RAM区间内.然后将PC指针指向MAIN函数在RAM中的位置处,(这里,自己要计算一下MAIN到底在哪个位置),程序就可以在RAM中运行了.
我用这种方法已经实现了从PC上重新下载一个应用程序到FLASH中的功能(类似51单片机的ISP功能),下载之后,如果不复位44B0X,仍然运行的是RAM中的程序(我测试过),复位之后,运行的是重新下载的程序.
在做这样的REMAP时,除了要计算MAIN在RAM中的位置外,还要在ISR的入口处加上一个偏移量(即RO代码在RAM中的映射的起始位置),这样,你用C语言编写的ISR才能够正确运行.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]