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

[复制链接]
3313|16
 楼主| playlinus 发表于 2008-9-22 12:29 | 显示全部楼层 |阅读模式
问题一: 搬运代码和scatter文件是不是只需要其一 ?<br /><br />将&nbsp;ROM&nbsp;中的代码和数据搬移到&nbsp;RAM&nbsp;中,具体程序如下。&nbsp;<br />LDR&nbsp;r0,&nbsp;=|Image$$RO$$Base|&nbsp;/*RO&nbsp;段起始地址&nbsp;*/&nbsp;<br />LDR&nbsp;r1,&nbsp;=|Image$$RO$$Limit|&nbsp;/*RO&nbsp;段结束地址&nbsp;*/&nbsp;<br />LDR&nbsp;r2,&nbsp;=|Image$$RW$$Base|&nbsp;<br />LDR&nbsp;r3,&nbsp;=|Image$$RW$$Limit|&nbsp;<br />/*&nbsp;分别求出需要映像的代码和数据的长度并累加,放到寄存器&nbsp;R1&nbsp;中&nbsp;*/&nbsp;<br />SUB&nbsp;r1,&nbsp;r1,&nbsp;r0&nbsp;<br />SUB&nbsp;r3,&nbsp;r3,&nbsp;r2&nbsp;<br />ADD&nbsp;r1,&nbsp;r1,&nbsp;r3&nbsp;<br />/*&nbsp;将需要映象的代码和数据复制到&nbsp;RAM&nbsp;中去&nbsp;*/&nbsp;<br />0&nbsp;/*&nbsp;标示符&nbsp;*/&nbsp;<br />LDR&nbsp;r3,&nbsp;[r0],&nbsp;#4&nbsp;<br />STR&nbsp;r3,&nbsp;[r2],&nbsp;#4&nbsp;<br />SUBS&nbsp;r1,&nbsp;r1,&nbsp;#4&nbsp;<br />BNE&nbsp;%B0&nbsp;/*&nbsp;如果没有复制完,跳转到&nbsp;0&nbsp;标示符处的汇编语句,继续复制<br /><br />问题二.&nbsp;搬运代码以后,如何实现跳转到SDRAM ? <br />    仅仅一条BL&nbsp;_main就可以实现吗,代码搬运以后在FLASH和SDRAM中各存在一个main函数,如何识别就是跳转到了<br />SDRAM中的main呢 <br /><br />以上这两点感觉很难理解,尤其是2410含有MMU而又不具备Remap功能,请有经验的高人指点迷津 .<br />
阿南 发表于 2008-9-23 13:04 | 显示全部楼层

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

  
foxfoxes 发表于 2008-9-23 14:38 | 显示全部楼层

123

我也不知道
huqg09 发表于 2008-9-23 17:26 | 显示全部楼层

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

我是菜鸟,说说我的想法:<br />1:我觉得SCATTER文件应该和搬运代码没什么关系。前者只是确定代码的下载地址和执行地址之间的关系,是在程序执行之前编译器做的工作,我们要做的或许仅仅就是将紧跟着|Image$$RO$$Limit|&nbsp;后的RW段移动到|Image$$RW$$Base|&nbsp;开始的区域。而你这里的搬运代码是在程序执行过程之中,把一个完整的代码段(RO+RW)从一个区域复制到另一个区域,然后跳转到该区域(或者REMAP)后执行。<br />2:呵呵,和你有一样的疑问,楼主看的应该是一个系统的工程文件,能不能把这个工程文件中有关跳转的这部分贴出来大家一起分析分析~<br /><br />呵呵,我是菜鸟,说错了,大家帮忙指正!
农民讲习所 发表于 2008-9-23 17:32 | 显示全部楼层

对第二条,不是BL _main

而是直接跳转到代码搬运的起始地址,比如0x30000000<br />BL&nbsp;_main,是你的程序中包含的init.s中的汇编代码,该init.s从0x30000000开始。
农民讲习所 发表于 2008-9-23 20:32 | 显示全部楼层

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

作用是初始化变量。<br />注意:没有LDR&nbsp;r0,&nbsp;=|Image$$RO$$Base|&nbsp;/*RO&nbsp;段起始地址&nbsp;*/&nbsp;<br />
avocationA 发表于 2008-9-24 08:00 | 显示全部楼层

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

  
农民讲习所 发表于 2008-9-24 09:16 | 显示全部楼层

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

  
 楼主| playlinus 发表于 2008-9-24 09:52 | 显示全部楼层

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

7楼,你讲的boot程序是哪个呢,能否贴出来看看&nbsp;?
农民讲习所 发表于 2008-9-24 09:52 | 显示全部楼层

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

如果这段代码本身在FLASH中,当然在FLASH中跳转
农民讲习所 发表于 2008-9-24 09:57 | 显示全部楼层

比如你的代码放在NORFLASH中

想在FLASH中直接运行而不是搬移到RAM中再运行,那么这段代码同样可以执行,MAIN也在FLASH中。<br />1楼的代码,是将程序从FLASH搬移到RAM,再自行,所以1楼的代码是个独立的,和6L无关的。
l0p0c 发表于 2008-9-24 10:06 | 显示全部楼层

是,看的我眼都花了!

  
armfan 发表于 2008-9-24 11:05 | 显示全部楼层

re

农民讲习所&nbsp;已经讲的很清楚了<br />你的两端代码不是出自一个工程<br />一楼的代码我好像见过,出自zlg的<br />其中也没有用到加载文件只是利用软件设置的。<br />那个具有remap功能。<br />如果说是出自2410的boot,那么这如农民讲习所所说那个搬移代码的部分已经实在sdram中运行的。
 楼主| playlinus 发表于 2008-9-24 11:43 | 显示全部楼层

农民讲习所请进 .

农民讲习所所说那个搬移代码的部分已经实在sdram中运行的。<br /><br />搬移代码如何在SDRAM中的呢&nbsp;?&nbsp;通过ADS设置?
avocationA 发表于 2008-9-24 11:47 | 显示全部楼层

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

  
 楼主| playlinus 发表于 2008-9-24 12:09 | 显示全部楼层

楼上应该是习惯KEIL了

  
 楼主| playlinus 发表于 2008-9-24 15:24 | 显示全部楼层

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

...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

518

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部