打印

请教ARM地址映射问题

[复制链接]
3566|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
blackrose1|  楼主 | 2007-6-27 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   1.器件内部的flash,ROM,RAM都可以映射到地址0x0上,那位于0X0后面这一快是什么样的存储器呢?是RAM?
   2.器件刚上电时,ROM就映射在地址0X0上,这么说我们的引导程序就存在ROM里,可是我在调试时怎么必须把引导程序指定在地址0X0上程序才能正确运行.如果指定在flash或ROM中就不行了(提示在0X0处没有指令,我用的KEIL FOR ARM,器件是ATMEL的).
   3.经过地址映射后,RAM处于地址0X0上(之前是在0X200000上),那程序中定义的变量是存放在原来的位置,还是也会相应的移动??

   

相关帖子

沙发
suntds| | 2007-6-27 17:02 | 只看该作者

re

一般重映射前0x0就是flash,你这话怎么不大对啊:“必须把引导程序指定在地址0X0上程序才能正确运行.如果指定在flash或ROM中就不行了”
重映射后,要移动,不在原来的位置

使用特权

评论回复
板凳
blackrose1|  楼主 | 2007-6-27 22:25 | 只看该作者

谢谢你的指点

我用的是at91sam7x256,手册上说在重映射前0x0是ROM.我用的keil for arm.如果把程序定位在0x100000上,仿真时提示:"地址0x0处没有指令",导致程序运行不了;只有把程序定位在0x0上,才能运行.
 此问题已经解决:按仿真按钮之前要先执行download操作,此时在0x0地址处就自动多了几条指令,跳转到0x100000处来执行.
  现在的问题是:重映射后,RAM的地址是0x0了(之前是0X200000),那程序中定义的变量的位置会有什么变化吗?还是在0x20000处也还是RAM的位置???

使用特权

评论回复
地板
suntds| | 2007-6-28 11:03 | 只看该作者

remap后,地址变了

0x200000那部分地址变成reserved 或另作他用.

使用特权

评论回复
5
原野之狼| | 2007-6-28 11:39 | 只看该作者

说说我的看法,不知道对不对?

刚开始学习ARM,大家请指教!

上电复位后arm内核地址指针是指向0X00000000,这个地址及其后面得一小部分区域存得是中断向量。
至于这块地址指向什么设备(或者说什么存储器),那是由ARM内核之外的地址译码器决定得,而地址重映射就是来改变这个译码方式的。
这个可以参见ARM公司得文档,有这么一说,是用HDL简单描述的,用中文语言形容如下:
在某地址范围内(一般是中断向量地址),
如果REMAP为FLASH,那么SELECT FLASH
如果REMAP为RAM,那么SELECT RAM
....
说白了就是根据REMAP寄存器的值来片选不同得存储设备(存储区域),比如138译码器,通过A0 A1 A2的控制来选择Y1,Y2,Y3.....

即程序执行的时候取0X00000000处的代码,实际上取得是RAM的内容(如果REMAP至RAM),地址表现在ARM内核是0X00000000,而表现在译码器译码后的地址则是RAM的地址。



上电后必须REMAP到一个非易失性得存储区,否则运行出错。
运行过程中可以改变REMAP,比如REMAP到RAM(RAM的对应空间要有程序,可以从FLASH拷贝过来),这样具有中断响应速度快等一系列优点。

俺乃刚学ARM的菜鸟,说得不对,敬请各路大侠指教!

使用特权

评论回复
6
high| | 2007-6-29 01:19 | 只看该作者
7
ayb_ice| | 2007-6-29 07:54 | 只看该作者

搞清楚物理地址和虚拟地址...

地址映射就是重新确定物理地址和虚拟地址对应图...

使用特权

评论回复
8
平常人| | 2007-6-29 08:04 | 只看该作者

物理地址是东经xxx.xx度,北纬yyy.yy度;虚拟地址是.....

虚拟地址是北京市东城区东四北大街zzz号。

使用特权

评论回复
9
原野之狼| | 2007-6-30 12:47 | 只看该作者

平常人说的很经典~~~

使用特权

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

本版积分规则

9

主题

12

帖子

0

粉丝