漆震云
摘要:文章從學(xué)習(xí)嵌入式系統(tǒng)開發(fā)所需要具備的計(jì)算機(jī)專業(yè)理論基礎(chǔ)、硬件和軟件方面的基本知識(shí)、基本技能和基本方法入手,從軟件工程方法角度提出嵌入式系統(tǒng)開發(fā)方法及其工程應(yīng)用,為構(gòu)建嵌入式系統(tǒng)開發(fā)人員智能結(jié)構(gòu)基礎(chǔ)做了一些有益的探索。
關(guān)鍵詞:嵌入式系統(tǒng);開發(fā)方法;智能結(jié)構(gòu)
嵌入式系統(tǒng)是以單個(gè)或幾個(gè)特定功能程序加上相關(guān)操作系統(tǒng)存儲(chǔ)在ROM中的、以實(shí)現(xiàn)特定控制功能為目的的專用的嵌入式處理器控制單元。嵌入式系統(tǒng)的開發(fā)設(shè)計(jì)與實(shí)現(xiàn)以計(jì)算機(jī)專業(yè)技術(shù)和相關(guān)應(yīng)用領(lǐng)域?qū)I(yè)知識(shí)為基礎(chǔ),通過(guò)以嵌入式處理器為核心的硬件與軟件有機(jī)結(jié)合、優(yōu)勢(shì)互補(bǔ)的專門設(shè)計(jì),滿足特定應(yīng)用項(xiàng)目對(duì)控制功能、外形尺寸、功率損耗、經(jīng)濟(jì)成本、可靠性等方面的特殊需求。
ARM+Linux是目前比較流行的嵌入式系統(tǒng)開發(fā)組合模式,從硬件方面,需要學(xué)習(xí)ARM接口電路設(shè)計(jì)和C語(yǔ)言的板級(jí)編程,從軟件方面,需要學(xué)習(xí)ARM處理器的操作系統(tǒng)層面的驅(qū)動(dòng)與移植。
本文從學(xué)習(xí)嵌入式系統(tǒng)開發(fā)需要具備的計(jì)算機(jī)專業(yè)理論基礎(chǔ)、硬件和軟件方面的基本知識(shí)、基本技能和基本方法入手,從軟件工程方法角度提出嵌入式系統(tǒng)開發(fā)方法及其工程應(yīng)用。
1 嵌入式軟件開發(fā)需要具備的知識(shí)
1.1 理論基礎(chǔ)方面的基本知識(shí)與基本技能
嵌入式軟件開發(fā)需要具備理論基礎(chǔ)知識(shí)方面包括以下內(nèi)容。
(1)理論基礎(chǔ)知識(shí)。微機(jī)原理及接口技術(shù)、單片機(jī)原理及接口技術(shù)等。(2)嵌入式專業(yè)基礎(chǔ)知識(shí)。單片機(jī)包括STM32, MSP430, AVR等。嵌入式FPGA:邏輯設(shè)計(jì)、協(xié)議轉(zhuǎn)換、算法設(shè)計(jì)等。嵌入式DSP:DSP算法開發(fā)、DSP驅(qū)動(dòng)開發(fā)等。嵌入式ARM:系統(tǒng)內(nèi)核、驅(qū)動(dòng)開發(fā)、應(yīng)用開發(fā)、bootloader開發(fā)等。(3)嵌入式專業(yè)應(yīng)用基礎(chǔ)知識(shí)。信號(hào)多媒體領(lǐng)域應(yīng)用基礎(chǔ)知識(shí)包括音頻、視頻和圖像等;通信領(lǐng)域應(yīng)用基礎(chǔ)知識(shí)包括通信原理、隨機(jī)信號(hào)自適應(yīng)等;控制領(lǐng)域應(yīng)用基礎(chǔ)知識(shí)包括控制原理、人工智能、機(jī)器學(xué)習(xí)等。
1.2 硬件方面的基本知識(shí)與基本技能
嵌入式軟件開發(fā)需要具備硬件方面的基本知識(shí)與基本技能包括以下內(nèi)容。
(1)電路與電子技術(shù)基礎(chǔ):電路分析基礎(chǔ)、模擬電子技術(shù)、數(shù)字電子技術(shù)、微處理器技術(shù)、電子元器件基本知識(shí)。(2)電路圖識(shí)圖與制圖。(3)PCB基礎(chǔ):PCB制圖、PCB加工工藝等。(4)高速信號(hào)電路與電源等。
嵌入式系統(tǒng)開發(fā)需要具備硬件方面的基礎(chǔ)知識(shí)與基本技能主要包括嵌入式微處理器的體系結(jié)構(gòu)和硬件總線接口。嵌入式處理器的體系結(jié)構(gòu)既可以采用馮·諾依曼體系結(jié)構(gòu),也可以采用哈佛體系結(jié)構(gòu)。指令系統(tǒng)既可以選用精簡(jiǎn)指令系統(tǒng)(Reduced Instruction Set Computer,RISC),也可以選用復(fù)雜指令系統(tǒng)(Complex Instruction Set Computer,CISC)。RISC由于在數(shù)據(jù)通道中只包含最有用的指令,可以確保指令的快速執(zhí)行,從而節(jié)約了指令執(zhí)行時(shí)間、提高了指令執(zhí)行效率,并使得嵌入式系統(tǒng)硬件設(shè)計(jì)更加簡(jiǎn)捷。
目前應(yīng)用比較廣泛的嵌入式處理器包括ARM,MIPS,PowerPC,DSP等,建議首先以目前主要流行的嵌入式處理器的一種,作為入門性學(xué)習(xí),從而掌握嵌入式處理器的基本知識(shí)與基本技能,然后根據(jù)學(xué)習(xí)和工作需要,再進(jìn)行針對(duì)性的強(qiáng)化學(xué)習(xí)和補(bǔ)充,采取精通一個(gè),觸類旁通的學(xué)習(xí)方法。需要預(yù)先學(xué)習(xí)微機(jī)原理、單片機(jī)原理作為基礎(chǔ)。
嵌入式處理器的硬件總線接口基本知識(shí)與基本技能,目前主要流行的嵌入式處理器的硬件總線接口包括模/數(shù)(Analog to Digit,A/D)轉(zhuǎn)換接口、數(shù)/模(Digit to Analog,D/A)轉(zhuǎn)換接口,I/O接口包括RS-232串行通信接口、Ethernet以太網(wǎng)接口、USB通用串行總線接口、SPI串行外圍設(shè)備接口、Audio音頻接口、VGA視頻輸出接口、IrDA紅外線接口、IIC集成電路總線、UART通用異步串行總線接口、MDIO管理數(shù)據(jù)輸入輸出串行總線接口等。
各種外部設(shè)備都必須通過(guò)硬件總線接口與嵌入式微處理器監(jiān)控系統(tǒng)進(jìn)行物理連接,熟悉和掌握各種硬件總線接口基本知識(shí)與基本技能,對(duì)于嵌入式驅(qū)動(dòng)軟件的開發(fā)具有極其重要的意義。
1.3 軟件方面的基本知識(shí)與基本技能
⑴工具類包括C語(yǔ)言,C++語(yǔ)言(Qt,MFC), Python,Matlab,LabVIEW等。(2)程序類包括程序算法、數(shù)據(jù)結(jié)構(gòu)等。(3)系統(tǒng)類包括Linux系統(tǒng)、Windows系統(tǒng)等。
嵌入式軟件開發(fā)以C語(yǔ)言為基本開發(fā)語(yǔ)言,C語(yǔ)言是一門通用的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,C語(yǔ)言包括數(shù)據(jù)類型、運(yùn)算符與表達(dá)式、程序結(jié)構(gòu)、順序、選擇、循環(huán)、數(shù)組、函數(shù)、預(yù)處理命令、指針、結(jié)構(gòu)體與共用體、文件、位運(yùn)算等內(nèi)容。
熟悉和掌握指針、結(jié)構(gòu)指針、指針函數(shù)、數(shù)據(jù)類型及轉(zhuǎn)換的基本知識(shí),對(duì)const,static,volatile,packed,aligned等常用關(guān)鍵字的意義與功能的理解。
C語(yǔ)言既具有高級(jí)語(yǔ)言的結(jié)構(gòu)化特點(diǎn),又具有匯編語(yǔ)言的實(shí)用性特點(diǎn),還具有可移植性的特點(diǎn)。C語(yǔ)言具有很多低級(jí)處理功能,同時(shí)具有代碼級(jí)別跨平臺(tái)運(yùn)行特點(diǎn),以標(biāo)準(zhǔn)規(guī)格編寫的C語(yǔ)言程序可運(yùn)用于多種操作系統(tǒng),如Windows,DOS,UNIX等操作系統(tǒng),也適用于在大、中、小、微型計(jì)算機(jī)以及嵌入式單片機(jī)平臺(tái)進(jìn)行編譯。
具備超強(qiáng)的數(shù)據(jù)處理能力使得C語(yǔ)言廣泛應(yīng)用于系統(tǒng)軟件開發(fā)、應(yīng)用軟件開發(fā)、二維與三維圖形和動(dòng)畫設(shè)計(jì)等各類科研生產(chǎn)生活領(lǐng)域。
在嵌入式系統(tǒng)開發(fā)設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,C語(yǔ)言既可以用于編寫嵌入式系統(tǒng)的系統(tǒng)程序,也可以用于編寫不依賴于嵌入式系統(tǒng)硬件的應(yīng)用程序。
1.4 嵌入式軟件開發(fā)的基本方法與基本技能
嵌入式軟件開發(fā)的基本方法與基本技能的形成,首先是嵌入式軟件開發(fā)環(huán)境的構(gòu)建與嵌入式軟件開發(fā)流程的熟悉,其次是嵌入式軟件驅(qū)動(dòng)程序開發(fā)和嵌入式軟件應(yīng)用程序開發(fā)的基本知識(shí)與基本訓(xùn)練,學(xué)習(xí)理解和掌握嵌入式軟件設(shè)計(jì)理念和方法,最后就是把以上這些基本知識(shí)、基本技能和基本方法,通過(guò)編程實(shí)踐,融會(huì)貫通形成自己的設(shè)計(jì)理念與方法,運(yùn)用到嵌入式軟件開發(fā)工程項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn)之中,循環(huán)往復(fù)不斷提升。
嵌入式系統(tǒng)具有鮮明的專用性,必須結(jié)合項(xiàng)目需求具體實(shí)際情況,以嵌入式處理器為核心的硬件與軟件有機(jī)結(jié)合、優(yōu)勢(shì)互補(bǔ)的專門設(shè)計(jì),才能滿足應(yīng)用系統(tǒng)項(xiàng)目對(duì)控制功能、外形尺寸、功率損耗、經(jīng)濟(jì)成本、可靠性等方面的特殊需求。
通過(guò)構(gòu)建相對(duì)通用的嵌入式系統(tǒng)開發(fā)所需要的軟硬件環(huán)境平臺(tái),開發(fā)出適應(yīng)各種功能需要的應(yīng)用系統(tǒng),是嵌入式系統(tǒng)開發(fā)人員的初衷與愿望。目前嵌入式系統(tǒng)的核心內(nèi)容往往是一個(gè)只有幾K或幾十K微內(nèi)核,根據(jù)項(xiàng)目需求實(shí)際情況,對(duì)微內(nèi)核進(jìn)行功能擴(kuò)展或裁剪是比較高效快捷的嵌入式系統(tǒng)軟件開發(fā)方法。
嵌入式系統(tǒng)的構(gòu)架分成4個(gè)部分:嵌入式微處理器、存儲(chǔ)器(SDRAM,ROM,F(xiàn)lash)、輸入輸出(A/D,D/A,I/O)接口、操作系統(tǒng)軟件和應(yīng)用軟件。
嵌入式系統(tǒng)裝置由嵌入式計(jì)算機(jī)控制系統(tǒng)和執(zhí)行機(jī)構(gòu)組成,執(zhí)行機(jī)構(gòu)接受嵌入式計(jì)算機(jī)控制系統(tǒng)發(fā)出的控制指令,執(zhí)行相關(guān)特定的操作功能。執(zhí)行機(jī)構(gòu)既可以很簡(jiǎn)單,也可以很復(fù)雜。根據(jù)項(xiàng)目應(yīng)用需求,集成相關(guān)數(shù)量和種類的微小型控制電機(jī)以及相關(guān)數(shù)量和種類的傳感器,從而感受各種狀態(tài)信息并執(zhí)行相關(guān)特定的功能動(dòng)作。
從嵌入式系統(tǒng)開發(fā)設(shè)計(jì)實(shí)現(xiàn)角度分析,嵌入式系統(tǒng)由硬件層、中間層、系統(tǒng)軟件層和應(yīng)用軟件層組成。
(1)硬件層就是在一片芯片上集成嵌入式處理器電路、存儲(chǔ)器(SDRAM,ROM,F(xiàn)lash)電路和輸入輸出(A/D,D/A,I/O)電路、電源電路、時(shí)鐘電路等功能電路,嵌入式操作系統(tǒng)軟件和應(yīng)用軟件都固化在ROM中。多功能的高度集成使得其具有體積小和高效率、高可靠性等特點(diǎn)。(2)中間層也稱為硬件抽象層(Hardware Abstraction Layer,HAL)或板級(jí)支持包(Board Support Package,BSP),包括嵌入式系統(tǒng)硬件初始化和硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序初始化。中間層把系統(tǒng)軟件層與硬件層分離開,使得軟件開發(fā)僅根據(jù)BSP層提供的接口,而無(wú)需關(guān)注硬件的具體情況。(3)系統(tǒng)軟件層由多任務(wù)實(shí)時(shí)操作系統(tǒng)(Real Time Operating System,RTOS)、文件系統(tǒng)、圖形用戶接口(Graphical User Interface,GUI)、網(wǎng)絡(luò)系統(tǒng)及通用組件模塊組成,在系統(tǒng)開發(fā)中根據(jù)項(xiàng)目需求進(jìn)行移植。(4)應(yīng)用軟件層主要包括在操作系統(tǒng)下的編程接口函數(shù)調(diào)用、嵌入式數(shù)據(jù)庫(kù)設(shè)計(jì)、網(wǎng)絡(luò)編程、應(yīng)用層面的應(yīng)用開發(fā)。
2 嵌入式軟件開發(fā)方法
軟件開發(fā)方法歷經(jīng)面向過(guò)程、面向?qū)ο蟆⒚嫦蚍?wù)的模式轉(zhuǎn)換,不斷改善項(xiàng)目需求客戶與系統(tǒng)開發(fā)人員之間的有效聯(lián)系與溝通,使得軟件開發(fā)從設(shè)計(jì)到實(shí)現(xiàn)以及維護(hù)各環(huán)節(jié),內(nèi)容逐步明晰與效率不斷提高。
2.1 結(jié)構(gòu)化的軟件開發(fā)方法
結(jié)構(gòu)化的軟件開發(fā)方法采用自頂向下逐步求精的方法,把整個(gè)軟件開發(fā)任務(wù)抽象為一系列功能模塊的組合。結(jié)構(gòu)化的軟件開發(fā)方法具有系統(tǒng)穩(wěn)定性低、功能適應(yīng)性低、開發(fā)效率低、開發(fā)周期較長(zhǎng)的特點(diǎn)。
2.2 面向?qū)ο蟮能浖_發(fā)方法
面向?qū)ο蟮能浖_發(fā)方法針對(duì)結(jié)構(gòu)化的軟件開發(fā)方法的功能適應(yīng)性低的不足,主要采取把同一范圍內(nèi)各個(gè)相似功能統(tǒng)一抽象為一個(gè)類,并提供一個(gè)統(tǒng)一接口供其他類調(diào)用的方法。顯著降低了軟件開發(fā)成本、提高了軟件開發(fā)效率。適用于較大規(guī)模軟件項(xiàng)目的開發(fā)。
2.3 模型驅(qū)動(dòng)開發(fā)方法
模型驅(qū)動(dòng)開發(fā)方法通過(guò)構(gòu)建系統(tǒng)模型來(lái)驅(qū)動(dòng)整個(gè)系統(tǒng)的開發(fā),實(shí)現(xiàn)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)與測(cè)試的自動(dòng)化。以模型驅(qū)動(dòng)為中心改變了以編寫代碼為中心,適用于更廣泛的應(yīng)用項(xiàng)目開發(fā)。
2.4 基于組件的開發(fā)方法
基于組件的開發(fā)方法通過(guò)把特定功能封裝為一個(gè)獨(dú)立的功能組件,各組件獨(dú)立于編程語(yǔ)言與開發(fā)平臺(tái)。極大提高了功能組件對(duì)于不同項(xiàng)目軟件開發(fā)的復(fù)用性、功能組件對(duì)于不同軟件開發(fā)平臺(tái)的可移植性、功能組件對(duì)于不同軟件架構(gòu)適應(yīng)性,讓系統(tǒng)開發(fā)人員更多精力專注于項(xiàng)目需求的邏輯分析與綜合,提高開發(fā)效率、縮短開發(fā)周期。適用于大型軟件開發(fā)項(xiàng)目。
3 結(jié)語(yǔ)
以上關(guān)于嵌入式系統(tǒng)開發(fā)方法的應(yīng)用設(shè)想,是筆者結(jié)合自己在工作實(shí)踐中的心得體會(huì)提出的教學(xué)改革基本設(shè)想,以期為構(gòu)建嵌入式系統(tǒng)開發(fā)人員智能結(jié)構(gòu)基礎(chǔ)做出一些有益的探索。