<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          1 加載文件(sct ld等)

          本文引用地址:http://www.ex-cimer.com/article/201611/319401.htm

          2 bin/image文件

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

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

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

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

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

          Total RO size:Code+RO

          Total RW size:RO + ZI

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

          ?

          ?

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

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

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

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

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

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

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

          3程序的啟動(dòng)

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

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



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

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();