版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)嵌入式軟件系統(tǒng)設計20131提綱132嵌入式軟件開發(fā)過程ARM軟件設計與代碼分析ARM軟件開發(fā)流程和開發(fā)工具第六章嵌入式軟件系統(tǒng)設計2常用調試方法軟件仿真駐留監(jiān)控程序硬件要求高,一般在硬件穩(wěn)定之后進行需要占用目標板上的一部分資源不能對程序的全速運行進行完全仿真JTAG仿真器完全非插入式調試,不使用片上資源,無需目標存儲器仿真效果更加接近于目標硬件在線仿真器ARM軟件開發(fā)流程和開發(fā)工具3ARM主流開發(fā)工具Windows操作系統(tǒng)ARMADS/SDT+調試器GNU+Cygwin+調試器ARMSDT+簡易電纜KEIL4.13+調試器Linux操作系統(tǒng)GNU+GDBARM軟件開發(fā)流程和開發(fā)工具4ARM嵌入式開發(fā)模式(ARMADS/SDT+調試器)ARM軟件開發(fā)流程和開發(fā)工具5ADS與Multi-ICE
ARMADS全稱為ARMDeveloperSuite,是ARM公司推出的用于ARM程序設計、開發(fā)和調試的集成開發(fā)工具。現(xiàn)在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。ADS由命令行開發(fā)工具,ARM運行時庫,圖形化集成開發(fā)環(huán)境(CodeWarrior和AXD),實用程序和支持軟件組成。ARM軟件開發(fā)流程和開發(fā)工具6ADS命令行開發(fā)工具
ARMC(C++)編譯器
ARM匯編器(armasm)
ARM鏈接器(armlink)
符號調試器(armsd)
ARM軟件開發(fā)流程和開發(fā)工具7ARM運行時庫ANSIC函數(shù)庫:(armlib)
C++函數(shù)庫:
ARM軟件開發(fā)流程和開發(fā)工具8圖形化集成開發(fā)環(huán)境(CodeWarrior和AXD)
CodeWarriorforARM
ADS調試器實用程序fromELF
armar
Flashdownloader
支持的軟件ARMulatorARM軟件開發(fā)流程和開發(fā)工具9ADTIDEforARMARM軟件開發(fā)工具-ADTIDE簡介
10嵌入式軟件開發(fā)無操作系統(tǒng)的軟件開發(fā)啟動代碼應用程序基于操作系統(tǒng)的軟件開發(fā)bootloader操作系統(tǒng)移植BSP板級支持包應用程序開發(fā)ARM軟件設計與代碼分析11啟動代碼功能硬件初始化引導C代碼特征通常用匯編語言編寫程序復位運行入口點代碼量非常小程序流程設置中斷、異常入口關中斷硬件寄存器初始化(GPIO配置、總線配置、PLL時鐘)初始化棧指針數(shù)據(jù)區(qū)初始化C入口函數(shù)調用BLMainARM軟件設計與代碼分析12應用程序(無操作系統(tǒng))功能硬件驅動應用特征通常用C語言或者嵌入式匯編語言編寫程序較復雜,代碼量較大ARM軟件設計與代碼分析13bootloader功能硬件初始化引導操作系統(tǒng)下載程序(串口、網口、USB)燒寫flash特征程序復位運行入口點通常用匯編語言+C語言編寫代碼量較小ARM軟件設計與代碼分析14嵌入式操作系統(tǒng)移植LinuxWindowsCEuC/OSIIuClinuxNucleusARM軟件設計與代碼分析15BSP板級支持包功能為應用程序提供統(tǒng)一的硬件操作接口特征高度硬件相關高度依賴于具體硬件平臺各種操作系統(tǒng)各異ARM軟件設計與代碼分析16應用程序開發(fā)(操作系統(tǒng))功能GUI圖形、人機交互控制算法特征硬件依賴程度小部分可仿真調試各種操作系統(tǒng)各異ARM軟件設計與代碼分析17嵌入式軟件設計和調試流程編輯創(chuàng)建工程添加文件、編寫程序匯編語言加C語言編譯配置編譯、匯編和連接參數(shù)編寫連接腳本文件編譯調試連接調試器下載程序運行、調試固化通過仿真器燒寫flash專用或通用的編程器通過bootloader燒寫flashARM軟件設計與代碼分析18交叉編譯GNU交叉編譯編譯.carm-elf-gcc匯編.Sarm-elf-gas連接.oarm-elf-ld操作文件匯編文件.SC文件.c鏈接腳本文件ldscript庫文件.o.lib.a生成調試格式文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopyARM軟件設計與代碼分析19鏈接腳本段Text段rodata段data段bss段符號Image_RO_Limit
Image_RW_BaseImage_ZI_BaseImage_ZI_LimitGCC庫專用調試信息ARM軟件設計與代碼分析20鏈接腳本示例程序在SDRAM中運行程序在FLASH中運行ARM軟件設計與代碼分析21GCC庫GCC庫標準C函數(shù)庫lib.a-lc標準數(shù)學函數(shù)庫libm.a-lm標準函數(shù)庫的支持庫libg.a-lgGCC的支持庫libgcc.a-lgcc鏈接排列順序-lm–lc–lgcc-lgARM軟件設計與代碼分析22JXARM9-2410啟動代碼分析ARM軟件設計與代碼分析在基于ARM920Tcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復位時都從地址0x00000000開始執(zhí)行,因此在這個地址處安排的通常就是系統(tǒng)的啟動代碼。它通常也是BootLoader程序的一部分,可以在啟動代碼基礎上編寫B(tài)ootLoader。用匯編語言編寫。啟動代碼是在復位后運行其它程序之前運行的一段小程序。通過它,初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用C函數(shù)準備好正確的環(huán)境。23啟動代碼的移植和修改ARM軟件設計與代碼分析啟動代碼除了依賴于CPU的體系結構外,實際上也依賴于具體的嵌入式板級設備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設的類型等。對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構建的,如果他們的硬件資源和配置不一致的話,要想讓運行在一塊板子上的啟動代碼也能運行在另一塊板子上,也還是需要作一些必要的修改。24啟動代碼流程圖啟動代碼的功能:RAM初始化,設置各個部件的時鐘和片選,將BootLoader拷貝到RAM中,設置堆棧,調用C函數(shù)。注意:在本階段,特別是在堆棧設置之前,進行函數(shù)調用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產生不可預知的結果;ARM軟件設計與代碼分析25設置異常跳轉表復位異常直接跳轉到ResetHandler處,它是相對跳轉,位置無關。ARM軟件設計與代碼分析26關閉看門狗設置S3C2410WTCON寄存器必須設置0x01e000000x01d30000ARM軟件設計與代碼分析27設置中斷模式并禁止中斷設置S3C2410中斷寄存器設置所有一級中斷源與二級中斷源為不可用狀態(tài)ARM軟件設計與代碼分析28配置存儲器控制寄存器寬度ARM軟件設計與代碼分析0x01e00000配置值29堆棧初始化ARM軟件設計與代碼分析30C代碼初始化ARM軟件設計與代碼分析拷貝RW數(shù)據(jù)段ZI段清零跳轉到Main函數(shù)處執(zhí)行31JXARM9-2410BOOTLOADER分析ARM軟件設計與代碼分析BootLoader是在啟動代碼的基礎之上,通常啟動代碼包含于BootLoader之中BootLoader常用于引導操作系統(tǒng)或者應用程序BootLoader可以包含一些簡單的調試手段JXARM9-2410使用通用的u-boot32u-boot簡介ARM軟件設計與代碼分析u-boot是由德國DENX小組開發(fā)的交叉平臺BootLoader,其全稱為“universalBootLoader”。u-boot的開發(fā)目標是支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。它提供數(shù)百種嵌入式開發(fā)板和各種CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同時它除了支持Linux系統(tǒng)的引導外,還支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多種嵌入式操作系統(tǒng)的引導。33u-boot簡介ARM軟件設計與代碼分析u-boot的用戶接口類似于Linux的shell界面,通過串口連接以后,用戶可以交互式的輸入命令和看到結果,u-boot的啟動界面如下所示:U-Boot1.1.1(Sep62004-12:12:06)U-Bootcode:33F80000->33F9CED0BSS:->33FA116CRAMConfiguration:Bank#0:3000000064MBFlash:32MBIn:serialOut:serialErr:serialHitanykeytostopautoboot:0JX2410#34BootLoader的基本概念BootLoader是系統(tǒng)加電后運行的第一段軟件代碼。嵌入式系統(tǒng)中,整個系統(tǒng)的加載啟動任務完全由BootLoader來完成。比如在一個基于ARM920Tcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復位時都從地址0x00000000開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。簡單地說,BootLoader就是在操作系統(tǒng)內核或用戶應用程序運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核或用戶應用程序準備好正確的環(huán)境。通常,BootLoader
是依賴于硬件而實現(xiàn)的,特別是在嵌入式領域,為嵌入式系統(tǒng)建立一個通用的BootLoader
是很困難的。ARM軟件設計與代碼分析35BootLoader的移植和修改BootLoader除了依賴于CPU的體系結構外,BootLoader
實際上也依賴于具體的嵌入式板級設備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設的類型等。對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構建的,如果他們的硬件資源和配置不一致的話,要想讓運行在一塊板子上的BootLoader程序也能運行在另一塊板子上,也還是需要作一些必要的修改。ARM軟件設計與代碼分析36BootLoader的安裝系統(tǒng)加電或復位后,所有的CPU通常都從CPU制造商預先安排的地址上取指令。比如,S3C2410在復位時都從地址0x00000000取它的第一條指令。嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設備(比如:ROM、EEPROM或FLASH等)被安排這個起始地址上,因此在系統(tǒng)加電后,CPU將首先執(zhí)行BootLoader程序。也就是說對于基于S3C2410的這套系統(tǒng),我們的BootLoader是從0地址開始存放的,而這塊起始地址需要采用可引導的固態(tài)存儲設備如FLASH。ARM軟件設計與代碼分析37用來控制BootLoader的設備或機制串口通訊是最簡單也是最廉價的一種雙機通訊設備,所以往往在BootLoader中主機和目標機之間都通過串口建立連接,BootLoader
程序在執(zhí)行時通常會通過串口來進行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。當然如果認為串口通訊速度不夠,也可以采用網絡或者USB通訊,那么相應的在BootLoader中就需要編寫各自的驅動。ARM軟件設計與代碼分析38BootLoader的操作模式啟動加載模式:這種模式也稱為"自主"(Autonomous)模式。也即BootLoader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入。這種模式是BootLoader的正常工作模式。下載模式:在這種模式下,目標機上的BootLoader將通過串口連接或網絡連接等通信手段從主機下載文件,比如:下載應用程序、數(shù)據(jù)文件、內核映像等。從主機下載的文件通常首先被BootLoader保存到目標機的RAM中,然后再被BootLoader寫到目標機上的固態(tài)存儲設備中。BootLoader
的這種模式通常在系統(tǒng)更新時使用。工作于這種模式下的BootLoader
通常都會向它的終端用戶提供一個簡單的命令行接口。在uboot中可以通過修改環(huán)境變量實現(xiàn)自主模式。ARM軟件設計與代碼分析39BootLoader與主機間文件傳輸?shù)耐ㄐ旁O備及協(xié)議最常見的情況就是,目標機上的BootLoader
通過串口與主機之間進行文件傳輸,傳輸可以簡單的采用直接數(shù)據(jù)收發(fā),當然在串口上也可以采用xmodem/ymodem/zmodem
協(xié)議以及在以太網上采用TFTP協(xié)議。ARM軟件設計與代碼分析40BootLoader的主要任務與典型結構框架從操作系統(tǒng)的角度看,BootLoader的總目標就是正確地調用內核來執(zhí)行。大多數(shù)BootLoader都分為stage1和stage2兩大部分。依賴于CPU體系結構的代碼,比如設備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍的目的,也就是前面說的啟動代碼。而stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復雜的功能,而且代碼會具有更好的可讀性和可移植性。ARM軟件設計與代碼分析41BootLoader的主要任務與典型結構框架BootLoader的stage1通常包括以下步驟 為加載BootLoader
的stage2準備RAM空間拷貝BootLoader
的stage2到RAM空間中設置好堆棧跳轉到stage2的C入口點BootLoader的stage2通常包括以下步驟初始化本階段要使用到的硬件設備調用應用程序或啟動內核ARM軟件設計與代碼分析42Stage1初始化流程圖stage1的功能:RAM初始化,設置各個部件的時鐘和片選,將BootLoader拷貝到RAM中,設置堆棧,調用Stage2。注意:在本階段,特別是在堆棧設置之前,進行函數(shù)調用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產生不可預知的結果;ARM軟件設計與代碼分析43Stage2流程圖stage2的功能: 初始化串口,顯示菜單,通過控制臺獲取用戶輸入,并執(zhí)行相應的命令操作。ARM軟件設計與代碼分析44板級支持包ARM軟件設計與代碼分析BSP(板級支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層次,它完成系統(tǒng)上電后最初的硬件和軟件初始化,并對底層硬件進行封裝,使得操作系統(tǒng)不再面對具體的操作。45板級支持包的特點ARM軟件設計與代碼分析硬件相關性:因為嵌入式實時系統(tǒng)的硬件環(huán)境具有應用相關性,所以,作為高層軟件與硬件之間的接口,BSP必須為操作系統(tǒng)提供操作和控制具體硬件的方法。操作系統(tǒng)相關性:不同的操作系統(tǒng)具有各自的軟件層次結構,因此,不同的操作系統(tǒng)具有特定的硬件接口形式。46板級支持包的功能ARM軟件設計與代碼分析47板級支持包的功能ARM軟件設計與代碼分析嵌入式系統(tǒng)初始化片級初始化板級初始化系統(tǒng)級初始化硬件相關的設備驅動程序和BootLoader存在一定的重疊48系統(tǒng)級初始化ARM軟件設計與代碼分析這是一個以軟件初始化為主的過程,主要進行操作系統(tǒng)初始化。BSP將控制轉交給操作系統(tǒng),由操作系統(tǒng)進行余下的初始化操作。包括加載和初始化與硬件無關的設備驅動程序,建立系統(tǒng)內存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網絡系統(tǒng)、文件系統(tǒng)等;最后,操作系統(tǒng)創(chuàng)建應用程序環(huán)境并將控制轉交給應用程序的入口。49硬件相關的驅動程序ARM軟件設計與代碼分析與初始化過程相反,硬件相關的設備驅動程序的初始化和使用通常是一個從高層到底層的過程。盡管BSP中包含硬件相關的設備驅動程序,但是這些設備驅動程序通常不直接由BSP使用,而是在系統(tǒng)初始化過程中由BSP把它們與操作系統(tǒng)中通用的設備驅動程序關聯(lián)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 收銀入職協(xié)議書(2篇)
- 2024年版行政協(xié)議性質深度剖析版B版
- 2024年版5G網絡覆蓋建設合同
- 2025土地抵押貸款合同
- 2024年標準勞動協(xié)議終止書樣例一
- 商務區(qū)混凝土路面鋪設協(xié)議
- 租賃聯(lián)盟保證金協(xié)議書
- 2025搬運承包合同
- 2025版合同:工程建設招標投標合同(合同協(xié)議書)
- 手機連鎖店網絡布線合同
- GB 31247-2014電纜及光纜燃燒性能分級
- 斯倫貝謝智能完井工具介紹
- 主要農作物(糧食作物)課件
- 百詞斬-定語從句課件-(;)
- 珍惜時間主題班會-做時間的主人課件
- 市政工程施工總體部署
- 護士準入申請表
- 三年級上冊英語課件-Unit3 Look at me-人教(PEP) (6)(共30張PPT)
- 糖皮質激素在呼吸科的應用課件
- 合法離婚協(xié)議書(2篇)
- 2022年廣東南方報業(yè)傳媒集團有限公司招聘筆試題庫及答案解析
評論
0/150
提交評論