当前位置:首页 > 单片机 > 单片机
[导读]我在学习嵌入式操作系统UCOS时,有很大的迷茫之处,在于我不知道我用的工具到底帮我干了些神马工作。下面就说一下我当时的疑问:1:编译器和链接器干了些神马?我现在也还没能力知道它是怎么干的这些工作。以后慢慢来

我在学习嵌入式操作系统UCOS时,有很大的迷茫之处,在于我不知道我用的工具到底帮我干了些神马工作。下面就说一下我当时的疑问:

1:编译器和链接器干了些神马?我现在也还没能力知道它是怎么干的这些工作。以后慢慢来呗。但当时我连它干了神马都不清楚。

2:它输入的是源程序,那他输出的是什么?有格式吗?是什么样子那?

重重疑问。

ADS编译器的目的是怎么把高级语言编程能在ARM平台上直接运行的东东。

而我们的目的是看看他干了些神马,让我们了解一下它以及他链接出来的东东是什么样子。对嵌入式整个工程开发做了哪些贡献,这样我们就能更好的使用它了。是不是。

关于ARM嵌入式开发的要点和步骤请参考基于ARM的嵌入式系统程序开发要点.pdf,这里不做详细介绍。

UCOS运行的硬件环境是ARM芯片我们已经在芯片知识章节介绍了,那UCOS 绝大多数代码是用C语言写的,那C语言怎么变成在ARM芯片上运行的代码也是一个问题,因为我们要讲解的是UCOS在具体平台上的具体运行效果。

先说一下编译、链接后ARM程序的组成:

ARM程序的组成
此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
一个ARM程序包含3部分:RO,RW和ZI
RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的未初始化的变量
由以上3点说明可以理解为:
RO就是readonly,
RW就是read/write,即已初始化的变量
ZI就是zero,程序员未初始化的变量,一般默认初始化为0

(2)
ARM映像文件的组成
所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
Image文件包含了RO和RW数据。
之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
Q:为什么Image中必须包含RO和RW?
A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。
(3)

ARM程序的执行过程
从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
实际上,ROM中的指令至少应该有这样的功能:
1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中
在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。

也就是说经过编译器编译出来的可执行程序在内存中有两种状态,一种是刚装载到内存时的状态,即按照你写的函数调用的顺序组织成的连续的二进制代码。另一种是程序运行时的状态。但一般程序真正执行时要把我们写的程序分为代码段、数据段<包括已经初始化的变量和没有初始化的变量>。你想代码段放到内存之后,什么也不用提前做,只等着被取出执行就行。但数据段就不一样了,你想一想,数据段要有本身的属性的(初始化为具体数值或者0),那这些属性必须在程序没有执行前赋给这些变量。怎么赋予它们这些属性那,一般是由编译器产生一些专门负责这些工作的代码来完成。现在大家理解为什么说编译器编译出来的可执行程序在内存中有两种状态了吧。一个是LOAD时的状态,一个是运行时的状态。

我们现在知道了ADS编译出来的程序的样子了,以及编译好的代码要想真正运行还需要做的工作。但问题又出现了,我们怎么利用ADS这个工具使其产生我们所需要的代码的样子以及怎样让他变成真正运行时的样子那?

编译器把源文件编译成ELF的目标文件,然后经连接器最终生成.bin 文件,这种文件可以用于直接烧录到flash中。也即去除了ELF那些格式。

你可以通过简单地配置进行设置编译出的代码的装载地址和运行地址。你也可以用分散加载文件来实现比较复杂的内存映射。有关编译器编译出的代码的装载和运行地址的相关概念请参考:ARM开发工具ADS原理与应用的第十章。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