免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1149 | 回复: 0
打印 上一主题 下一主题

ARM映像文件的组成 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-20 16:12 |只看该作者 |倒序浏览

关于ARM中可执行文件的格式问题
ARM映像文件的组成
        所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image
文件来称呼它。Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因
为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。
包含进去反而浪费存储空间。
烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有
必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
RO  == ReadOnly      只读的代码段和常量
RW  == ReadWrite  可读写的全局变量和静态变量
ZI     ==  ZeroInit           RW段中要被初始化为零的变量的段(也就是说该段包含在RW内)
        对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,
而在运行时,程序中的RW段必须重新装载到可读写的RAM中。这就涉及到程序的加载
时域和运行时域。简单来说,程序的加载时域就是指程序烧入Flash中的状态,运行时
域是指程序执行时的状态。
        在引导程序完成初始化的任务后,应该把主程序转移到RAM中去运行,以加快系
统的运行速度。
        RO中的指令至少应该有这样的功能:
       1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
       2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器
给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM
中在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否
则只能运行不含变量的代码。
总结:
1; C中的指令以及常量被编译后是RO类型数据。
2; C中的未被初始化或初始化为0的变量编译后是ZI类型数据。
3; C中的已被初始化成非0值的变量编译后市RW类型数据。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85184/showart_1432765.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP