这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于s3c44b0x的启动代码的理解与疑问,望高手帮忙!

共13条 1/2 1 2 跳转至

关于s3c44b0x的启动代码的理解与疑问,望高手帮忙!

菜鸟
2006-08-04 21:42:42     打赏

;//6.将数据段拷贝到ram中 将零初始化数据段清零 跳入C语言的main函数执行
;//到这步结束bootloader初步引导结束

LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
;Zero init base => top of initialised data

CMP r0, r1 ; Check that they are different
BEQ %F1

;//在ARM里,LDRCC是一条条件执行指令。当前面的运算没有设C标志的时候,执行LDR。否则LDRCC就等效于NOP。
0
CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4

BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2
CMP r3, r1 ; Zero init//将未初始化的全局变量清0
STRCC r2, [r3], #4 ;若r3<r1则先执行[r3]=r2,然后r3=r3+4//将r3指向的寄存器填0

BCC %B2


这段代码中并没有将FLASH中的程序搬到SDRAM中呀?

以下为我的理解,假设:2m NOR FLASH在bank0,8m sdram在bank6,我的程序为0x00100000(包括启动程序)

1)如果我设置ADS中ro base为0x00000000, rw base 为0x0c000000,

程序是不是只在FLASH中运行?而只是把FLASH 中已初始化的数据段(从0x00100000开始的一段数据)放入SDRAM中,
然后将未初始化的变量赋0(本来就在SDRAM中,不需要移动)-----〉问:我的理解对吗?

2)如果我设置ADS中ro base为0x0c000000, rw base 为0x0c200000,
那么程序是不是就不能下到FLASH中,只在SDRAM中运行,这样掉电,程序就消失了,对吗?

3)如果我设置ADS中ro base为0x00000000,rw base不设置
那么启动程序只会将ZI段清0,程序还是在FLASH中运行。

4) 问:如果我想把FLASH里的程序搬到SDRAM中运行(速度会快点)是否要另写代码?请各位朋友帮帮忙!
谢谢




关键词: 关于     s3c44b0x     启动     代码     理解     疑问         

菜鸟
2006-08-04 22:54:00     打赏
2楼

1)正确。

2)正确。

3)不清楚。

4)正确。我想,你可以编一个写FLASH的程序。功能是把某个SDRAM地址开始的一定长度的数据写到FLASH中(比如0X2000地址)。上面这个程序用AXD执行,用AXD的load memory from file将你要烧的那个程序的BIN文件加载到SDRAM。这样,你的程序就烧到FLASH了。

修改bootloader,让它搬移0x2000地址的内容到SDRAM,然后跳过去。这样就行了。

这三个程序(烧FLASH的、boot的、被烧的)的RO和RW如何设置,你都应该知道的啦


菜鸟
2006-08-04 23:26:00     打赏
3楼

谢谢您的回答,由于刚接触bootloader,所以有些不明白,对于四我看的有点糊涂。

您说的是这意思吗?

1)用AXD的load memory from file将你要烧的那个程序的BIN文件加载到SDRAM,

2)用AXD执行一段搬运程序,将SDRAM中的一定长度的数据写到FLASH中(比如0X2000地址)。

3)修改bootloader,让它搬移0x2000地址的内容到SDRAM。

问:烧到FLASH这么麻烦吗?

谢谢回答!


菜鸟
2006-08-04 23:35:00     打赏
4楼

老大表达能力比我好。

是这个意思,但是注意要先用AXD执行搬运程序,在写FLASH之前停下来,然后加载BIN文件到SDRAM,然后再RUN来执行写FLASH的代码。

至于为什么要这样麻烦:你当然可以用工具来直接写FLASH,但是如果应用程序较大,那样太慢了。


菜鸟
2006-08-04 23:38:00     打赏
5楼

2) 未必

3) 程序肯定运行不了


菜鸟
2006-08-04 23:44:00     打赏
6楼

LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
再问

我在该程序中多加上一句就编译出错,怎么回事?

LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
LDR r4, =|Image$$RO$$Base| ;---〉新添加


菜鸟
2006-08-05 00:01:00     打赏
7楼
引用一个外部变量,要IMPORT一下。

菜鸟
2006-08-05 00:14:00     打赏
8楼

o!!

谢谢……怎么这个都忘了!


菜鸟
2006-08-05 00:58:00     打赏
9楼

s3c44b0x不支持 memory remap。

程序一开始肯定执行FLASH中的bootloader,在bootloader中如果我们将flash中的程序搬到sdram中,那么应该要重映射地址才可以执行吧!

这样说来,S3C44B0X就不能先在FLASH中运行,然后再SDRAM中运行,是不是这样?


菜鸟
2006-08-05 03:24:00     打赏
10楼
不一定非要重映射的,copy也行。

共13条 1/2 1 2 跳转至

回复

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