<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)

ARM的啟動(dòng)

作者: 時(shí)間:2011-02-15 來(lái)源:網(wǎng)絡(luò ) 收藏

1ARM的啟動(dòng)過(guò)程

一般的系統在主程序執行之前都需要執行一些初始化的過(guò)程以創(chuàng )造程序運行的環(huán)境,尤其是一些高級的系統,由于核心芯片使用內存映射、內存保護等機制以及編程使用高級語(yǔ)言C,C++甚至JAVA語(yǔ)言,都需要先創(chuàng )建一個(gè)適合程序運行的硬件環(huán)境,然后初始化或者配置或者剪裁run-time library, 這些工作都必須在主程序運行前完成,所以一個(gè)startup程序或者程序組對于一個(gè)來(lái)說(shuō)是非常重要的。要編寫(xiě)startup程序,需要對編譯器、鏈接器和匯編器的細節有一定的了解,同時(shí)對ARM芯片硬件本身的地址分配以及memory mapping機制也需要有一些了解。


2 ARM 程序的工作過(guò)程


首先由各種source file經(jīng)過(guò)編譯產(chǎn)生object文件,然后object文件經(jīng)過(guò)鏈接生成Image文件,然后通過(guò)ICE的方法,根據描述文件的指定下載到目標板上的固態(tài)存儲器指定地址當中,比如flash,EEPROM, ROM等等。在程序執行之前,根據某些描述文件,將需要讀寫(xiě)數據的部分讀出放入動(dòng)態(tài)存儲器比如RAM當中,然后程序從ROM開(kāi)始執行?;蛘哂袝r(shí)為了提高程序的運行速度,也可以將所有的程序(有一些root的部分除外,以后會(huì )提及)通過(guò)一個(gè)描述文件放入指定的RAM當中,然后程序從RAM開(kāi)始執行,但是這樣會(huì )耗費大量的動(dòng)態(tài)存儲器,所以大部分程序會(huì )取折中的方法,將需要快速運行的部分和要讀寫(xiě)的部分放入RAM中(一般讀固態(tài)存儲器的過(guò)程和動(dòng)態(tài)存儲器的過(guò)程是一樣的,但是寫(xiě)就不同了,所以讀寫(xiě)的部分一定要放到RAM中),而只讀的部分和對速度要求不是那么高的部分放入固態(tài)存儲器。同時(shí)ARM結構的異常向量表規定放在地址為0x00000000開(kāi)始的地址空間上,而一般的CPU為了提高異常相應速度,會(huì )將這個(gè)向量段remap到其他的RAM當中,所以在描述文件當中必須精確指定異常向量跳轉程序的地址到remap的地方。在application程序執行前,還需要由一些文件描述application程序執行的環(huán)境。比如系統工作時(shí)鐘,總線(xiàn)頻率?,F在一般嵌入式編程語(yǔ)言為C,C++等。如果在使用它們的時(shí)候使用的runtime-library,那么在程序執行前還需要為這些庫函數初始化heap。然后ARM可能工作在不同的模式,還需要為不同的工作模式設置stack。這樣,描述鏈接地址的文件,以及在 application運行前所有的初始化程序就是startup程序組

3 STARTUP分類(lèi)


這樣,將startup程序所完成的功能分類(lèi)。一類(lèi)是鏈接地址描述,一類(lèi)是各種初始化的程序。根據不同的應用,描述文件和初始化程序的內容以及結構和復雜程度都會(huì )不同。但是基本上,它們都必須實(shí)現以下功能。
3.1 描述文件實(shí)現功能
描述文件可以是鏈接命令行上簡(jiǎn)單的幾個(gè)字符,也可以是一個(gè)非常復雜的文件,但是它必須完成如下功能:
; 指定程序下載的地址
; 指定程序執行的地址
3.2 初始化程序實(shí)現的功能
初始化程序根據不同的應用,其結構和復雜度也不同,但是它必須完成如下基本功能:
; 異常向量初始化
; 內存環(huán)境初始化
; 其他硬件環(huán)境初始化

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(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>