08嵌入式軟件系統(tǒng)設(shè)計(jì).ppt_第1頁(yè)
08嵌入式軟件系統(tǒng)設(shè)計(jì).ppt_第2頁(yè)
08嵌入式軟件系統(tǒng)設(shè)計(jì).ppt_第3頁(yè)
08嵌入式軟件系統(tǒng)設(shè)計(jì).ppt_第4頁(yè)
08嵌入式軟件系統(tǒng)設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,提綱,1,3,2,嵌入式軟件開(kāi)發(fā)過(guò)程,ARM軟件設(shè)計(jì)與代碼分析,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,第六章 嵌入式軟件系統(tǒng)設(shè)計(jì),2,嵌入式系統(tǒng)軟件開(kāi)發(fā)流程,軟件需求分析:確定設(shè)計(jì)任務(wù)和目標(biāo),并提煉出設(shè)計(jì)規(guī)格說(shuō)明書(shū),作為正式設(shè)計(jì)指導(dǎo)和驗(yàn)收的標(biāo)準(zhǔn)。,嵌入式軟件開(kāi)發(fā)過(guò)程,概要設(shè)計(jì):描述系統(tǒng)如何實(shí)現(xiàn)所述的需求,包括軟件模塊的劃分、系統(tǒng)的軟件開(kāi)發(fā)工具選擇以及關(guān)鍵問(wèn)題的論證等。,詳細(xì)設(shè)計(jì):詳細(xì)描述各個(gè)模塊的實(shí)現(xiàn)方法與過(guò)程,模塊間接口等問(wèn)題,以作為編碼人員的編碼準(zhǔn)則。,編碼,3,嵌入式系統(tǒng)的開(kāi)發(fā)流程,單元調(diào)試:編碼完成后,對(duì)各個(gè)模塊進(jìn)行單元調(diào)試,以保證模塊正常工作。,嵌入式軟件開(kāi)發(fā)過(guò)程,集成調(diào)試,4,

2、ARM主流開(kāi)發(fā)工具,Windows操作系統(tǒng) ARM ADS/SDT + 調(diào)試器 GNU + Cygwin + 調(diào)試器 ARM SDT + 簡(jiǎn)易電纜 Linux操作系統(tǒng) GNU + GDB,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,5,常用調(diào)試方法,軟件仿真 駐留監(jiān)控程序 硬件要求高,一般在硬件穩(wěn)定之后進(jìn)行 需要占用目標(biāo)板上的一部分資源 不能對(duì)程序的全速運(yùn)行進(jìn)行完全仿真 JTAG仿真器 完全非插入式調(diào)試,不使用片上資源,無(wú)需目標(biāo)存儲(chǔ)器,不占用目標(biāo)系統(tǒng)的任何端口 仿真效果更加接近于目標(biāo)硬件 在線仿真器,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,6,ADT for ARM集成開(kāi)發(fā)系統(tǒng),ARM軟件開(kāi)發(fā)工具AD

3、T IDE簡(jiǎn)介,7,ADT 1000 Emulator for ARM,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,8,ADT 1000 Emulator for ARM,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,ADT Emulator for ARM是連接主機(jī)核目標(biāo)機(jī)之間的硬件設(shè)備,它實(shí)現(xiàn)ADT IDE for ARM與目標(biāo)機(jī)之間的連接。,它具有如下特征:,支持ARM核CPU,非插入式調(diào)試,無(wú)需目標(biāo)存儲(chǔ)器,不占用目標(biāo)系統(tǒng)的任何端口,2.5V/3.3V/5V兼容電平接口,支持標(biāo)準(zhǔn)的14/20針JTAG接口,運(yùn)行狀態(tài)指示,與主機(jī)之間通過(guò)并口連接,下載速度達(dá)到25Kbytes/S,9,ADT IDE fo

4、r ARM,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,10,ADT IDE for ARM主要特征 可視化編程環(huán)境,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,支持ARM7、ARM9、SecurCore等。,運(yùn)行于Windows98 、NT、2000、XP等平臺(tái)。,中文、英文版本支持,可視化的源碼編輯和工程管理功能,界面友好,使用方便:類似MS Visual Studio的用戶界面,支持打印功能,支持文件內(nèi)查找功能和Find in Files功能,11,ADT IDE for ARM主要特征 可視化編程環(huán)境,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,工程管理器:ADT IDE提供圖形化的工程管理工具,實(shí)現(xiàn)文

