電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 1818|回復(fù): 0
收起左側(cè)

什么是嵌入式教學(xué)法_嵌入式軟件開發(fā)流程

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-7-30 14:46:37 | 只看該作者 回帖獎勵 |正序?yàn)g覽 |閱讀模式
什么是嵌入式教學(xué)法_嵌入式軟件開發(fā)流程,   



4.3嵌入式軟件開發(fā)流程4.3.1嵌入式系統(tǒng)開發(fā)概述

由嵌入式系統(tǒng)本身的特性所影響,嵌入式系統(tǒng)開發(fā)與通用系統(tǒng)的開發(fā)有很大的區(qū)別。嵌入式系統(tǒng)的開發(fā)主要分為系統(tǒng)總體開發(fā)、嵌入式硬件開發(fā)和嵌入式軟件開發(fā)3大部分,其總體流程圖如圖4.15所示。



在系統(tǒng)總體開發(fā)中,由于嵌入式系統(tǒng)與硬件依賴非常緊密,往往某些需求只能通過特定的硬件才能實(shí)現(xiàn),因此需要進(jìn)行處理器選型,以更好地滿足產(chǎn)品的需求。另外,對于有些硬件和軟件都可以實(shí)現(xiàn)的功能,就需要在成本和性能上做出抉擇。往往通過硬件實(shí)現(xiàn)會增加產(chǎn)品的成品,但能大大提高產(chǎn)品的性能和可靠性。



再次,開發(fā)環(huán)境的選擇對于嵌入式系統(tǒng)的開發(fā)也有很大的影響。這里的開發(fā)環(huán)境包括嵌入式操作系統(tǒng)的選擇以及開發(fā)工具的選擇等。本書在4.1.5節(jié)對各種不同的嵌入式操作系統(tǒng)進(jìn)行了比較,讀者可以以此為依據(jù)進(jìn)行相關(guān)的選擇。比如,對開發(fā)成本和進(jìn)度限制較大的產(chǎn)品可以選擇嵌入式Linux,對實(shí)時性要求非常高的產(chǎn)品可以選擇Vxworks等。



由于本書主要討論嵌入式軟件的應(yīng)用開發(fā),因此對硬件開發(fā)不做詳細(xì)講解,而主要討論嵌入式軟件開發(fā)的流程。

4.3.2嵌入式軟件開發(fā)概述

嵌入式軟件開發(fā)總體流程為圖4.15中“軟件設(shè)計實(shí)現(xiàn)”部分所示,它同通用計算機(jī)軟件開發(fā)一樣,分為需求分析、軟件概要設(shè)計、軟件詳細(xì)設(shè)計、軟件實(shí)現(xiàn)和軟件測試。其中嵌入式軟件需求分析與硬件的需求分析合二為一,故沒有分開畫出。



由于在嵌入式軟件開發(fā)的工具非常多,為了更好地幫助讀者選擇開發(fā)工具,下面首先對嵌入式軟件開發(fā)過程中所使用的工具做一簡單歸納。



嵌入式軟件的開發(fā)工具根據(jù)不同的開發(fā)過程而劃分,比如在需求分析階段,可以選擇IBM的RationalRose等軟件,而在程序開發(fā)階段可以采用CodeWarrior(下面要介紹的ADS的一個工具)等,在調(diào)試階段所用的Multi-ICE等。同時,不同的嵌入式操作系統(tǒng)往往會有配套的開發(fā)工具,比如Vxworks有集成開發(fā)環(huán)境Tornado,WindowsCE的集成開發(fā)環(huán)境WindowsCEPlatform等。此外,不同的處理器可能還有對應(yīng)的開發(fā)工具,比如ARM的常用集成開發(fā)工具ADS、IAR和RealView等。在這里,大多數(shù)軟件都有比較高的使用費(fèi)用,但也可以大大加快產(chǎn)品的開發(fā)進(jìn)度,用戶可以根據(jù)需求自行選擇。圖4.16是嵌入式開發(fā)的不同階段的常用軟件。



  

圖4.15嵌入式系統(tǒng)開發(fā)流程圖

  

圖4.16嵌入式開發(fā)不同階段的常用軟件



嵌入式系統(tǒng)的軟件開發(fā)與通常軟件開發(fā)的區(qū)別主要在于軟件實(shí)現(xiàn)部分,其中又可以分為編譯和調(diào)試兩部分,下面分別對這兩部分進(jìn)行講解。

1.交叉編譯

