<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > (ARM)程序啟動(dòng)過(guò)程

(ARM)程序啟動(dòng)過(guò)程

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
作為一般的嵌入式程序設計工作者,平時(shí)大部分工作應該主要涉及應用層部分的事務(wù),只要編譯工程生成可執行文件,然后把執行文件download到ROM中,就OK了。很少關(guān)注燒寫(xiě)到ROM中的程序是怎么運行起來(lái)的這一過(guò)程。因為這部分工作大都被集成開(kāi)發(fā)環(huán)境給做了。本篇文章,我欲將這不不太被關(guān)注的過(guò)程給簡(jiǎn)單介紹下(很少關(guān)注不代表不重要,相反,個(gè)人感覺(jué)對這一部分的理解,對于一個(gè)嵌入式程序開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)小小的分水嶺,當然,另外一個(gè)重要的分水嶺肯定是操作系統啦)。

1 加載文件(sct ld等)

本文引用地址:http://dyxdggzs.com/article/201611/319401.htm

2 bin/image文件

一個(gè)簡(jiǎn)單的image文件主要包括以下三項:

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

RW區域:程序中已經(jīng)初始化的變量, read/write

ZI區域:?初始化為0或者未被初始化的變量。zero

一個(gè)工程文件在make執行完之后會(huì )在最后顯示一個(gè)代碼大小的數據:

Total RO size:Code+RO

Total RW size:RO + ZI

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

?

?

鏈接器將RO區域定位在 -RO-Base 開(kāi)始的地址,如ROM空間的起始地址上。相應的-RW-Base指的是RW區域代碼的執行地址。值得注意的是鏈接器在創(chuàng )建上述區域的同時(shí)會(huì )產(chǎn)生相應的符號并把加載地址信息傳遞給這些符號。如果區域的加載地址和執行地址不一樣的話(huà),程序在運行之前,應首先完成對該區域代碼的拷貝工作。值得注意的是完成拷貝的工作是由編譯器調用相關(guān)庫函數完成的。并且這部分代碼是包含在image文件當中的。

注:當使用自己的加載sct文件時(shí)將不會(huì )產(chǎn)生下面的幾個(gè)如Image$$RO$$BASE等符號,本文重點(diǎn)講解的是使用sct文件的情況,但為了知識的全面性,以下仍將有關(guān)符號信息做簡(jiǎn)單介紹。

Image$$RO$$BASE:是RO段的執行地址,同時(shí)也是裝載地址。

Image$$RO$$Limit: 是RO段裝載地址結束的后一個(gè)地址,也就是RW段的裝載起始地址。

Image$$RW$$Base是RW段執行地址,通常RW段的裝載地址和執行地址不一樣,程序運行之前需要將從Image$$RO$$Limit-1開(kāi)始的代碼拷貝到由Image$$RW$$BASE指定的地址處。即將RW段從ROM中搬到RAM中。

Image$$ZI$$Base是ZI區在RAM里面的起始地址。

Image$$ZI$$Limit是ZI區在RAM里面結束地址后面的那一個(gè)地址。?

3程序的啟動(dòng)

?如上所述,燒錄到ROM中的程序跟運行起來(lái)的程序是由很大差別的。那么ROM中的程序如何從image中到達實(shí)際運行狀態(tài)的呢?

首先,ROM中的指令,應具有RW段拷貝的功能。然后將ZI段所在的區域全部清0功能,即需要根據編譯器給出的ZI地址和大小來(lái)將相應的RAM區域全部清0的工作。?



關(guān)鍵詞: ARM程序啟

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>