打印
[微控制器/MCU]

ARM地址空间介绍

[复制链接]
2851|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Massif123|  楼主 | 2010-8-20 12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM的体系结构有很多很多介绍的地方,从其7种模式到CPSR状态寄存器,这些都是属于最底层的硬件直接相关的ARM属性,再向上一点,考虑一下在ARM上运行的嵌入式应用,一般称在ARM上直接运行的嵌入式应用为Image就是直接烧进flash运行的可执行文件,这种可执行文件是由IAR,ADS,ARM-EABI-GCC等编译器经过编译所直接生成的。由于没有操作系统的支持,这种镜像文件是需要自己管理底层存储空间的分配的。这里我主要说一下关于Image镜像与ROM,RAM的关系。首先在ARM上电启动时Image是在ROM中的,这就有问题了,我们知道,程序是由指令与数据共同组成的,指令可以放在ROM中,但数据变量必须放在RAM中才能够运行啊,可ARM上电时RAM空间是清空的啊,这就产生一个问题,变量数据是怎么进到RAM中的,由谁来做的。介绍一下ARM程序中各种标志,在ARM中有CODE,READONLY DATA, READWRITE DATA, ZI,他们分别表示CODE:ARM 指令,
READONLY DATA指只读数据,如const int tst = 1;
READWRITE DATA可读写数据,就是我们常说的变量,已经被初始的变量才是READWRITE DATA。如 int tst = 2;
ZI:Zero Init数据,就是不初始化,或者用0初始化的变量。
在IAR,ADS等开发工具中,其配置文件中需要为编译后的镜像指定各段所在的地址空间,由可读写属性上可以主要分为
READONLY 包括CODE,READONLY DATA
READWRITE 包括READWRITE DATA,ZI。
了解了这些基础知识后,回到最初的问题,ARM的Image就是由上面所说的各个段组成的,那在只读的ROM空间,如何将READWRITE的数据放入RAM中的那,在代码中我们并没有作这些事啊。其实,这部分工作是由Image自动进行的不需要认为干预,在启动时,Image自动将数据拷贝到RAM中,这里还要强调一下,拷贝的只是READWRITE变量,对ZI的变量,直接将所在内存段清0即可,无需拷贝。
在编写嵌入式程序过程中,需要重点将存储空间中各段位置考虑好,在进行Image的编译,Image起始地址必须是0x00,或者CPU指定的运行地址,重点是分配各个特殊状态的STACK空间,以及用于动态分配的HEAP空间。在IAR中有关于 initialize by copy/manule的指令,就是用来将RW数据段拷入RAM中的,这里一定要将RW拷入,否则会导致运行错误。

相关帖子

沙发
3B1105| | 2010-8-29 10:57 | 只看该作者
很受益,IAR的启动文件编写咱们编写啊,有没有相关文档

使用特权

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

本版积分规则

177

主题

276

帖子

1

粉丝