張翔 彭琿 張曉娜 劉志浩



摘要:文章以全數(shù)字仿真測(cè)試平臺(tái)為基礎(chǔ),針對(duì)飛控嵌入式軟件的典型運(yùn)行環(huán)境,提出了飛控嵌入式軟件在動(dòng)態(tài)測(cè)試條件下的仿真測(cè)試環(huán)境構(gòu)建方法,并以某型號(hào)飛控嵌入式軟件為被測(cè)軟件,構(gòu)建了基于嵌入式CPU模擬器的全數(shù)字仿真測(cè)試環(huán)境,設(shè)計(jì)并實(shí)現(xiàn)了飛控軟件外部運(yùn)行環(huán)境的仿真。關(guān)鍵詞:仿真環(huán)境;飛控軟件;軟件測(cè)試;故障注入
中圖分類號(hào):TP311.5文獻(xiàn)標(biāo)志碼:A
0 引言
飛行控制軟件是飛行器姿態(tài)、速度、方向等控制的神經(jīng)中樞,是飛控計(jì)算機(jī)系統(tǒng)中最重要的軟件之一。飛控軟件的缺陷可能直接導(dǎo)致重大經(jīng)濟(jì)損失甚至威脅人的生命安全,所以對(duì)飛控軟件進(jìn)行全面充分的測(cè)試顯得尤為重要。目前,飛控計(jì)算機(jī)的系統(tǒng)軟件和硬件都具有很強(qiáng)的耦合性[1]。軟件實(shí)現(xiàn)的不同功能絕大多數(shù)依賴于計(jì)算機(jī)系統(tǒng)硬件的結(jié)構(gòu)、輸入輸出端口配置和接口特性。硬件設(shè)備研制周期長(zhǎng)、可用數(shù)量少、測(cè)試手段受限,使得軟件研制進(jìn)度受到了硬件研制進(jìn)度的嚴(yán)重制約,進(jìn)而導(dǎo)致軟件開發(fā)進(jìn)度拖延、測(cè)試不充分[2]。
DSP C6x系列處理器廣泛用于處理飛控軟件指令、通信、控制,是應(yīng)用較多的典型嵌入式處理器。本文以某型號(hào)飛行控制嵌入式軟件為被測(cè)軟件樣例,采用全數(shù)字仿真模擬技術(shù)搭建仿真測(cè)試平臺(tái),介紹了基于DSP6x系列CPU模擬器的飛控嵌入式軟件仿真測(cè)試方法和實(shí)現(xiàn)。
1 飛控嵌入式軟件全數(shù)字仿真測(cè)試環(huán)境構(gòu)建
1.1 總體架構(gòu)設(shè)計(jì)
全數(shù)字仿真環(huán)境在宿主機(jī)上構(gòu)造嵌入式軟件運(yùn)行所必需的硬件環(huán)境,為嵌入式軟件的運(yùn)行提供一個(gè)精確的數(shù)字化硬件環(huán)境模型[3]。嵌入式軟件真正運(yùn)行在目標(biāo)硬件之前,最大限度地模擬出目標(biāo)硬件及所有交聯(lián)外圍設(shè)備,通過(guò)模擬界面完成功能的顯示,對(duì)嵌入式軟件進(jìn)行充分全面的測(cè)試,以找出軟件缺陷。
飛控嵌入式軟件全數(shù)字仿真測(cè)試環(huán)境基本框架如圖1所示,全數(shù)字仿真測(cè)試平臺(tái)框架由交互界面、測(cè)試用例、故障注入、外設(shè)建模、覆蓋測(cè)試和代碼追蹤等功能模塊組成。嵌入式模擬器由流水線模擬、端口仿真、DSP指令集仿真等模塊構(gòu)成。
1.2 DSP C6x模擬器的建模與實(shí)現(xiàn)
嵌入式CPU的仿真采取基于解釋的指令集仿真策略,仿真運(yùn)行時(shí)需要經(jīng)過(guò)類似于處理器硬件的取指、譯碼、執(zhí)行的操作過(guò)程,實(shí)現(xiàn)對(duì)指令的仿真[4]。嵌入式DSP C6X處理器采用模塊化的結(jié)構(gòu)設(shè)計(jì),每個(gè)模塊均采用獨(dú)立類的結(jié)構(gòu)進(jìn)行設(shè)計(jì)封裝,模塊與模塊之間采用通用、標(biāo)準(zhǔn)化的數(shù)字接口。在外設(shè)接口仿真模型中,采用統(tǒng)一平臺(tái)的開發(fā)接口環(huán)境,便于系統(tǒng)的集成和一致性[5]。DSP C6x模擬器的架構(gòu)設(shè)計(jì)如圖2所示,包括端口仿真、中斷仿真、流水線仿真、指令解析、內(nèi)存仿真、總線仿真、寄存器仿真和時(shí)鐘仿真模塊。在模擬器運(yùn)行過(guò)程中,指令集仿真器循環(huán)執(zhí)行“取指、譯碼、執(zhí)行”3個(gè)步驟[6]。
2 飛控嵌入式軟件外設(shè)接口仿真方法
2.1 實(shí)現(xiàn)原理
在嵌入式軟件的外部接口中,DSP C6X模擬器與外設(shè)接口的訪問(wèn)通過(guò)外部接口寄存器進(jìn)行。如圖3所示,每個(gè)外部接口的寄存器與具體地址空間一一對(duì)應(yīng),訪問(wèn)外部接口寄存器實(shí)際就是訪問(wèn)特殊的地址空間,通過(guò)地址空間和函數(shù)綁定,建立起唯一的外設(shè)接口函數(shù),從而實(shí)現(xiàn)外部接口的仿真。例如,在外設(shè)接口函數(shù)1中,唯一對(duì)應(yīng)于端口地址集1的話,則端口地址集1的外部接口則通過(guò)外設(shè)接口函數(shù)1實(shí)現(xiàn)。
2.2 外設(shè)接口函數(shù)實(shí)現(xiàn)
在真實(shí)硬件環(huán)境中,某型號(hào)飛控嵌入式軟件運(yùn)行在處理器型號(hào)為DSP C6713的電子設(shè)備上,此電子設(shè)備能定時(shí)采集飛行器飛行速度、姿態(tài)等數(shù)據(jù),并具備進(jìn)行數(shù)據(jù)處理、轉(zhuǎn)換和通信等功能。該電子設(shè)備包括模擬量功能模塊、1553B總線等,主要接口有AD/DA接口、串口等。對(duì)其外設(shè)接口進(jìn)行仿真實(shí)現(xiàn),類圖設(shè)計(jì)如圖4所示。
2.2.1 AD/DA接口
模擬/數(shù)字轉(zhuǎn)化功能模塊包含8路的AD輸入通道和8路的DA輸出通道,其AD/DA接口的設(shè)計(jì)實(shí)現(xiàn)模式為:程序在每一個(gè)循環(huán)周期內(nèi),采集一次AD通道數(shù)據(jù),并把采集到的數(shù)據(jù)通過(guò)DA轉(zhuǎn)化輸出到DA通道。當(dāng)輸出的DA通道數(shù)據(jù)小于其門限值時(shí),則輸出的數(shù)據(jù)為DA轉(zhuǎn)化后的數(shù)值;而當(dāng)輸出的DA通道數(shù)據(jù)大于其門限值時(shí),則輸出的數(shù)據(jù)為門限值。
2.2.2 串口
串口功能模塊包含RS422和RS485兩種協(xié)議的串口通道,其串口的設(shè)計(jì)實(shí)現(xiàn)模式為:在程序運(yùn)行的每個(gè)主循環(huán)周期內(nèi),嵌入式CPU模擬器對(duì)串口的數(shù)據(jù)進(jìn)行采集,判斷數(shù)據(jù)格式是否符合串口的數(shù)據(jù)幀格式。如果數(shù)據(jù)格式正確,模擬器就對(duì)數(shù)據(jù)進(jìn)行解析,對(duì)數(shù)據(jù)進(jìn)行處理與傳輸;反之,如果格式錯(cuò)誤,就進(jìn)行錯(cuò)誤信息的反饋。
2.2.3 1553B總線接口
1553B總線接口是滿足1553B協(xié)議的一個(gè)通道,其設(shè)計(jì)實(shí)現(xiàn)模式為:程序系統(tǒng)啟動(dòng)時(shí),啟動(dòng)并讀取配置文件,依據(jù)配置文件對(duì)1553B總線模塊進(jìn)行初始化設(shè)置。在程序運(yùn)行的每個(gè)主循環(huán)周期內(nèi),嵌入式CPU模擬器對(duì)1553B總線端口進(jìn)行訪問(wèn)。如果端口有數(shù)據(jù),就采集并接收數(shù)據(jù);如果端口沒有數(shù)據(jù),就會(huì)反饋無(wú)數(shù)據(jù)的信息。
3 基于DSP C6x模擬器的飛控軟件仿真測(cè)試與實(shí)現(xiàn)
實(shí)現(xiàn)對(duì)外設(shè)接口的仿真后,測(cè)試人員就能夠在沒有硬件條件支持的情況下,實(shí)現(xiàn)對(duì)某型號(hào)飛控嵌入式軟件的測(cè)試,還能靈活、方便地模擬硬件故障,利用構(gòu)建的全數(shù)字仿真測(cè)試環(huán)境對(duì)被測(cè)軟件進(jìn)行故障注入測(cè)試[7]。
3.1 動(dòng)態(tài)測(cè)試
在構(gòu)建的全數(shù)字仿真測(cè)試環(huán)境中運(yùn)行被測(cè)軟件,利用動(dòng)態(tài)測(cè)試的方法對(duì)飛控軟件接口進(jìn)行測(cè)試[8]。測(cè)試過(guò)程中共發(fā)現(xiàn)某型號(hào)飛控嵌入式的軟件缺陷有2個(gè),下面對(duì)測(cè)試結(jié)果進(jìn)行簡(jiǎn)單分析。
3.1.1 內(nèi)存分配缺陷
在對(duì)某型號(hào)飛控嵌入式軟件進(jìn)行多次動(dòng)態(tài)內(nèi)存分配后,會(huì)出現(xiàn)內(nèi)存分配失敗的情況,導(dǎo)致軟件數(shù)據(jù)無(wú)法及時(shí)更新,數(shù)據(jù)發(fā)生錯(cuò)亂。在使用全數(shù)字仿真測(cè)試環(huán)境中的內(nèi)存分析工具對(duì)被測(cè)軟件的動(dòng)態(tài)內(nèi)存分配過(guò)程進(jìn)行分析后,發(fā)現(xiàn)軟件在內(nèi)存分配的過(guò)程中,未及時(shí)釋放內(nèi)存,導(dǎo)致內(nèi)存溢出。
內(nèi)存分配軟件缺陷源碼如下:
for (index = 0;index<10;index++)
{
testptr[index] = (int *)malloc(100*sizeof(int));
}
3.1.2 串口數(shù)組越界缺陷
在串口數(shù)據(jù)采集時(shí),如果對(duì)串口進(jìn)行多包數(shù)據(jù)注入,會(huì)導(dǎo)致被測(cè)軟件接收數(shù)據(jù)出現(xiàn)錯(cuò)誤。通過(guò)對(duì)被測(cè)軟件進(jìn)行動(dòng)態(tài)測(cè)試可發(fā)現(xiàn)在串口實(shí)現(xiàn)函數(shù)中,變量Index達(dá)到最大值時(shí),仍然會(huì)對(duì)UARTRX[Index++]數(shù)組進(jìn)行賦值操作,導(dǎo)致數(shù)組索引超出定義的長(zhǎng)度,從而產(chǎn)生數(shù)組越界錯(cuò)誤。數(shù)組越界軟件缺陷代碼如下。
for(Index = 0;Index { UartTemp = read_data(rUARTRX); UARTRX[Index] = UartTemp; } UARTRX[Index++] = '\\0'; 3.2 故障注入測(cè)試 故障可分為硬件故障、通信故障和軟件故障3種類型,而本文對(duì)飛控嵌入式軟件系統(tǒng)的測(cè)試以處理器內(nèi)存故障、串口寄存器故障和數(shù)據(jù)溢出故障為3種故障類型典型進(jìn)行說(shuō)明。 3.2.1 處理器內(nèi)存故障 內(nèi)存故障是指處理器中的RAM、ROM、FLASH等內(nèi)存出現(xiàn)異常,包括內(nèi)存“寫故障”、內(nèi)存“讀故障”和FLASH“讀寫故障”。在內(nèi)存故障模擬中,向指定的內(nèi)存地址寫入錯(cuò)誤的數(shù)據(jù)或者把指定內(nèi)存空間的數(shù)據(jù)清空,可以有效地模擬內(nèi)存故障。 3.2.2 串口寄存器通信故障 寄存器故障是處理器的寄存器值發(fā)生了變化,與正常的值不一致,原因可能是受電磁影響,致使寄存器的數(shù)值發(fā)生0和1的反轉(zhuǎn)。在被測(cè)軟件運(yùn)行過(guò)程中,通過(guò)修改嵌入式模擬器中寄存器的值,可直接實(shí)現(xiàn)寄存器故障的模擬。 3.2.3 數(shù)據(jù)溢出軟件故障 數(shù)據(jù)溢出故障是指被測(cè)軟件在運(yùn)行過(guò)程中,數(shù)據(jù)產(chǎn)生了溢出。無(wú)論是定點(diǎn)數(shù)還是浮點(diǎn)數(shù)運(yùn)算,都有可能產(chǎn)生溢出。數(shù)據(jù)溢出包括數(shù)據(jù)計(jì)算溢出和數(shù)據(jù)接收存儲(chǔ)溢出。數(shù)據(jù)計(jì)算溢出是指數(shù)據(jù)運(yùn)算時(shí),計(jì)算結(jié)果超出指定數(shù)據(jù)結(jié)果的范圍。數(shù)據(jù)接收存儲(chǔ)溢出是指接收的數(shù)據(jù)超過(guò)分配的存儲(chǔ)空間時(shí),數(shù)據(jù)不斷存儲(chǔ)導(dǎo)致覆蓋其他內(nèi)存段數(shù)據(jù)的現(xiàn)象。這種情況通常出現(xiàn)在被測(cè)軟件中的全局?jǐn)?shù)組或者結(jié)構(gòu)體中。 4 結(jié)語(yǔ) 本文基于全數(shù)字仿真測(cè)試平臺(tái)對(duì)某型號(hào)飛控嵌入式軟件的運(yùn)行環(huán)境進(jìn)行虛擬化構(gòu)建,以典型的嵌入式飛控軟件為被測(cè)對(duì)象,采用動(dòng)態(tài)運(yùn)行測(cè)試和故障注入測(cè)試對(duì)其進(jìn)行全面測(cè)試。通過(guò)測(cè)試,本研究找出兩個(gè)較為嚴(yán)重的軟件缺陷,驗(yàn)證了基于DSP C6x模擬器的全數(shù)字仿真測(cè)試環(huán)境在飛控嵌入式軟件測(cè)試中的靈活性和有效性。 參考文獻(xiàn) [1]項(xiàng)文成.通用嵌入式虛擬驗(yàn)證系統(tǒng)中SPARCV8仿真核的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2016. [2]王乾宇,朱小冬,王毅剛,等.嵌入式軟件仿真測(cè)試環(huán)境實(shí)時(shí)任務(wù)調(diào)度的研究[J].計(jì)算機(jī)測(cè)量與控制,2012(20):1162-1165. [3]葉志玲,王向暉.基于CMMI星載嵌入式軟件測(cè)試技術(shù)研究[J].計(jì)算機(jī)測(cè)量與控制,2013(4):836-838. [4]肖前遠(yuǎn).航空嵌入式軟件全數(shù)字仿真測(cè)試技術(shù)研究[D].南京:南京航空航天大學(xué),2010. [5]蘇銀科,李艷雷,周平,等.基于故障注入的實(shí)時(shí)嵌入式軟件仿真測(cè)試技術(shù)研究[J].導(dǎo)航定位與授時(shí),2014(3):69-73. [6]陳佐,張懷相,方景龍.嵌入式軟件自動(dòng)化測(cè)試技術(shù)[J].計(jì)算機(jī)工程與設(shè)計(jì),2018(39):3126-3131. [7]黎暉,石小華,林柯軍,等.工程裝備嵌入式軟件測(cè)試環(huán)境平臺(tái)技術(shù)研究[J].計(jì)算機(jī)測(cè)量與控制,2016(24):10-12. [8]許福,金茂忠,劉輝,等.基于仿真器的嵌入式軟件單元測(cè)試方法[J].北京航空航天大學(xué)學(xué)報(bào),2012(12):1686-1690. (編輯 王永超)