5、件級(jí)、文件目錄級(jí)、工程級(jí)的多級(jí)編譯連接選項(xiàng)管理以及工程級(jí)的調(diào)試參數(shù)管理,源碼編輯器:支持標(biāo)準(zhǔn)的文本編輯功能,支持C語(yǔ)言、匯編語(yǔ)言語(yǔ)法高亮顯示,輔助編輯工具:提供一系列輔助編輯工具,方便開(kāi)發(fā)人員。包括:多剪貼板工具、代碼模板工具、頭文件和源文件切換工具、注釋工具、符號(hào)配對(duì)書(shū)寫工具等多種輔助編輯工具。,12,ADT IDE for ARM主要特征 交叉編譯功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,支持開(kāi)發(fā)語(yǔ)言:ANSI C;Embedded C+;匯編語(yǔ)言,編譯工具:使用著名優(yōu)秀自由軟件GNU的GCC交叉編譯工具,并經(jīng)過(guò)優(yōu)化和嚴(yán)格測(cè)試,支持C語(yǔ)言、匯編語(yǔ)言等,編譯參數(shù)設(shè)置:完全圖形界面方式的編譯

6、參數(shù)設(shè)置,提供可視化的設(shè)置功能。支持工程級(jí)、文件目錄級(jí)、文件級(jí)編譯參數(shù)設(shè)置,13,ADT IDE for ARM主要特征 調(diào)試功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,同時(shí)提供了圖形和命令行兩種調(diào)試方式,程序的單步執(zhí)行,程序下載,存儲(chǔ)區(qū)下載和上載功能。,工程級(jí)調(diào)試參數(shù)管理,支持源程序、反匯編程序和混合窗口顯示,支持ARM/THUMB方式顯示,具有與MS Visual Studio類似的調(diào)試菜單功能:Go,Stop,Reset,Restart,Step into,Step over,Step out,Run to Cursor等,豐富的示例程序,14,ADT IDE for ARM主要特征 調(diào)

7、試功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,斷點(diǎn)功能:支持軟件斷點(diǎn)和硬件斷點(diǎn),實(shí)現(xiàn)斷點(diǎn)設(shè)置、斷點(diǎn)屏蔽、斷點(diǎn)取消、斷點(diǎn)列表等功能,變量監(jiān)視功能:隨程序運(yùn)行同步更新變量,即時(shí)修改變量值,可設(shè)置自動(dòng)/手動(dòng)刷新方式、十進(jìn)制/十六進(jìn)制顯示,ARM各種模式的寄存器即時(shí)查看與修改,當(dāng)前模式指示,寄存器值修改時(shí)紅色突顯,存儲(chǔ)器查看與修改,可設(shè)置自動(dòng)/手動(dòng)刷新方式、字節(jié)/雙字節(jié)/四字節(jié)顯示、大/小端方式顯示,存儲(chǔ)器值修改時(shí)紅色突顯,15,ADT IDE for ARM主要特征 調(diào)試功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,函數(shù)堆棧顯示,可設(shè)置自動(dòng)/手動(dòng)刷新方式、十進(jìn)制/十六進(jìn)制顯示、參數(shù)值顯示,參數(shù)類型顯示

8、,板上寄存器(On Board Register)的查看和修改,可以查看支持CPU的所有板上寄存器的具體意義、當(dāng)前值、各個(gè)位的意義,可設(shè)置自動(dòng)/手動(dòng)刷新方式、二進(jìn)制/十進(jìn)制/十六進(jìn)制顯示、大/小端方式顯示,支持十進(jìn)制/十六進(jìn)制方式修改寄存器值,寄存器值修改時(shí)紅色突顯。,flash在線編程器,支持對(duì)多種flash芯片的空白檢查、擦除、編程、校驗(yàn)等操作,支持單一操作和自動(dòng)操作兩種操作方式,支持8/16/32位flash訪問(wèn)寬度,支持多片flash同時(shí)編程,編程速度達(dá)15Kbytes/s。提供統(tǒng)一的flash編程接口,可以方便地添加flash編程方案。,16,ADT IDE for ARM,ARM軟

