1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      嵌入式應用程序設計的基本知識

      更新時間: 2007-05-24 11:21:20來源: 粵嵌教育瀏覽量:1080

      嵌入式應用程序設計的基本知識
      OHY 2006-11-13
      一、嵌入式系統中的存儲映射
      在ARM體系結構中,系統復位后將跳轉到地址0x00x處執行,該處存放的是復位異常中斷的中斷向量。對于嵌入式系統來說,在系統復位時RAM中是不存在代碼和數據的。因此在系統復位時,地址0x00處應為ROM,即系統復位后應該首先從ROM開始執行。這時,根據系統在其后運行過程中地址0x00處存儲器的類型,有下面兩種情況。
      1、地址0x00處為ROM
      這里說的地址0x00為ROM,是指在系統運行過程中,地址0x00為ROM。對于嵌入式系統來說,在系統復位時地址0x00處總為ROM。這種情況非常簡單,在地址0x00存存放著復位異常中斷向量,根據此中斷向量,程序跳轉到相應的位置開始進行系統初始化等操作。
      這種情況有種缺點,通常相對于RAM來說,ROM的數據寬度較小,速度較慢,這會使系統響應異常中斷的速度較慢。而且如果異常中斷向量表放在ROM中,則中斷向量表內容不能修改。
      2、地址0x00處為RAM
      同樣,這里說的地址是指系統運行時地址為0x00,而嵌入式系統在系統復位時的地址0x00處總為ROM。因此,對于運行時地址處0x00為RAM的系統,為了保證系統復位后從ROM中開始執行,在系統復位時,系統中的映射機構將ROM映射到地址0x00處,然后在程序運行初幾條指令中,系統中的存儲機構進行地址重映射(remap)重新將RAM映射到地址0x00處。
      相對于ROM來說,RAM的數據寬度較大,速度較快,這會使系統響應異常中斷的速度更快。而且如果異常中斷向量表放在RAM中,程序在運行中可以修改中斷向量表內容,使系統更為靈活。
      如果系統正常運行過程中,地址0x00處為RAM,則在系統復位時需要執行下面操作序列。
      1、系統復位時,ROM被映射到地址0x00處,程序從這里獲得復位異常中斷向量。
      2、執行復位異常中斷向量。如:LDR  PC,=0x0f000004
      3、設置地址重映射寄存器REMAP=1,重新將RAM映射到地址0x00開始的空間。
      4、完成其他的初始化代碼。
      二、系統初始化
      系統的初始化部分包括兩個級別的操作:
      系統運行環境初始化。
      應用程序初始化。
      A、系統運行環境初始化
      對于嵌入式應用系統和具有操作系統支持的應用系統來說,相同運行環境初始化部分的工作時不同的。對于有操作系統支持的應用系統來說,在操作系統啟動時將會初始化系統的工作環境。操作系統在加載應用程序后,將控制權轉交到應用程序的main()函數。然后,C運行時庫的_main()初始化應用程序。而對于嵌入式應用系統來說,由于沒有操作系統的支持,存放在ROM的代碼必須進行所有的初始化工作。
      系統運行環境的初始化工作主要包括一下的內容:
      1、設置初始入口點。
      初始入口點是映象文件運行時的入口點,每個映像文件只有一個的初始入口點,它保存在ELF頭文件中。如果映像文件是被操作系統加載的,操作系統正是通過跳轉到該初始入口點處執行來加載該映像文件的。初始入口點必須滿足下面兩個條件:
      a、初始入口點必須位于映像文件的可執行區域。
      b、包含初始入口點的可執行域不能被覆蓋,它的加載時地址和運行時地址必須是相同的。(這種域稱為固定域root region)
      2、設置中斷向量表
      如果系統運行時,地址0x00處為ROM,則相同的異常中斷向量表是固定的,程序在運行過程中不能修改異常中斷向量表。
      如果系統運行時,地址0x00處為RAM,則系統初始化時必須重建異常中斷向量表。
      3、初始化存儲系統
      4、初始化數據棧指針
      5、初始化關鍵的IO設備
      指那些必須在使能IRQ和IFQ之前進行初始化的IO設備。
      6、設置中斷昔日需要的RAM變量
      7、使能異常中斷
      通過清楚CPSR寄存器的中斷禁止位實現。
      8、切換處理器模式
      直到目前為止,系統還處于特權模式。如果下面要運行的應用程序是在用戶模式下運行,就需要將處理器切換到用戶模式。
      9、切換程序狀態
      所有的RAM內核都是從ARM狀態開始執行的。
      B、應用程序初始化
      1、將已經初始化的數據搬運到可寫的數據區。
      在嵌入式系統中,已經初始化的數據在映像文件運行之前通常保存在ROM中,在程序運行過程中這些數據可能需要被修改。因而,在映像文件運行之前需要將這些數據搬運到可寫的數據區。這部分數據就是映像文件中的RW屬性的數據。
      2、在可寫存儲區建立ZI屬性的可寫數據區。
      通常在映像文件運行之前,也就是保存在ROM時,映像文件中沒有包含ZI屬性的數據。在運行映像文件時,在系統的可寫的數據區建立ZI屬性的數據區。
      如果應用程序中包含了函數main(),編譯器在編譯該函數時,將引言符號_main。這樣,連接器在連接時將包含C運行時庫中的相應內容。_main可以完成這部分應用程序的初始化。
      如果應用程序中沒有包含函數main(),應用程序中需要包括進行這部分應用程序的初始化

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲色中文字幕在线播放囯产免费 | 亚洲午夜片在线 | 香蕉国产线观看免费网站 | 亚洲欧美卡通在线一区 | 亚洲欧美视频一区二区三区 | 亚洲人成在线观看网站不卡 |