打印

2410启动的两个问题,请DX指点迷津 .

[复制链接]
2134|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
playlinus|  楼主 | 2008-9-22 12:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题一: 搬运代码和scatter文件是不是只需要其一 ?

将 ROM 中的代码和数据搬移到 RAM 中,具体程序如下。 
LDR r0, =|Image$$RO$$Base| /*RO 段起始地址 */ 
LDR r1, =|Image$$RO$$Limit| /*RO 段结束地址 */ 
LDR r2, =|Image$$RW$$Base| 
LDR r3, =|Image$$RW$$Limit| 
/* 分别求出需要映像的代码和数据的长度并累加,放到寄存器 R1 中 */ 
SUB r1, r1, r0 
SUB r3, r3, r2 
ADD r1, r1, r3 
/* 将需要映象的代码和数据复制到 RAM 中去 */ 
0 /* 标示符 */ 
LDR r3, [r0], #4 
STR r3, [r2], #4 
SUBS r1, r1, #4 
BNE %B0 /* 如果没有复制完,跳转到 0 标示符处的汇编语句,继续复制

问题二. 搬运代码以后,如何实现跳转到SDRAM ? 
    仅仅一条BL _main就可以实现吗,代码搬运以后在FLASH和SDRAM中各存在一个main函数,如何识别就是跳转到了
SDRAM中的main呢 

以上这两点感觉很难理解,尤其是2410含有MMU而又不具备Remap功能,请有经验的高人指点迷津 .

相关帖子

沙发
阿南| | 2008-9-23 13:04 | 只看该作者

楼主可以单步执行启动代码,用实践去验证您的疑问

使用特权

评论回复
板凳
foxfoxes| | 2008-9-23 14:38 | 只看该作者

123

我也不知道

使用特权

评论回复
地板
huqg09| | 2008-9-23 17:26 | 只看该作者

我是菜鸟,说说我的想法:

我是菜鸟,说说我的想法:
1:我觉得SCATTER文件应该和搬运代码没什么关系。前者只是确定代码的下载地址和执行地址之间的关系,是在程序执行之前编译器做的工作,我们要做的或许仅仅就是将紧跟着|Image$$RO$$Limit| 后的RW段移动到|Image$$RW$$Base| 开始的区域。而你这里的搬运代码是在程序执行过程之中,把一个完整的代码段(RO+RW)从一个区域复制到另一个区域,然后跳转到该区域(或者REMAP)后执行。
2:呵呵,和你有一样的疑问,楼主看的应该是一个系统的工程文件,能不能把这个工程文件中有关跳转的这部分贴出来大家一起分析分析~

呵呵,我是菜鸟,说错了,大家帮忙指正!

使用特权

评论回复
5
农民讲习所| | 2008-9-23 17:32 | 只看该作者

对第二条,不是BL _main

而是直接跳转到代码搬运的起始地址,比如0x30000000
BL _main,是你的程序中包含的init.s中的汇编代码,该init.s从0x30000000开始。

使用特权

评论回复
6
农民讲习所| | 2008-9-23 20:32 | 只看该作者

晕,这不是BOOT程序,只是INIT.S。你怎么把两个混起来看

作用是初始化变量。
注意:没有LDR r0, =|Image$$RO$$Base| /*RO 段起始地址 */ 

使用特权

评论回复
7
avocationA| | 2008-9-24 08:00 | 只看该作者

等待DX详细解释!!!!!

使用特权

评论回复
8
农民讲习所| | 2008-9-24 09:16 | 只看该作者

就是1楼和6楼的代码,不是一个出处。

使用特权

评论回复
9
playlinus|  楼主 | 2008-9-24 09:52 | 只看该作者

7楼,你讲的boot程序是哪个呢,能否贴出来看看 ?

7楼,你讲的boot程序是哪个呢,能否贴出来看看 ?

使用特权

评论回复
10
农民讲习所| | 2008-9-24 09:52 | 只看该作者

因为你这段代码本身已经在SDRAM中了

如果这段代码本身在FLASH中,当然在FLASH中跳转

使用特权

评论回复
11
农民讲习所| | 2008-9-24 09:57 | 只看该作者

比如你的代码放在NORFLASH中

想在FLASH中直接运行而不是搬移到RAM中再运行,那么这段代码同样可以执行,MAIN也在FLASH中。
1楼的代码,是将程序从FLASH搬移到RAM,再自行,所以1楼的代码是个独立的,和6L无关的。

使用特权

评论回复
12
l0p0c| | 2008-9-24 10:06 | 只看该作者

是,看的我眼都花了!

使用特权

评论回复
13
armfan| | 2008-9-24 11:05 | 只看该作者

re

农民讲习所 已经讲的很清楚了
你的两端代码不是出自一个工程
一楼的代码我好像见过,出自zlg的
其中也没有用到加载文件只是利用软件设置的。
那个具有remap功能。
如果说是出自2410的boot,那么这如农民讲习所所说那个搬移代码的部分已经实在sdram中运行的。

使用特权

评论回复
14
playlinus|  楼主 | 2008-9-24 11:43 | 只看该作者

农民讲习所请进 .

农民讲习所所说那个搬移代码的部分已经实在sdram中运行的。

搬移代码如何在SDRAM中的呢 ? 通过ADS设置?

使用特权

评论回复
15
avocationA| | 2008-9-24 11:47 | 只看该作者

ADS里的代码太乱建议用KEIL mdk

使用特权

评论回复
16
playlinus|  楼主 | 2008-9-24 12:09 | 只看该作者

楼上应该是习惯KEIL了

使用特权

评论回复
17
playlinus|  楼主 | 2008-9-24 15:24 | 只看该作者

6楼程序只是执行了init , 没有进行搬运是吧 ?

...

使用特权

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

本版积分规则

102

主题

518

帖子

2

粉丝