9、件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,ADT IDE (Arm7Lpt、Arm9Lpt、SoftSim、Arm7Simple),用戶手冊(cè)、編程指南,豐富例程,17,多版本支持,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,18,多工程管理,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,19,可視化編輯器,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,20,GCC交叉編譯,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,21,編譯器設(shè)置,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,22,匯編器設(shè)置,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,23,連接器設(shè)置,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,24,調(diào)試功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介

10、,25,多種調(diào)試模式,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,26,斷點(diǎn),ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,27,存儲(chǔ)器窗口,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,28,存儲(chǔ)區(qū)上載下載功能,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,29,寄存器觀察窗口,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,30,函數(shù)調(diào)用棧窗口,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,31,變量觀察窗口,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,32,命令窗口,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,33,單步調(diào)試 STEP INTO,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,34,單步調(diào)試 STEP OVER,ARM軟件開(kāi)發(fā)工具ADT I

11、DE簡(jiǎn)介,35,單步調(diào)試 STEP OUT,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,36,單步調(diào)試 RUN TO CURSOR,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,37,板上寄存器,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,38,板上寄存器,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,39,FLASH在線編程器,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,40,工具菜單,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,41,在線幫助,ARM軟件開(kāi)發(fā)工具ADT IDE簡(jiǎn)介,42,嵌入式軟件開(kāi)發(fā),無(wú)操作系統(tǒng)的軟件開(kāi)發(fā) 啟動(dòng)代碼 應(yīng)用程序 基于操作系統(tǒng)的軟件開(kāi)發(fā) bootloader 操作系統(tǒng)移植 BSP板級(jí)支持包 應(yīng)用程序

12、開(kāi)發(fā),ARM軟件設(shè)計(jì)與代碼分析,43,啟動(dòng)代碼,功能 硬件初始化 引導(dǎo)C代碼 特征 通常用匯編語(yǔ)言編寫 程序復(fù)位運(yùn)行入口點(diǎn) 代碼量非常小,程序流程 設(shè)置中斷、異常入口 關(guān)中斷 硬件寄存器初始化(GPIO配置、總線配置、PLL時(shí)鐘) 初始化棧指針 數(shù)據(jù)區(qū)初始化 C入口函數(shù)調(diào)用 BL Main,ARM軟件設(shè)計(jì)與代碼分析,44,應(yīng)用程序(無(wú)操作系統(tǒng)),功能 硬件驅(qū)動(dòng) 應(yīng)用 特征 通常用C語(yǔ)言或者嵌入式匯編語(yǔ)言編寫 程序較復(fù)雜,代碼量較大,ARM軟件設(shè)計(jì)與代碼分析,45,bootloader,功能 硬件初始化 引導(dǎo)操作系統(tǒng) 下載程序(串口、網(wǎng)口、USB) 燒寫flash 特征 程序復(fù)位運(yùn)行入口點(diǎn) 通常

13、用匯編語(yǔ)言+C語(yǔ)言編寫 代碼量較小,ARM軟件設(shè)計(jì)與代碼分析,46,嵌入式操作系統(tǒng)移植,Linux Windows CE uC/OS II uClinux Nucleus,ARM軟件設(shè)計(jì)與代碼分析,47,BSP板級(jí)支持包,功能 為應(yīng)用程序提供統(tǒng)一的硬件操作接口 特征 高度硬件相關(guān) 高度依賴于具體硬件平臺(tái) 各種操作系統(tǒng)各異,ARM軟件設(shè)計(jì)與代碼分析,48,應(yīng)用程序開(kāi)發(fā)(操作系統(tǒng)),功能 GUI圖形、人機(jī)交互 控制 算法 特征 硬件依賴程度小 部分可仿真調(diào)試 各種操作系統(tǒng)各異,ARM軟件設(shè)計(jì)與代碼分析,49,嵌入式軟件設(shè)計(jì)和調(diào)試流程,編輯 創(chuàng)建工程 添加文件、編寫程序 匯編語(yǔ)言加C語(yǔ)言 編譯 配置

