打印

arm9 RO RW ZI等的理解,包括运行时候的具体细节

[复制链接]
1899|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ben123one|  楼主 | 2010-12-29 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的开发板是mini2440,友善之臂的,norflash存放了bootloader,可以开机引导。
一般arm9都是跑操作系统,但是我想跑裸机程序,这样对arm9会更加理解。

ADS:
里面设置关键的是RO RW吧,R0设置的是0x30000000,也就是sdram的其实地址,这个地址我理解就是告诉编译器,我的程序只能在sdram里跑,而且地址是从0x30000000开始,所以如果这么设置,我的bin可执行文件一定要拷贝到0x30000000,否则就会产生错误。当然RO的意思就是指令和常量存放的起始地址。
但是这个0x30000000到底会对我们的bin产生什么影响呢,或者说对我们的代码(反汇编)产生什么影响呢?
1.如果设置了0x30000000,那么假如代码里有一个标号lable1,这个标号对应的地址就会从0x30000000开始算起,当你通过这个lable绝对跳转的时候,就是跳转到0x30000000以上的内存的位置,所以说如果设置了0x300000000,但你你把代码放到sram里执行(sram的地址是0-4k),就会出错。
2.RO当然还包括了常量,比如const定义的,他会存放在指令后面的地址里。
3.RW什么意思呢?通过超级终端,他的地址就是RO完毕后紧跟着的地址,这个需要我们自己设置吗?是不是就是如果我们设置了RW,那么我们呢的已经定义的变量就是定义在RW这个地址初,编译器最终就是把它放在这个地址上。
4.ZI就是没有初始化的了,和上面理解一样吧?
5.ADS还有一个进入地址,和RO的地址一样,这个地址具体表示什么呢?RO已经表明了进入地址.


MDK(keil):
RO RW 这些含义跟ADS相同。
1.MDK必须设置off-chip ROM,这个一般设置为起始地址为0,大小事实际的咱外部的NORflash的大小吧?(起始地址为0,说明是从NORflash启动,这个时候norflash映射为0地址,那么从nandflash启动的时候,这个位置如何设置呢?)
2.ram onchip,这个默认给出了值,是0x0000,0x4000,这个值确实是2440里ram的具体大小(当从nandflash启动的时候,sram呗映射为0地址,自动将nand的前4K拷贝到sram),这个值的具体作用是什么呢?
3.还有ram offchip,这个是不是设置sdram的起始地址和大小啊?设置后,如果在sdram执行,那么C语言的堆栈啥的,就在这里面开辟,但是好像理解也不对,如何理解呢?
4.为什么ADS里没有以上这些设置呢?
5.这些设置到底对最终的bin或者说反汇编后的代码产生什么影响呢?
还请指教

相关帖子

沙发
ben123one|  楼主 | 2011-1-6 09:00 | 只看该作者
哥们们,谁回个帖子,我结贴,貌似明白了

使用特权

评论回复
板凳
airwill| | 2012-5-29 12:21 | 只看该作者
存储空间的划分, 这是编译器和连接器要分别和区分的地址空间, 用于安排内存空间.
通常编程的时候知道有那么回事就行了.

使用特权

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

本版积分规则

0

主题

16

帖子

1

粉丝