bootloader中rw data的讨论.

[复制链接]
3032|6
 楼主| playlinus 发表于 2008-10-21 10:57 | 显示全部楼层 |阅读模式
bootloader只是将rw data 复制到SDRAM空间内,而code部分依旧放在0x00000000地址开始的线性存储器内,CPU当需要调用RW时,如何实现到SDRAM中取值呢,谁告诉了cpu rw是在SDRAM中呢 ?
农民讲习所 发表于 2008-10-21 11:03 | 显示全部楼层

这话问得好无聊

  
Etual 发表于 2008-10-21 11:44 | 显示全部楼层

楼主先回去复习一下51~~~

看看地址总线和数据总线是怎么工作的 :)
 楼主| playlinus 发表于 2008-10-21 13:08 | 显示全部楼层

是挺无聊,想了解一下...

  
dld2 发表于 2008-10-21 13:15 | 显示全部楼层

re

CPU只是从指令中知道数据的地址,并不知道是在SDRAM。<br />数据的地址是linker根据RO、RW的设置来确定的。
und 发表于 2008-10-25 22:23 | 显示全部楼层

RE

你问这个问题说明你对编译、链接的本质没搞清,你的所有文件是先通过编译,这时的文件是没有地址信息的,你必须通过Linker来告诉编译器和你的硬件设计平台相对应的RO,RW,ZI具体的加载、执行地址。在ADS中有两种方法:<br />1.用Simple方式来告诉编译器你的RO.RW地址<br />2.通过你的scatter文件来具体的指定,该方法适合高级用户(需要对硬件平台有深刻理解)
dazuo 发表于 2016-5-10 20:47 | 显示全部楼层
每个符号(包括数据,代码)可以有加载地址和执行地址,两者可以相同也可以不同,这通常可以通过scatter file来指定。
在你说的情况中,代码的加载地址和执行地址是相同的,而RW data 的加载地址是不同于其执行地址的,因此在系统初始化阶段arm 库函数会把这部分数据从从加载地址(比如flash) copy到运行地址(比如SDRAM)。代码中访问数据都是通过运行地址进行的,如果某个地址指向的是SDRAM所在区域,地址总线自然会访问SDRAM,从而读写数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

518

帖子

2

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