14、編譯、匯編和連接參數(shù) 編寫連接腳本文件 編譯,調(diào)試 連接調(diào)試器 下載程序 運(yùn)行、調(diào)試 固化 通過(guò)仿真器燒寫flash 專用或通用的編程器 通過(guò)bootloader燒寫flash,ARM軟件設(shè)計(jì)與代碼分析,50,交叉編譯,GNU交叉編譯 編譯.c arm-elf-gcc 匯編.S arm-elf-gas 連接.o arm-elf-ld 操作文件 匯編文件.S C文件.c 鏈接腳本文件ldscript 庫(kù)文件.o .lib .a,生成調(diào)試格式文件.elf DWARF-1 DWARF-2 生成bin文件 elf2bin arm-elf-objcopy,ARM軟件設(shè)計(jì)與代碼分析,51,鏈接腳本,段 T

15、ext段 rodata段 data段 bss段 符號(hào) Image_RO_Limit Image_RW_Base Image_ZI_Base Image_ZI_Limit,GCC庫(kù)專用 調(diào)試信息,ARM軟件設(shè)計(jì)與代碼分析,52,鏈接腳本示例,程序在SDRAM中運(yùn)行,程序在FLASH中運(yùn)行,ARM軟件設(shè)計(jì)與代碼分析,53,GCC庫(kù),GCC庫(kù) 標(biāo)準(zhǔn)C函數(shù)庫(kù)lib.a -lc 標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)庫(kù)libm.a -lm 標(biāo)準(zhǔn)函數(shù)庫(kù)的支持庫(kù)libg.a -lg GCC的支持庫(kù)libgcc.a -lgcc 鏈接排列順序 -lm lc lgcc -lg,ARM軟件設(shè)計(jì)與代碼分析,54,JX44B0啟動(dòng)代碼分析,AR

16、M軟件設(shè)計(jì)與代碼分析,在基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0 x00000000開(kāi)始執(zhí)行,因此在這個(gè)地址處安排的通常就是系統(tǒng)的啟動(dòng)代碼。 它通常也是BootLoader程序的一部分,可以在啟動(dòng)代碼基礎(chǔ)上編寫B(tài)ootLoader。 用匯編語(yǔ)言編寫。 啟動(dòng)代碼是在復(fù)位后運(yùn)行其它程序之前運(yùn)行的一段小程序。通過(guò)它,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖(JX44B0不需要),從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用C函數(shù)準(zhǔn)備好正確的環(huán)境。,55,啟動(dòng)代碼的移植和修改,ARM軟件設(shè)計(jì)與代碼分析,啟動(dòng)代碼除了依賴于 CPU 的體系結(jié)構(gòu)外,實(shí)際上也依賴于具

17、體的嵌入式板級(jí)設(shè)備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設(shè)的類型等。 對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運(yùn)行在一塊板子上的啟動(dòng)代碼也能運(yùn)行在另一塊板子上,也還是需要作一些必要的修改。,56,啟動(dòng)代碼流程圖,啟動(dòng)代碼的功能:RAM初始化,設(shè)置各個(gè)部件的時(shí)鐘和片選,將BootLoader拷貝到RAM中,設(shè)置堆棧,調(diào)用C函數(shù)。 注意:在本階段,特別是在堆棧設(shè)置之前,進(jìn)行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不可預(yù)知的結(jié)果;,ARM軟件設(shè)計(jì)與代碼分析,57,設(shè)置中斷向量表,該段向量

18、表除了復(fù)位異常外,只有位于0地址處有效,也就是必須將該段代碼燒寫到FLASH中。 復(fù)位異常直接跳轉(zhuǎn)到ResetHandler處,它是相對(duì)跳轉(zhuǎn),位置無(wú)關(guān)。 其余的異常將跳轉(zhuǎn)到0c000008+向量地址的位置,使用絕對(duì)跳轉(zhuǎn)。,ARM軟件設(shè)計(jì)與代碼分析,58,復(fù)位入口:切換到超級(jí)模式,系統(tǒng)復(fù)位成功后,將自動(dòng)進(jìn)入SVC模式 在初始化之前必須關(guān)閉中斷,以免引起異常,LOCKOUT:0 xc0 Bit6,7 = 1,ARM軟件設(shè)計(jì)與代碼分析,59,設(shè)置中斷模式并禁止中斷,設(shè)置S3C44B0 INTCON寄存器 缺省值為0 x07,可以 不作該工作,ARM軟件設(shè)計(jì)與代碼分析,60,關(guān)閉看門狗,設(shè)置S3C44

