您的位置 首页 新能源

(ARM)程序发动进程

作为一般的嵌入式程序设计工作者,平时大部分工作应该主要涉及应用层部分的事务,只要编译工程生成可执行文件,然后把执行文件download到RO

作为一般的嵌入式程序设计作业者,平常大部分作业应该首要触及应用层部分的业务,只需编译工程生成可履行文件,然后把履行文件download到ROM中,就OK了。很少重视烧写到ROM中的程序是怎样运转起来的这一进程。由于这部分作业大都被集成开发环境给做了。本篇文章,我欲将这不不太被重视的进程给简略介绍下(很少重视不代表不重要,相反,个人感觉对这一部分的了解,关于一个嵌入式程序开发者来说是一个小小的分水岭,当然,别的一个重要的分水岭肯定是操作系统啦)。

1 加载文件(sct ld等)

2 bin/image文件

一个简略的image文件首要包括以下三项:

RO区域:程序中的指令和常量,read only

RW区域:程序中现已初始化的变量, read/write

ZI区域:​初始化为0或许未被初始化的变量。zero

一个工程文件在make履行完之后会在最终显现一个代码巨细的数据:

Total RO size:Code+RO

Total RW size:RO + ZI

Total ROM size:Code + RO + RW 即image文件不包括zi段的。

链接器将RO区域定位在 -RO-Base 开端的地址,如ROM空间的开端地址上。相应的-RW-Base指的是RW区域代码的履行地址。值得注意的是链接器在创立上述区域的一起会发生相应的符号并把加载地址信息传递给这些符号。假如区域的加载地址和履行地址不一样的话,程序在运转之前,应首要完结对该区域代码的复制作业。值得注意的是完结复制的作业是由编译器调用相关库函数完结的。而且这部分代码是包括在image文件傍边的。

注:当运用自己的加载sct文件时将不会发生下面的几个如Image$$RO$$BASE等符号,本文要点解说的是运用sct文件的状况,但为了常识的全面性,以下仍将有关符号信息做简略介绍。

Image$$RO$$BASE:是RO段的履行地址,一起也是装载地址。

Image$$RO$$Limit: 是RO段装载地址完毕的后一个地址,也便是RW段的装载开端地址。

Image$$RW$$Base是RW段履行地址,一般RW段的装载地址和履行地址不一样,程序运转之前需求将从Image$$RO$$Limit-1开端的代码复制到由Image$$RW$$BASE指定的地址处。行将RW段从ROM中搬到RAM中。

Image$$ZI$$Base是ZI区在RAM里边的开端地址。

Image$$ZI$$Limit是ZI区在RAM里边完毕地址后边的那一个地址。​

3程序的发动

​如上所述,烧录到ROM中的程序跟运转起来的程序是由很大不同的。那么ROM中的程序怎么从image中抵达实践运转状况的呢?

首要,ROM中的指令,应具有RW段复制的功用。然后将ZI段地点的区域悉数清0功用,即需求依据编译器给出的ZI地址和巨细来将相应的RAM区域悉数清0的作业。​

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/263192.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部