嵌入式軟件的開發(fā)是一項相對于傳統(tǒng)軟件開發(fā)而言更為復(fù)雜的任務(wù)。嵌入式軟件的特點是需要在硬件環(huán)境下運行,并且往往需要考慮實時性、穩(wěn)定性和安全性等多方面的因素。因此,嵌入式軟件開發(fā)的流程和技巧也有其獨特性。
嵌入式軟件(如航空電子和汽車系統(tǒng))的設(shè)計、開發(fā)、測試和驗證正變得越來越復(fù)雜。傳統(tǒng)的文檔驅(qū)動式環(huán)境中,一旦開發(fā)人員之間缺乏協(xié)調(diào),軟件程序生命周期的質(zhì)量和成本就會受到嚴(yán)重影響,顯然已經(jīng)無法應(yīng)對日益復(fù)雜的嵌入式軟件生產(chǎn)。
正確使用基于模型的設(shè)計(Model-Based Design,以下簡稱MBD)方法可以有效規(guī)避此類問題:通過MBD提供的統(tǒng)一設(shè)計環(huán)境,開發(fā)人員可在軟件的整個生命周期中使用同一套模型來進行需求驗證、數(shù)據(jù)分析、模型可視化、測試和驗證,并進行最終的產(chǎn)品部署(無論是否有自動代碼生成)。
1.MBD是什么?
MBD是一種圍繞嵌入式軟件虛擬原型搭建展開的項目開發(fā)方法,其技術(shù)發(fā)展是為了克服應(yīng)用于閉環(huán)控制系統(tǒng)(Closed-loop Control System)或DSP(Digital Signal Processing,數(shù)字信號處理)的嵌入式軟件設(shè)計中常見的困難和復(fù)雜問題。
在大多數(shù)實際場景中,此類嵌入式軟件的設(shè)計與測試需要在物理原型和系統(tǒng)可用之前就開始。由于整個項目開發(fā)過程往往需要多個團隊的廣泛參與,如果直至后期才發(fā)現(xiàn)設(shè)計和需求的錯誤,就會導(dǎo)致項目周期整體延遲、成本大大增加——使用MBD就是為了在項目早期階段解決這些問題,以減少后期返工。
MBD還與仿真、圖形化的生產(chǎn)能力模型相關(guān)聯(lián),能夠?qū)浖_發(fā)所涉及的每個階段加強驗證與確認(rèn)過程。對嵌入式CPU(Central Processing Unit,中央處理器)或DSP上的代碼進行驗證是一個關(guān)鍵步驟,不僅能夠檢測算法設(shè)計轉(zhuǎn)換至C代碼過程中的缺陷,還能針對代碼編譯、二進制代碼優(yōu)化以及CPU/DSP體系結(jié)構(gòu)的限制等問題采取先發(fā)制人的措施。
▲基于模型的設(shè)計(MBD)概述
2.基于模型的開發(fā)和測試
在使用MBD方法時,設(shè)計團隊往往通過開發(fā)模型來分析和制定高層次的需求以及更為細致的底層需求。此類模型可具備解決方案的主要架構(gòu),但通常獨立于嵌入式目標(biāo)平臺。模型所實現(xiàn)的主要需求能夠在仿真過程中以精確的方式得到證明,并能說明可演繹的頂層需求,通常被指定為可執(zhí)行的規(guī)范。
應(yīng)用MBD的設(shè)計和測試團隊之間共享模型組件和相關(guān)工作,有助于進一步確認(rèn)嵌入式軟件代碼是否符合硬件的具體要求,并在較短時間內(nèi)對代碼進行更為集中的測試和Bug修正。
MBD的驗證、確認(rèn)、測試模型和軟件的測試機制(任務(wù))通常被分為下列四項:
模型在環(huán)(Model-in-Loop,MIL):驗證算法模型是否滿足功能需求;
軟件在環(huán)(Software-in-Loop,SIL):驗證【模型】與【模型代碼實現(xiàn)】之間的一致性;
處理器在環(huán)(Processor-in-Loop,PIL):驗證【模型】與【模型代碼實現(xiàn)在目標(biāo)處理器上運行】之間的一致性;
硬件在環(huán)(Hardware-in-Loop,HIL):在實際系統(tǒng)上驗證代碼與需求功能之間的一致性。
1. MIL - 模型在環(huán)測試
從集成層面來看,基于系統(tǒng)本身的模型尤為重要。在MIL層面測試嵌入式系統(tǒng)設(shè)計意味著模型及其環(huán)境在建??蚣苤羞M行仿真模擬,無需任何物理硬件組件的介入。這使得在開發(fā)周期的初始階段進行測試成為可能,并能驗證開發(fā)早期階段的需求。代碼驗證的基準(zhǔn)主要在于通過模擬收集到的信息。
▲ MIL測試
2. SIL - 軟件在環(huán)測試
SIL層面,模型會根據(jù)嵌入式平臺的最終目標(biāo)進行進一步調(diào)整。控制器模型一般使用C或C++編寫(可以是自動生成的代碼),插入到仿真環(huán)境中與仿真的被控對象一起評估。
這種驗證方式對于驗證由自動生成代碼和手寫代碼(代碼需要集成并在嵌入式目標(biāo)平臺上執(zhí)行)組成的軟件組件尤其有用。SIL測試通常會重復(fù)使用MIL測試中的數(shù)據(jù)和模型結(jié)構(gòu),以檢查仿真中的代碼行為是否正確。通常,嵌入式軟件和仿真環(huán)境模型在同一臺機器上運行。
▲ SIL測試
3. PIL - 處理器在環(huán)測試
PIL與MIL、SIL的不同之處在于其代碼在目標(biāo)微控制器或DSP上執(zhí)行:將已編譯的目標(biāo)代碼加載到目標(biāo)處理器或DSP上,然后在被控對象模型上運行模擬以進行驗證。PIL可執(zhí)行大量V&V測試套件,以評估嵌入式CPU/DSP運行控制器算法的能力。如果SIL和PIL結(jié)果之間存在差異,可對PIL目標(biāo)代碼針對定點精度、內(nèi)存占用或編譯器優(yōu)化標(biāo)志等部分進行微調(diào)。
▲PIL測試
PIL可以彌補仿真軟件中執(zhí)行的控制器模型設(shè)計和在目標(biāo)機上執(zhí)行的實際控制器代碼之間的差距,不僅能夠識別出可能源自編譯器的錯誤,還支持調(diào)試算法功能和評估嵌入式微控制器或DSP的性能,并可提供軟件系統(tǒng)的重要測量數(shù)據(jù),如內(nèi)存使用和執(zhí)行時間。這些數(shù)據(jù)可用來在仿真環(huán)境中微調(diào)控制器功能,并應(yīng)用于嵌入式硬件設(shè)計的早期階段。
▲PIL實際應(yīng)用
4. HIL - 硬件在環(huán)測試
PIL測試結(jié)束后的下一步動作,通常會使用實際系統(tǒng)(或?qū)嶒炇以?或運行被控對象模型的實時模擬器來替換被控對象模型。例如,如果工程師正在設(shè)計直流電機速度控制器,那么控制器代碼將部署在微控制器或DSP板上,然后通過IO(輸入輸出)接口連接到真正的直流電動機。
由于HIL測試允許在實時環(huán)境中以可管理的方式調(diào)試和評估功能測試/運行測試,因此實現(xiàn)可靠的HIL測試通常需要用到大量的自動化測試、日志以及硬件的接口組件。相對而言,PIL的設(shè)置相對容易,需要的硬件和軟件資源也會更少。
▲ HIL測試
四個測試手段的對比如下:
SkyEye,中文全稱天目全數(shù)字實時仿真軟件,是基于可視化建模的硬件行為級仿真平臺,支持用戶通過拖拽的方式對硬件進行行為級別的仿真和建模。SkyEye采用“面向?qū)ο蟆钡脑O(shè)計思想,將虛擬目標(biāo)系統(tǒng)上的所有組件都設(shè)計為獨立的模塊,支持通過手動修改和界面圖形拖拽的方式快速生成虛擬目標(biāo)系統(tǒng)的“硬件配置文件”,從而快速構(gòu)建虛擬目標(biāo)系統(tǒng),達到加載和運行二進制目標(biāo)程序并進行仿真測試的目的。
SkyEye目前支持仿真的處理器架構(gòu)有:ARM、DSP、POWERPC、SPARC、X86、MIPS、MCS-51、TriCore等,可支持SIL和PIL仿真測試,對嵌入式實時軟件開發(fā)極具價值。
總之,嵌入式軟件的開發(fā)流程和技巧需要我們在實踐中不斷探索和總結(jié)。只有不斷地提高開發(fā)效率和軟件的質(zhì)量,才能滿足客戶的需求。