19、B0 WTCON寄存器 必須設(shè)置,ARM軟件設(shè)計(jì)與代碼分析,61,系統(tǒng)配置寄存器,使能回寫buffer 打開(kāi)Cache,ARM軟件設(shè)計(jì)與代碼分析,62,設(shè)置非Cache區(qū)域,使能回寫buffer 打開(kāi)Cache,00 x0b000000,0c70000000 xc7320000,ARM軟件設(shè)計(jì)與代碼分析,63,端口設(shè)置,ARM軟件設(shè)計(jì)與代碼分析,64,設(shè)置外部中斷的觸發(fā)方式,ARM軟件設(shè)計(jì)與代碼分析,65,配置總線訪問(wèn)寬度,ARM軟件設(shè)計(jì)與代碼分析,66,配置總線訪問(wèn)時(shí)序,ARM軟件設(shè)計(jì)與代碼分析,67,C代碼初始化,ARM軟件設(shè)計(jì)與代碼分析,68,堆棧初始化,ARM軟件設(shè)計(jì)與代碼分析,69,

20、跳轉(zhuǎn)到C入口函數(shù),ARM軟件設(shè)計(jì)與代碼分析,70,JX44B0 BOOTLOADER分析,ARM軟件設(shè)計(jì)與代碼分析,BootLoader是在啟動(dòng)代碼的基礎(chǔ)之上,通常啟動(dòng)代碼包含于BootLoader之中 BootLoader常用于引導(dǎo)操作系統(tǒng)或者應(yīng)用程序 BootLoader可以包含一些簡(jiǎn)單的調(diào)試手段,71,BootLoader的基本概念,BootLoader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。 嵌入式系統(tǒng)中,整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)完全由 BootLoader來(lái)完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0 x00000000開(kāi)始執(zhí)行,而在這個(gè)地址處安

21、排的通常就是系統(tǒng)的BootLoader程序。 簡(jiǎn)單地說(shuō),BootLoader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖(有的CPU沒(méi)有內(nèi)存映射功能如S3C44B0),從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。 通常,BootLoader 是依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個(gè)通用的 BootLoader 是很困難的。,ARM軟件設(shè)計(jì)與代碼分析,72,BootLoader 的移植和修改,BootLoader除了依賴于 CPU 的體系結(jié)構(gòu)外,

22、BootLoader 實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設(shè)的類型等。 對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,也還是需要作一些必要的修改。,ARM軟件設(shè)計(jì)與代碼分析,73,BootLoader 的安裝,系統(tǒng)加電或復(fù)位后,所有的CPU通常都從CPU制造商預(yù)先安排的地址上取指令。比如,S3C44B0在復(fù)位時(shí)都從地址 0 x00000000 取它的第一條指令。 嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如:RO

23、M、EEPROM或FLASH等)被安排這個(gè)起始地址上,因此在系統(tǒng)加電后,CPU將首先執(zhí)行BootLoader程序。 也就是說(shuō)對(duì)于基于S3C44B0的這套系統(tǒng),我們的BootLoader是從0地址開(kāi)始存放的,而這塊起始地址需要采用可引導(dǎo)的固態(tài)存儲(chǔ)設(shè)備如FLASH。,ARM軟件設(shè)計(jì)與代碼分析,74,用來(lái)控制 BootLoader 的設(shè)備或機(jī)制,串口通訊是最簡(jiǎn)單也是最廉價(jià)的一種雙機(jī)通訊設(shè)備,所以往往在BootLoader中主機(jī)和目標(biāo)機(jī)之間都通過(guò)串口建立連接,BootLoader 程序在執(zhí)行時(shí)通常會(huì)通過(guò)串口來(lái)進(jìn)行 I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。當(dāng)然如果認(rèn)為串口通訊速度不夠

