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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、參數(shù)設(shè)置,提供可視化的設(shè)置功能。支持工程級、文件目錄級、文件級編譯參數(shù)設(shè)置,13,ADT IDE for ARM主要特征 調(diào)試功能,ARM軟件開發(fā)工具ADT IDE簡介,同時提供了圖形和命令行兩種調(diào)試方式,程序的單步執(zhí)行,程序下載,存儲區(qū)下載和上載功能。,工程級調(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軟件開發(fā)工具ADT IDE簡介,斷點功能:支持軟件斷點和硬件斷點,實現(xiàn)斷點設(shè)置、斷點屏蔽、斷點取消、斷點列表等功能,變量監(jiān)視功能:隨程序運(yùn)行同步更新變量,即時修改變量值,可設(shè)置自動/手動刷新方式、十進(jìn)制/十六進(jìn)制顯示,ARM各種模式的寄存器即時查看與修改,當(dāng)前模式指示,寄存器值修改時紅色突顯,存儲器查看與修改,可設(shè)置自動/手動刷新方式、字節(jié)/雙字節(jié)/四字節(jié)顯示、大/小端方式顯示,存儲器值修改時紅色突顯,15,ADT IDE for ARM主要特征 調(diào)試功能,ARM軟件開發(fā)工具ADT IDE簡介,函數(shù)堆棧顯示,可設(shè)置自動/手動刷新方式、十進(jìn)制/十六進(jìn)制顯示、參數(shù)值顯示,參數(shù)類型顯示

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30、始化為主的過程,主要進(jìn)行操作系統(tǒng)初始化。BSP將控制轉(zhuǎn)交給操作系統(tǒng),由操作系統(tǒng)進(jìn)行余下的初始化操作。包括加載和初始化與硬件無關(guān)的設(shè)備驅(qū)動程序,建立系統(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ū)動程序,ARM軟件設(shè)計與代碼分析,與初始化過程相反,硬件相關(guān)的設(shè)備驅(qū)動程序的初始化和使用通常是一個從高層到底層的過程。 盡管BSP中包含硬件相關(guān)的設(shè)備驅(qū)動程序,但是這些設(shè)備驅(qū)動程序通常不直接由BSP使用,而是在系統(tǒng)初始化過程中由BSP把它們與操作系統(tǒng)中通用的設(shè)備驅(qū)動程序關(guān)聯(lián)起來,并在隨后的應(yīng)用中由通用的設(shè)

31、備驅(qū)動程序調(diào)用,實現(xiàn)對硬件設(shè)備的操作。,89,JX44B0應(yīng)用代碼設(shè)計及中斷處理,ARM軟件設(shè)計與代碼分析,連接腳本,90,JX44B0應(yīng)用代碼中斷向量,ARM軟件設(shè)計與代碼分析,起始地址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è)計與代碼分析,92,用匯編代碼編寫的中斷分發(fā)例程,保護(hù)現(xiàn)場 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è)計與代碼分析,93,用匯編代碼編寫的中斷分發(fā)例程,尋找中斷源 cmp r9, #0 x0 /* 檢查中斷狀態(tài) */ beq i2 mov r8,#0 x0 /* R8保存中斷表的偏移 */ i0: /* 逐位檢查中斷狀態(tài) */ movs r9,r9

溫馨提示

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

評論

0/150

提交評論