24小時(shí)聯(lián)系電話:18217114652、13661815404
中文
技術(shù)專題
嵌入式軟件開發(fā)
嵌入式軟件開發(fā)
什么是嵌入式軟件開發(fā)?
“嵌入式軟件”是一種程序,用于控制與通用計(jì)算機(jī)不同的各種設(shè)備和機(jī)器。非計(jì)算機(jī)設(shè)備和工程技術(shù)的結(jié)合形成了嵌入式系統(tǒng)。如今,嵌入式系統(tǒng)在制造設(shè)備,音頻/視頻設(shè)備,電信設(shè)備,汽車工業(yè),航空,消費(fèi)類電子產(chǎn)品,游戲機(jī),運(yùn)動(dòng)傳感器和醫(yī)學(xué)等各個(gè)領(lǐng)域都非常流行(如圖1所示)。
要設(shè)計(jì)嵌入式系統(tǒng),需要具有操作系統(tǒng),微控制器/微處理器和良好的編程工具。要為嵌入式系統(tǒng)編寫程序,可以使用多種語言,包括Python,QT,C ++,C等。嵌入式軟件開發(fā)可以定義為創(chuàng)建機(jī)器可理解的代碼(使用任何可用的語言)來運(yùn)行設(shè)備上的特定用途。
圖1:嵌入式系統(tǒng)的應(yīng)用
嵌入式軟件開發(fā)的歷
微控制器和微處理器的興起在嵌入式系統(tǒng)的開發(fā)中起著至關(guān)重要的作用。在過去的幾年中,嵌入式軟件的發(fā)展經(jīng)歷了許多變化。
在早期,仿真器和匯編器,軟件開發(fā)工具僅由生產(chǎn)芯片(微控制器)的制造商提供。后來,許多不同的公司開始為開發(fā)工具提供完整的解決方案。一些公司只專注于微控制器之類的硬件,而另一些公司則將重心轉(zhuǎn)移到了諸如匯編器,仿真器和模擬器之類的軟件上。然后,一些公司介入并增加了對(duì)高級(jí)語言的支持。
隨著時(shí)間的流逝,出現(xiàn)了對(duì)實(shí)時(shí)操作系統(tǒng)(RTOS)的需求,并且公司將重點(diǎn)轉(zhuǎn)移到了這種系統(tǒng)上。Ready Systems在1990年代初開發(fā)了第一個(gè)RTOS。導(dǎo)致RTOS發(fā)展的另一個(gè)主要因素是微芯片的發(fā)展,芯片的功能變得比以前更強(qiáng)大。隨著微芯片的發(fā)展,工程師可以為特定應(yīng)用編寫單個(gè)程序??梢詫⒊绦蚣虞d到設(shè)備中,并且設(shè)備可以根據(jù)輸入來處理實(shí)時(shí)數(shù)據(jù)并做出輸出控制決策。
隨著更多的進(jìn)步,微芯片的成本也降低了幾美分?,F(xiàn)在,我們每天都可以找到嵌入式系統(tǒng),甚至無法想象它們對(duì)于我們?nèi)粘;顒?dòng)的重要性。我們可以在兒童玩具,電風(fēng)扇,烤面包機(jī),微波爐,空調(diào)等中找到嵌入式系統(tǒng)。
嵌入式軟件開發(fā)工具
嵌入式軟件開發(fā)工具對(duì)于開發(fā)嵌入式設(shè)備的高效軟件非常重要??梢允褂枚喾N工具來實(shí)現(xiàn)此目的。這些工具的詳細(xì)信息在此處列出。
編輯
編輯器是軟件開發(fā)中最重要的工具之一。該工具可用于以不同的編程語言(包括C,C ++,Python和Java)編寫和編輯代碼。可以使用不同的編輯器,這些編輯器是免費(fèi)軟件,并且附帶價(jià)格。選擇編輯器時(shí)可能要考慮的另一件事是它的環(huán)境,輕量級(jí)是更好的選擇。一些編輯器包括Notepad ++,Atom,Visual Studio,NetBeans,Kite和Geany。良好的編輯器必須具備以下功能。
突出顯示語法
代碼導(dǎo)航
自動(dòng)縮進(jìn)代碼
自動(dòng)完成代碼
行號(hào)
定期自動(dòng)保存
注釋多行
概述代碼(包括功能,庫)
突出顯示警告和錯(cuò)誤
編譯器
在最近的發(fā)展之后,源代碼是用高級(jí)語言編寫的。編譯器用于將高級(jí)代碼轉(zhuǎn)換為機(jī)器可以理解的低級(jí)代碼。然后,機(jī)器可以使用翻譯后的代碼執(zhí)行所需的任務(wù)。有各種可用的編譯器,其中一些是Visual Studio,Eclipse,NetBeans,MATLAB,Arduino和Keil。
組裝工
匯編程序幾乎達(dá)到了與編譯器相同的目的,但是還有一段距離。匯編程序?qū)⒏呒?jí)代碼轉(zhuǎn)換為目標(biāo)代碼,同時(shí)將高級(jí)代碼轉(zhuǎn)換為操作碼并解析內(nèi)存位置。然后,它將目標(biāo)代碼或匯編代碼轉(zhuǎn)換為通常稱為機(jī)器語言代碼的位級(jí)指令。GNU是用于此目的的常見匯編程序之一。
調(diào)試器
就錯(cuò)誤跟蹤而言,它是最關(guān)鍵的工具。它通過指示和突出顯示錯(cuò)誤和警告(在發(fā)生的地方)來幫助開發(fā)人員跟蹤錯(cuò)誤。調(diào)試器提供的另一個(gè)功能是逐步調(diào)試。這樣,開發(fā)人員可以通過執(zhí)行代碼的每一行并監(jiān)視其執(zhí)行狀態(tài)來跟蹤錯(cuò)誤。上面列出的大多數(shù)編譯器都包含調(diào)試器,但最常見的調(diào)試器是IDA Pro。該工具在Linux和Windows上均可用。
連結(jié)器
在嵌入式系統(tǒng)中,程序通常以小塊或模塊的形式編寫。要將所有模塊鏈接在一起,請(qǐng)使用鏈接器工具。這將所有模塊作為輸入,將它們組合在一起,并制作一個(gè)信號(hào)可執(zhí)行程序。它還可以組合使用不同編程語言創(chuàng)建的目標(biāo)文件,并將它們合并為一個(gè)可執(zhí)行文件(如圖2所示)。GNU鏈接器是最常見的鏈接器之一。
圖2:鏈接來自不同編程語言的不同對(duì)象
仿真器
在使用實(shí)際設(shè)備之前,在復(fù)制目標(biāo)設(shè)備的工具上測(cè)試程序很重要。為此,使用了仿真器。仿真器提供目標(biāo)設(shè)備的組件和功能的副本。這樣,開發(fā)人員可以輕松識(shí)別在實(shí)際設(shè)備上執(zhí)行代碼時(shí)可能發(fā)生的任何問題。通過使用仿真器,開發(fā)人員可以調(diào)整代碼參數(shù)以實(shí)現(xiàn)目標(biāo)設(shè)備的最佳性能。優(yōu)化代碼性能后,可以將其部署在實(shí)際設(shè)備上。
開發(fā)人員很難為項(xiàng)目使用所有不同的工具。因此,為此目的,重要的是要在一個(gè)通常稱為集成開發(fā)環(huán)境(IDE)的單一環(huán)境中獲得所有工具。IDE是一種工具,為嵌入式軟件的開發(fā)提供了所有必要的工具。
嵌入式軟件語言
在嵌入式系統(tǒng)中,使用實(shí)時(shí)操作系統(tǒng),以便可以同時(shí)執(zhí)行多個(gè)任務(wù)。嵌入式軟件使用不同的語言進(jìn)行編程,這些語言通常包括Java腳本,Python和C / C ++。所有語言都可以使用不同的操作系統(tǒng)進(jìn)行處理,這些操作系統(tǒng)可能包括Windows,Linux,micro C / OS,Nucleus RTOS等。但是,編程語言的選擇是嵌入式軟件開發(fā)的關(guān)鍵步驟,這取決于不同的因素。這里列出了一些關(guān)鍵參數(shù):
內(nèi)存大?。呵度胧皆O(shè)備的內(nèi)存非常有限,用于存儲(chǔ)數(shù)據(jù)和代碼。因此,擁有可以有效利用內(nèi)存的代碼很重要。
速度:希望程序能夠快速執(zhí)行。因此,需要為特定的應(yīng)用選擇正確的編程語言。
可移植性:我們?cè)诓煌墓ぷ鞯攸c(diǎn)沒有相同的編譯器。因此,編程語言必須能夠在不同的處理器上執(zhí)行。
實(shí)現(xiàn):編程語言必須具有更簡(jiǎn)單的語法,并且出錯(cuò)的可能性很小。
維護(hù):語言的維護(hù)應(yīng)該很容易,因?yàn)檎{(diào)試舊代碼可能是一項(xiàng)繁瑣的任務(wù)。
嵌入式軟件開發(fā)流程
嵌入式系統(tǒng)開發(fā)需要注意兩件事:(i)軟件開發(fā),(ii)硬件開發(fā)。Embedder軟件的開發(fā)經(jīng)歷了一個(gè)艱難的過程,因此它可能會(huì)為我們提供完美的軟件。為了實(shí)現(xiàn)此任務(wù),使用了不同的過程,其中之一就是敏捷開發(fā)方法(如圖3所示)。
圖3:嵌入式軟件開發(fā)過程
第一步是集思廣益,其中的想法需要進(jìn)行討論和完善,然后才能進(jìn)入開發(fā)階段。在第二和第三階段中,將設(shè)計(jì)和開發(fā)該系統(tǒng)。第四階段是關(guān)鍵階段,在此階段檢查開發(fā)系統(tǒng)的質(zhì)量。一旦系統(tǒng)清除了質(zhì)量檢查,便將其部署。
使用圖4所示的流程圖可以更詳細(xì)地描述“開發(fā)階段”。在圖4中,我們可以看到,開發(fā)階段可以分為兩個(gè)部分,即硬件和軟件,這兩個(gè)部分是相互關(guān)聯(lián)的。在硬件部分,為目標(biāo)系統(tǒng)完成組裝,然后執(zhí)行硬件測(cè)試,其中也包括軟件部分。在硬件鏈的末端,執(zhí)行最終測(cè)試以檢查是否達(dá)到了所需的結(jié)果。如果未達(dá)到結(jié)果,則將硬件組裝進(jìn)行更新(在大多數(shù)情況下是不需要的),并且軟件也將進(jìn)行更新以獲得所需的結(jié)果。
圖4:嵌入式軟件開發(fā)的開發(fā)階段
對(duì)于軟件開發(fā),使用了“編輯-測(cè)試-調(diào)試”方法。在這種方法中,使用了許多工具來獲得期望的結(jié)果。在軟件開發(fā)階段,使用了第3節(jié)中列出的所有工具。編輯-測(cè)試-調(diào)試周期所需的工具也可以使用下面的圖5進(jìn)行說明。
圖5:嵌入式軟件開發(fā)的“編輯-測(cè)試-調(diào)試”階段