代曉倩++尤志堅
摘要:該文探討了單片機軟件測試的關鍵技術(shù)中斷測試技術(shù),并根據(jù)自己的測試實踐討論了型號項目軟件測試中出現(xiàn)的問題。
關鍵詞:軟件測試;中斷測試;單片機
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)11-0195-02
Research of interrupt testing technology of Single Chip Microcomputer
Dai Xiao-qian,You Zhi-jian
(Shanghai Aerospace Electronic Technology Institute, Shanghai 201109, China)
Abstract: This paper discusses the important technology about interrupt testing of Single Chip Microcomputer software, according to the authors testing practice it discuss some issues derived from the software testing of a type of project.
Key words: software testing; Interrupt testing; Single Chip Microcomputer
單片機因其高可靠性已被廣泛應用于航天系統(tǒng)中,因此單片機軟件的可靠性也成為影響這些系統(tǒng)的非常關鍵的因素。由于中斷技術(shù)在軟件實時響應、多任務處理和突發(fā)事件響應中的優(yōu)勢,使得它在航天型號軟件中不可或缺。但是中斷程序執(zhí)行的隨機性,使得中斷所帶來的問題具有偶發(fā)性和隱蔽性,在軟件測試中通常很難被發(fā)現(xiàn),這給軟件測試帶來了很大的困難。
因此,本文結(jié)合航天軟件測評工作的特點,將單片機軟件中斷測試細化到以下測試類型包括代碼審查、性能測試、余量測試、強度測試中,力求中斷測試更充分有效,更多發(fā)現(xiàn)問題。
1 代碼審查
在實際應用中,由于中斷和硬件、環(huán)境、以及應用密切相關,復雜性高,不可能進行充分的測試,所以必須在進行中斷測試之前做好比較完備的中斷代碼審查及分析,然后在此基礎上進行一些必要的測試。以單片機軟件為例,做好中斷的代碼審查工作,除了編碼的正確性需要得到保證之外,還需要著重對以下幾個方面進行審查。
1.1 未使用中斷向量是否處理
對未用中斷的中斷向量進行處理,避免觸發(fā)未用中斷或者跳到未用中斷的中斷向量區(qū)而帶來的未知影響。處理方法可以采用跳轉(zhuǎn)到統(tǒng)一的陷阱處理程序等。
1.2 軟件復位是否進行兩次中斷返回
MSC-51單片機有兩個中斷優(yōu)先級,如果軟件在二級中斷嵌套時走飛,隨后由軟件陷阱轉(zhuǎn)入初始化程序時,則當前中斷服務狀態(tài)標志有2個,需要進行2次RETI操作來清除中斷服務狀態(tài)標志,否則,軟件無法響應中斷請求。代碼實現(xiàn)如下:
1.3 檢查是否存在函數(shù)重入
Keil c51默認環(huán)境下,函數(shù)如果不做特殊處理是不可重入的。如果函數(shù)調(diào)用有重入,會產(chǎn)生不同模塊間變量相互覆蓋的風險。對于無法避免重入函數(shù)的情況,設計師可編寫兩個語句相同名稱不同的子函數(shù)分別供主程序和中斷服務程序調(diào)用。
1.4 檢查變量類型是否合理
在單片機高級語言編程中,對于在主程序和中斷(或在不同優(yōu)先級的中斷)中同時用到的公共變量應盡量定義為單字節(jié)變量如unsigned char型。下文描述了一個錯誤的案例,代碼如下圖。
其中Int0為低優(yōu)先級中斷,Int1為高優(yōu)先級中斷。變量Cnt定義為16位unsigned int型,
在單片機中分高低字節(jié)存儲。Int0中斷服務子程序中Cnt加1(C語言描述為Cnt++)對應的匯編代碼及解釋如下:
其中“Cnt+01H”和“Cnt”分別表示存放Cnt變量的低字節(jié)和高字節(jié)數(shù)據(jù)地址。從上述匯編代碼分析可知,當Int0中斷服務子程序執(zhí)行完第一句后執(zhí)行第二句前,此時被高優(yōu)先級的Int1中斷打斷,而后在Int1中斷服務子程序中又將Cnt的高低字節(jié)均清為0,因此導致Int1中斷處理結(jié)束后,程序回到Int0中斷服務子程序執(zhí)行上面第二句代碼時,誤以為是Cnt低字節(jié)加1溢出(0xff+1),因此將Cnt高字節(jié)加1(變?yōu)?x0100),進而導致后續(xù)大于200條件判斷成立,即錯誤執(zhí)行語句“Bus1553B= ERR;”從而導致軟件復位1553B總線芯片。
1.5 中斷資源沖突檢查
中斷程序可以在任何時刻運行,如某一資源同時為兩個以上的中斷程序或中斷程序和主程序所使用,這時相互之間就可能發(fā)生資源沖突。當軟件中斷程序很長變量較多,并且比較復雜的情況下,中斷資源沖突檢查的難度也將大大增加。怎樣才能做好中斷資源沖突檢查呢?目前,中斷資源沖突檢查主要還是采用人工分析方法,首先列出主程序和中斷程序中使用的公共資源,包括括寄存器、變量、緩沖區(qū)、IO端口等等,并明確這些資源在函數(shù)中的訪問特性,包括只讀、只寫、讀寫特性;接著對上述資源逐一分析,一般情況下,當公共資源在中斷函數(shù)中為只讀狀態(tài),不會與主程序使用該資源產(chǎn)生沖突;而當公共資源在中斷函數(shù)中為讀寫或者只寫狀態(tài)時,就要注意資源使用沖突問題了。
做好中斷資源沖突檢查,測評人員不光要做到對中斷程序心中有數(shù),還要對整個系統(tǒng)運行十分清楚,這需要在工程實踐中慢慢積累經(jīng)驗。
2 性能測試
與中斷服務程序有關的性能好壞往往與軟件質(zhì)量有著密切的聯(lián)系。通??蓮囊韵聨追矫嫒胧郑?/p>
2.1 測試定時中斷執(zhí)行周期
主要測試定時中斷周期設置是否合理,在被高優(yōu)先級中斷推遲執(zhí)行的情況下,執(zhí)行周期是否滿足要求。
例如,若定時中斷程序每0.5ms執(zhí)行一次,且用來輸出某周期性控制信號,而此周期信號的頻率又被下級軟件采集使用,則當軟件中存在另一高優(yōu)先級中斷執(zhí)行將定時中斷推遲執(zhí)行后,會直接影響某周期信號的輸出,進而對下級軟件的執(zhí)行產(chǎn)生影響。
2.2 測試中斷服務程序最長執(zhí)行時間
通常中斷服務程序執(zhí)行時間不應太長,數(shù)據(jù)處理要盡量放在主程序中進行。在中斷服務程序中應避免出現(xiàn)延時等待的語句。發(fā)生嵌套時高優(yōu)先級的中斷處理完畢后低優(yōu)先級的中斷應還有足夠的時間繼續(xù)處理。
測試的方法主要是利用性能測試的手段,得到高優(yōu)先級和低優(yōu)先級中斷的最長處理時間,當中斷嵌套產(chǎn)生時,高優(yōu)先級中斷最長處理時間加上低優(yōu)先級中斷最長處理時間應小于低優(yōu)先級中斷的產(chǎn)生周期。
2.3 分析中斷執(zhí)行時間對主循環(huán)的影響
主循環(huán)最大執(zhí)行時間要考慮主循環(huán)被中斷打斷后的最大執(zhí)行時間,并確認主循環(huán)最大執(zhí)行時間是否仍然滿足要求。
3 余量測試
中斷的余量測試主要測試以下兩點:
1) 中斷執(zhí)行時間的余量,一般針對有周期性時間要求的中斷進行,測試的方法主要是利用性能測試的手段,得到中斷的最長處理時間,中斷處理時間一般要求留有20%的余量,即中斷最長處理時間不應超過中斷周期時間的80%。
2) 堆棧使用余量
函數(shù)/子程序嵌套、中斷嵌套以及函數(shù)和中斷之間的嵌套運行都要占用堆??臻g,而堆??臻g的不足會導致不可預知的后果。所以軟件中斷內(nèi)代碼不能太多,涉及變量也不要太多,否則可能會導致比較大的堆棧需要,甚至導致堆棧溢出。
堆棧使用情況的測試通常是先采用人工分析方法找出程序的最大調(diào)用深度即最長執(zhí)行路徑,然后在仿真環(huán)境中運行程序,記錄SP指針的初始值,然后沿最大調(diào)用深度執(zhí)行程序記錄SP指針的最大值,最后計算堆棧空間余量??紤]系統(tǒng)升級和擴展的需要,堆棧使用余量要大于20%。
4 強度測試
中斷的強度測試就是測試中斷產(chǎn)生的頻率達到什么情況時軟件無法正常處理;一般都是對通訊類的中斷進行強度測試,測試的方法是逐漸縮短中斷產(chǎn)生的時間間隔直到軟件無法正常響應,得到軟件中斷處理的強度。另外值得注意的是當縮短中斷產(chǎn)生的時間間隔后,適當延長軟件測試時間,往往可以加速暴露一些資源使用沖突問題,因此在進行強度測試時,在考慮增加頻率的情況下應適當延長軟件測試時間,使軟件問題充分暴露。
5 結(jié)束語
本文從四大測試類型即代碼審查、性能測試、余量測試、強度測試出發(fā),全面總結(jié)了單片機軟件中斷測試技術(shù)。其中中斷代碼審查技術(shù)是重點也是基礎,性能、余量、強度測試是深入化的測試,測試人員需靈活運用上述測試技術(shù),才能較好的發(fā)現(xiàn)中斷程序的問題,提高軟件質(zhì)量。
參考文獻:
[1] 高鋒,單片微型計算機原理與接口技術(shù)[M].科學出版社,2007.
[2] 柳純錄.軟件評測師教程[M]. 清華大學出版社,2005.