嵌入式軟件開發(fā)所采用的編譯為交叉編譯。所謂交叉編譯就是在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼。在第3章中已經(jīng)提到,編譯的最主要的工作就在將程序轉(zhuǎn)化成運(yùn)行該程序的CPU所能識別的機(jī)器代碼,由于不同的體系結(jié)構(gòu)有不同的指令系統(tǒng)。因此,不同的CPU需要有相應(yīng)的編譯器,而交叉編譯就如同翻譯一樣,把相同的程序代碼翻譯成不同CPU的對應(yīng)可執(zhí)行二進(jìn)制文件。要注意的是,編譯器本身也是程序,也要在與之對應(yīng)的某一個CPU平臺上運(yùn)行。嵌入式系統(tǒng)交叉編譯環(huán)境如圖4.17所示。



小知識

與交叉編譯相對應(yīng),平時常用的編譯稱為本地編譯。



這里一般將進(jìn)行交叉編譯的主機(jī)稱為宿主機(jī),也就是普通的通用PC,而將程序?qū)嶋H的運(yùn)行環(huán)境稱為目標(biāo)機(jī),也就是嵌入式系統(tǒng)環(huán)境。由于一般通用計算機(jī)擁有非常豐富的系統(tǒng)資源、使用方便的集成開發(fā)環(huán)境和調(diào)試工具等,而嵌入式系統(tǒng)的系統(tǒng)資源非常緊缺,無法在其上運(yùn)行相關(guān)的編譯工具,因此,嵌入式系統(tǒng)的開發(fā)需要借助宿主機(jī)(通用計算機(jī))來編譯出目標(biāo)機(jī)的可執(zhí)行代碼。

  



由于編譯的過程包括編譯、鏈接等幾個階段,因此,嵌入式的交叉編譯也包括交叉編譯、交叉鏈接等過程,通常ARM的交叉編譯器為arm-elf-gcc、arm-linux-gcc等,交叉鏈接器為arm-elf-ld、arm-linux-ld等,交叉編譯過程如圖4.18所示。

  

2.交叉調(diào)試

嵌入式軟件經(jīng)過編譯和鏈接后即進(jìn)入調(diào)試階段,調(diào)試是軟件開發(fā)過程中必不可少的一個環(huán)節(jié),嵌入式軟件開發(fā)過程中的交叉調(diào)試與通用軟件開發(fā)過程中的調(diào)試方式有很大的差別。在常見軟件開發(fā)中,調(diào)試器與被調(diào)試的程序往往運(yùn)行在同一臺計算機(jī)上,調(diào)試器是一個單獨(dú)運(yùn)行著的進(jìn)程,它通過操作系統(tǒng)提供的調(diào)試接口來控制被調(diào)試的進(jìn)程。而在嵌入式軟件開發(fā)中,調(diào)試時采用的是在宿主機(jī)和目標(biāo)機(jī)之間進(jìn)行的交叉調(diào)試,調(diào)試器仍然運(yùn)行在宿主機(jī)的通用操作系統(tǒng)之上,但被調(diào)試的進(jìn)程卻是運(yùn)行在基于特定硬件平臺的嵌入式操作系統(tǒng)中,調(diào)試器和被調(diào)試進(jìn)程通過串口或者網(wǎng)絡(luò)進(jìn)行通信,調(diào)試器可以控制、訪問被調(diào)試進(jìn)程,讀取被調(diào)試進(jìn)程的當(dāng)前狀態(tài),并能夠改變被調(diào)試進(jìn)程的運(yùn)行狀態(tài)。



嵌入式系統(tǒng)的交叉調(diào)試有多種方法,主要可分為軟件方式和硬件方式兩種。它們一般都具有如下一些典型特點(diǎn)。



n 調(diào)試器和被調(diào)試進(jìn)程運(yùn)行在不同的機(jī)器上,調(diào)試器運(yùn)行在PC機(jī)(宿主機(jī)),而被調(diào)試的進(jìn)程則運(yùn)行在各種專業(yè)調(diào)試板上(目標(biāo)板)。

n 調(diào)試器通過某種通信方式(串口、并口、網(wǎng)絡(luò)、JTAG等)控制被調(diào)試進(jìn)程。

n 在目標(biāo)機(jī)上一般會具備某種形式的調(diào)試代理,它負(fù)責(zé)與調(diào)試器共同配合完成對目標(biāo)機(jī)上運(yùn)行著的進(jìn)程的調(diào)試。這種調(diào)試代理可能是某些支持調(diào)試功能的硬件設(shè)備,也可能是某些專門的調(diào)試軟件(如gdbserver)。

n 目標(biāo)機(jī)可能是某種形式的系統(tǒng)仿真器,通過在宿主機(jī)上運(yùn)行目標(biāo)機(jī)的仿真軟件,整個調(diào)試過程可以在一臺計算機(jī)上運(yùn)行。此時物理上雖然只有一臺計算機(jī),但邏輯上仍然存在著宿主機(jī)和目標(biāo)機(jī)的區(qū)別。



下面分別就軟件調(diào)試樁方式和硬件片上調(diào)試兩種方式進(jìn)行詳細(xì)介紹。