24、,也可以采用網(wǎng)絡(luò)或者USB通訊,那么相應(yīng)的在BootLoader中就需要編寫各自的驅(qū)動(dòng)。,ARM軟件設(shè)計(jì)與代碼分析,75,Boot Loader 的操作模式,啟動(dòng)加載模式:這種模式也稱為自主(Autonomous)模式。也即BootLoader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶的介入。這種模式是BootLoader的正常工作模式。 下載模式:在這種模式下,目標(biāo)機(jī)上的BootLoader將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)下載的文件通常首先被BootLoader保存到目標(biāo)機(jī)的RAM中,然后再

25、被 BootLoader寫到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)設(shè)備中。BootLoader 的這種模式通常在系統(tǒng)更新時(shí)使用。工作于這種模式下的 BootLoader 通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。 在教學(xué)系統(tǒng)中提供的BootLoader中沒(méi)有實(shí)現(xiàn)自主模式,可以通過(guò)修改代碼來(lái)實(shí)現(xiàn)該功能。,ARM軟件設(shè)計(jì)與代碼分析,76,BootLoader與主機(jī)間文件傳輸?shù)耐ㄐ旁O(shè)備及協(xié)議,最常見(jiàn)的情況就是,目標(biāo)機(jī)上的 Boot Loader 通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸,傳輸可以簡(jiǎn)單的采用直接數(shù)據(jù)收發(fā),當(dāng)然在串口上也可以采用xmodemymodemzmodem 協(xié)議以及 在以太網(wǎng)上采用TFTP協(xié)議。,ARM

26、軟件設(shè)計(jì)與代碼分析,77,BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架,從操作系統(tǒng)的角度看,BootLoader的總目標(biāo)就是正確地調(diào)用內(nèi)核來(lái)執(zhí)行。 大多數(shù)BootLoader都分為stage1和stage2兩大部分。 依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn),以達(dá)到短小精悍的目的,也就是前面說(shuō)的啟動(dòng)代碼。 而stage2 則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。,ARM軟件設(shè)計(jì)與代碼分析,78,BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架,BootLoader的stage1通常包括以下步驟

27、 為加載 BootLoader 的 stage2 準(zhǔn)備 RAM 空間 拷貝 BootLoader 的 stage2 到 RAM 空間中 設(shè)置好堆棧 跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn) BootLoader的stage2通常包括以下步驟 初始化本階段要使用到的硬件設(shè)備 調(diào)用應(yīng)用程序或啟動(dòng)內(nèi)核,ARM軟件設(shè)計(jì)與代碼分析,79,Stage 1初始化流程圖,stage 1的功能: RAM初始化,設(shè)置各個(gè)部件的時(shí)鐘和片選,將BootLoader拷貝到RAM中,設(shè)置堆棧,調(diào)用Stage 2。 注意:在本階段,特別是在堆棧設(shè)置之前,進(jìn)行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不

28、可預(yù)知的結(jié)果;,ARM軟件設(shè)計(jì)與代碼分析,80,Stage 2流程圖,stage 2的功能:初始化串口,顯示菜單,通過(guò)菜單獲取用戶輸入,并執(zhí)行相應(yīng)的操作。,ARM軟件設(shè)計(jì)與代碼分析,81,Bootloader更新程序流程圖,通過(guò)BootLoader更新程序的流程。注意為了使用Bootloader更新FLASH中的程序,需要首先將Bootloader搬遷到RAM中運(yùn)行。,ARM軟件設(shè)計(jì)與代碼分析,82,嵌入式實(shí)時(shí)操作系統(tǒng),ARM軟件設(shè)計(jì)與代碼分析,將在后面介紹,83,板級(jí)支持包,ARM軟件設(shè)計(jì)與代碼分析,BSP(板級(jí)支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層次,它完成系統(tǒng)上電后最初的硬件和軟件

29、初始化,并對(duì)底層硬件進(jìn)行封裝,使得操作系統(tǒng)不再面對(duì)具體的操作。,84,板級(jí)支持包的特點(diǎn),ARM軟件設(shè)計(jì)與代碼分析,硬件相關(guān)性:因?yàn)榍度胧綄?shí)時(shí)系統(tǒng)的硬件環(huán)境具有應(yīng)用相關(guān)性,所以,作為高層軟件與硬件之間的接口,BSP必須為操作系統(tǒng)提供操作和控制具體硬件的方法。 操作系統(tǒng)相關(guān)性:不同的操作系統(tǒng)具有各自的軟件層次結(jié)構(gòu),因此,不同的操作系統(tǒng)具有特定的硬件接口形式。,85,板級(jí)支持包的功能,ARM軟件設(shè)計(jì)與代碼分析,86,板級(jí)支持包的功能,ARM軟件設(shè)計(jì)與代碼分析,嵌入式系統(tǒng)初始化 片級(jí)初始化 板級(jí)初始化 系統(tǒng)級(jí)初始化 硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序,87,系統(tǒng)級(jí)初始化,ARM軟件設(shè)計(jì)與代碼分析,這是一個(gè)以軟件初

