共2条
1/1 1 跳转至页
S3C44B0,RAM,remap 请教S3C44B0 RAM数据拷贝完成后是怎样完城remap的?
问
我们都知道代码在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才能够正确运行.
在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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
| 在FireBeetle2ESP32-C5上实现温湿度检测和显示被打赏¥20元 | |
| 在FireBeetle2ESP32-C5上实现光照强度检测及显示被打赏¥21元 | |
我要赚赏金