(1)軟件方式。

軟件調(diào)試主要是通過插入調(diào)試樁的方式來進(jìn)行的。調(diào)試樁方式進(jìn)行調(diào)試是通過目標(biāo)操作系統(tǒng)和調(diào)試器內(nèi)分別加入某些功能模塊,二者互通信息來進(jìn)行調(diào)試。該方式的典型調(diào)試器有g(shù)db調(diào)試器。



gdb的交叉調(diào)試器分為GdbServer和GdbClient,其中的GdbServer就作為調(diào)試樁在安裝在目標(biāo)板上,GdbClient就是駐于本地的gdb調(diào)試器。它們的調(diào)試原理圖如圖4.19所示。

  



gdb調(diào)試的工作流程。

n 首先,建立調(diào)試器(本地gdb)與目標(biāo)操作系統(tǒng)的通信連接,可通過串口、網(wǎng)卡、并口等多種方式。

n 然后,在目標(biāo)機(jī)上開啟GdbServer進(jìn)程,并監(jiān)聽對應(yīng)端口。

n 在宿主機(jī)上運(yùn)行調(diào)試器gdb,這時,gdb就會自動尋找遠(yuǎn)端的通信進(jìn)程,也就是GdbServer的所在進(jìn)程。

n 在宿主機(jī)上的gdb通過GdbServer請求對目標(biāo)機(jī)上的程序發(fā)出控制命令。這時,GdbServer將請求轉(zhuǎn)化為程序的地址空間或目標(biāo)平臺的某些寄存器的訪問,這對于沒有虛擬存儲器的簡單的嵌入式操作系統(tǒng)而言,是十分容易的。

n GdbServer把目標(biāo)操作系統(tǒng)的所有異常處理轉(zhuǎn)向通信模塊,并告知宿主機(jī)上gdb當(dāng)前有異常。

n 宿主機(jī)上的gdb向用戶顯示被調(diào)試程序產(chǎn)生了哪一類異常。



這樣就完成了調(diào)試的整個過程。這個方案的實(shí)質(zhì)是用軟件接管目標(biāo)機(jī)的全部異常處理及部分中斷處理,并在其中插入調(diào)試端口通信模塊,與主機(jī)的調(diào)試器進(jìn)行交互。但是它只能在目標(biāo)機(jī)系統(tǒng)初始化完畢、調(diào)試通信端口初始化完成后才能起作用,因此,一般只能用于調(diào)試運(yùn)行于目標(biāo)操作系統(tǒng)之上的應(yīng)用程序,而不宜用來調(diào)試目標(biāo)操作系統(tǒng)的內(nèi)核代碼及啟動代碼。而且,它必須改變目標(biāo)操作系統(tǒng),因此,也就多了一個不用于正式發(fā)布的調(diào)試版。



(2)硬件調(diào)試。

相對于軟件調(diào)試而言,使用硬件調(diào)試器可以獲得更強(qiáng)大的調(diào)試功能和更優(yōu)秀的調(diào)試性能。硬件調(diào)試器的基本原理是通過仿真硬件的執(zhí)行過程,讓開發(fā)者在調(diào)試時可以隨時了解到系統(tǒng)的當(dāng)前執(zhí)行情況。目前嵌入式系統(tǒng)開發(fā)中最常用到的硬件調(diào)試器是ROMMonitor、ROMEmulator、In-CircuitEmulator和In-CircuitDebugger。



n 采用ROMMonitor方式進(jìn)行交叉調(diào)試需要在宿主機(jī)上運(yùn)行調(diào)試器,在宿主機(jī)上運(yùn)行ROM監(jiān)視器(ROMMonitor)和被調(diào)試程序,宿主機(jī)通過調(diào)試器與目標(biāo)機(jī)上的ROM監(jiān)視器遵循遠(yuǎn)程調(diào)試協(xié)議建立通信連接。ROM監(jiān)視器可以是一段運(yùn)行在目標(biāo)機(jī)ROM上的可執(zhí)行程序,也可以是一個專門的硬件調(diào)試設(shè)備,它負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行情況,能夠與宿主機(jī)端的調(diào)試器一同完成對應(yīng)用程序的調(diào)試。



在使用這種調(diào)試方式時,被調(diào)試程序首先通過ROM監(jiān)視器下載到目標(biāo)機(jī),然后在ROM監(jiān)視器的監(jiān)控下完成調(diào)試。

優(yōu)點(diǎn):ROM監(jiān)視器功能強(qiáng)大,能夠完成設(shè)置斷點(diǎn)、單步執(zhí)行、查看寄存器、修改內(nèi)存空間等各項(xiàng)調(diào)試功能。

確定:同軟件調(diào)試一樣,使用ROM監(jiān)視器目標(biāo)機(jī)和宿主機(jī)必須建立通信連接。