30、始化為主的過(guò)程,主要進(jìn)行操作系統(tǒng)初始化。BSP將控制轉(zhuǎn)交給操作系統(tǒng),由操作系統(tǒng)進(jìn)行余下的初始化操作。包括加載和初始化與硬件無(wú)關(guān)的設(shè)備驅(qū)動(dòng)程序,建立系統(tǒng)內(nèi)存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網(wǎng)絡(luò)系統(tǒng)、文件系統(tǒng)等;最后,操作系統(tǒng)創(chuàng)建應(yīng)用程序環(huán)境并將控制轉(zhuǎn)交給應(yīng)用程序的入口。,88,硬件相關(guān)的驅(qū)動(dòng)程序,ARM軟件設(shè)計(jì)與代碼分析,與初始化過(guò)程相反,硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序的初始化和使用通常是一個(gè)從高層到底層的過(guò)程。 盡管BSP中包含硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序,但是這些設(shè)備驅(qū)動(dòng)程序通常不直接由BSP使用,而是在系統(tǒng)初始化過(guò)程中由BSP把它們與操作系統(tǒng)中通用的設(shè)備驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái),并在隨后的應(yīng)用中由通用的設(shè)

31、備驅(qū)動(dòng)程序調(diào)用,實(shí)現(xiàn)對(duì)硬件設(shè)備的操作。,89,JX44B0應(yīng)用代碼設(shè)計(jì)及中斷處理,ARM軟件設(shè)計(jì)與代碼分析,連接腳本,90,JX44B0應(yīng)用代碼中斷向量,ARM軟件設(shè)計(jì)與代碼分析,起始地址0 x0c000008,除復(fù)位異常外,其余異常入口地址由FLASH跳轉(zhuǎn)得到,91,JX44B0中斷處理流程,執(zhí)行0 x18處指令:LDR pc, = 0 x0c000020,由Bootloader控制,執(zhí)行0 x0c000020處指令:HandlerIRQ,ramstart.s,執(zhí)行HandlerIRQ,ramstart.s,執(zhí)行HandleIRQ處保存的中斷分發(fā)例程,ramstart.s中初始化為IsrIR

32、Q,ARM軟件設(shè)計(jì)與代碼分析,92,用匯編代碼編寫的中斷分發(fā)例程,保護(hù)現(xiàn)場(chǎng) IsrIRQ:/*using I_ISPR register.*/ sub lr,lr,#4 stmfd sp!,lr /* 保存中斷返回的PC值 */ stmfd sp!,r0-r4 /* 備份寄存器R0-R4 */ sub sp,sp,#4 /* 為PC預(yù)留??臻g */ stmfd sp!,r8-r9 /* 備份寄存器R8-R9 */ ldr r9,=I_ISPR /* 讀取中斷狀態(tài) */ ldr r9,r9,R9中保存中斷狀態(tài),ARM軟件設(shè)計(jì)與代碼分析,93,用匯編代碼編寫的中斷分發(fā)例程,尋找中斷源 cmp r9, #0 x0 /* 檢查中斷狀態(tài) */ beq i2 mov r8,#0 x0 /* R8保存中斷表的偏移 */ i0: /* 逐位檢查中斷狀態(tài) */ movs r9,r9

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論