这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于ro,rw问题

共7条 1/1 1 跳转至

关于ro,rw问题

菜鸟
2005-09-13 23:44:32     打赏

LDR r0, =|Image$$RO$$Limit|
LDR r1, =|Image$$RW$$Base|
LDR r3, =|Image$$ZI$$Base|


CMP r0, r1
BEQ %F1
0
CMP r1, r3
LDRCC r2, [r0], #4
STRCC r2, [r1], #4
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit|
MOV r2, #0
2
CMP r3, r1
STRCC r2, [r3], #4
BCC %B2

这段代码有些地方看不明白,请大家帮忙解答:

我的理解是,首先,比较ro-limit和rw-base,如果小于(不可能大于),再比较rw-base和zi-base,如果小于说明存在rw区,此时,把(rw-base - ro-limit)之间的数据复制到rw-base地址起始的区域,然后再零初始化。

我看到书上只是说rw区从ROM到RAM的复制,但是复制的部分为什么是(rw-base - ro-limit)之间的数据?




关键词: 关于     问题    

菜鸟
2005-09-14 00:58:00     打赏
2楼
看仔细,不是(rw-base - ro-limit)之间的数据,而是从ro-limit开始,长度等于rw段大小的数据。

菜鸟
2005-09-14 21:57:00     打赏
3楼

是从ro-limit开始的长度为rw的数据复制,

ro = ro-limit - ro-base, rw = rw-limit - rw-base是否正确,

而ro段包含ro-data和ro-code,那么ro-limit起始的地址中数据是什么?是否为ro-data?


菜鸟
2005-09-14 22:05:00     打赏
4楼

RO_DATA和RO_CODE都应该包括在RO_BASE到RO_LIMIT之间的。RO_LIMIT起始的地方没有用到。
举个例子,如果你的MEMORY MAP如下:
FLASH:0-2M
RAM: 2-18M
你希望程序的RO部分放在0-2M的空间里面,RW部分放在2-18M的空间里面,那RO_LIMIT到RW_BASE之间这段空间就没有用到。


菜鸟
2005-09-14 23:26:00     打赏
5楼
以下是引用wheels在2005-9-14 13:57:00的发言:

ro = ro-limit - ro-base, rw = rw-limit - rw-base是否正确,

正确。但这只是复制完成后的情况。

[align=right][color=#000066][此贴子已经被作者于2005-9-14 15:28:59编辑过][/color][/align]

菜鸟
2005-09-16 05:51:00     打赏
6楼

我的理解是加载时ro和rw连续分布在rom中,运行时ro还在rom中,而rw复制到ram中,

但是程序执行前rw的大小是如何确定的?这段代码不是相当于已经知道了rw的大小,再进行复制?rw复制和zi初始化在bootloader中是必须有的吗?如果不是,有其他方法替代吗?

感谢两位的回答!!!


菜鸟
2005-09-16 06:25:00     打赏
7楼

用内嵌的这几个变量就可以确定RW的大小。
|Image$$RO$$Limit|
|Image$$RO$$Base|
|Image$$RW$$Limit|
|Image$$RW$$Base|
|Image$$ZI$$Limit|
|Image$$ZI$$Base|

并不是说只是在BOOTLOADER里面要进行RW段的复制,所有程序要正常的运行,就必须要保证RW段在合适的位置上。



共7条 1/1 1 跳转至

回复

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