其原理圖如圖4.20所示。

  



n 采用ROMEmulator方式進(jìn)行交叉調(diào)試時需要使用ROM仿真器,并且它通常被插入到目標(biāo)機(jī)上的ROM插槽中,專門用于仿真目標(biāo)機(jī)上的ROM芯片。

在使用這種調(diào)試方式時,被調(diào)試程序首先下載到ROM仿真器中,因此等效于下載到目標(biāo)機(jī)的ROM芯片上,然后在ROM仿真器中完成對目標(biāo)程序的調(diào)試。



優(yōu)點(diǎn):避免了每次修改程序后都必須重新燒寫到目標(biāo)機(jī)的ROM中。

缺點(diǎn):ROM仿真器本身比較昂貴,功能相對來講又比較單一,只適應(yīng)于某些特定場合。



其原理如圖4.21所示。

n 采用In-CircuitEmulator(ICE)方式進(jìn)行交叉調(diào)試時需要使用在線仿真器,它是目前最為有效的嵌入式系統(tǒng)的調(diào)試手段。它是仿照目標(biāo)機(jī)上的CPU而專門設(shè)計的硬件,可以完全仿真處理器芯片的行為。仿真器與目標(biāo)板可以通過仿真頭連接,與宿主機(jī)可以通過串口、并口、網(wǎng)線或USB口等連接方式。由于仿真器自成體系,所以調(diào)試時既可以連接目標(biāo)板,也可以不連接目標(biāo)板。



  



在線仿真器提供了非常豐富的調(diào)試功能。在使用在線仿真器進(jìn)行調(diào)試的過程中,可以按順序單步執(zhí)行,也可以倒退執(zhí)行,還可以實(shí)時查看所有需要的數(shù)據(jù),從而給調(diào)試過程帶來了很多的便利。嵌入式系統(tǒng)應(yīng)用的一個顯著特點(diǎn)是與現(xiàn)實(shí)世界中的硬件直接相關(guān),并存在各種異變和事先未知的變化,從而給微處理器的指令執(zhí)行帶來各種不確定因素,這種不確定性在目前情況下只有通過在線仿真器才有可能發(fā)現(xiàn)。



優(yōu)點(diǎn):功能強(qiáng)大,軟硬件都可做到完全實(shí)時在線調(diào)試。

缺點(diǎn):價格昂貴。

其原理如圖4.22所示。

  



n 采用In-CircuitDebugger(ICD)方式進(jìn)

行交叉調(diào)試時需要使用在線調(diào)試器。由于ICE的價格非常昂貴,并且每種CPU都需要一種與之對應(yīng)的ICE,使得開發(fā)成本非常高。一個比較好的解決辦法是讓CPU直接在其內(nèi)部實(shí)現(xiàn)調(diào)試功能,并通過在開發(fā)板上引出的調(diào)試端口發(fā)送調(diào)試命令和接收調(diào)試信息,完成調(diào)試過程。如使用非常廣泛的ARM處理器的JTAG端口技術(shù)就是由此而誕生的。



JTAG是1985年指定的檢測PCB和IC芯片的一個標(biāo)準(zhǔn)。1990年被修改成為IEEE的一個標(biāo)準(zhǔn),即IEEE1149.1。JTAG標(biāo)準(zhǔn)所采用的主要技術(shù)為邊界掃描技術(shù),它的基本思想就是在靠近芯片的輸入輸出管腳上增加一個移位寄存器單元。因?yàn)檫@些移位寄存器單元都分布在芯片的邊界上(周圍),所以被稱為邊界掃描寄存器(Boundary-ScanRegisterCell)。



當(dāng)芯片處于調(diào)試狀態(tài)時候,這些邊界掃描寄存器可以將芯片和外圍的輸入輸出隔離開來。通過這些邊界掃描寄存器單元,可以實(shí)現(xiàn)對芯片輸入輸出信號的觀察和控制。對于芯片的輸入管腳,可通過與之相連的邊界掃描寄存器單元把信號(數(shù)據(jù))加載到該管腳中去;對于芯片的輸出管腳,可以通過與之相連的邊界掃描寄存器單元“捕獲”(CAPTURE)該管腳的輸出信號。這樣,邊界掃描寄存器提供了一個便捷的方式用于觀測和控制所需要調(diào)試的芯片。



現(xiàn)在較為高檔的微處理器都帶有JTAG接口,包括ARM7、ARM9、StrongARM、DSP等,通過JTAG接口可以方便地對目標(biāo)系統(tǒng)進(jìn)行測試,同時,還可以實(shí)現(xiàn)Flash編程,這是非常受歡迎的。



優(yōu)點(diǎn):連接簡單,成本低。

缺點(diǎn):特性受制于芯片廠商。

其原理如圖4.23所示。



回復(fù)

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表