文/樊茜 何雨昂 焦震 張震 郭鈺
基于STM32的伺服軟件是一種應用于ARM 平臺的新型軟件,并采用RS422串口通信協議,該類軟件具有多指令、多時序、強實時的特點。軟件產品質量直接影響甚至決定整個伺服系統的質量。面對規模越來越大的嵌入式軟件,對軟件測試的效率和有效性提出了更高的要求,一方面要盡早發現軟件的缺陷,保證軟件的質量;另一方面要保證項目的研制進度不受到影響。針對上述情況,本文提出了一種面向STM32和RS422總線的伺服軟件測試平臺,對被測軟件的功能、接口、余量和強度指標進行充分考核。
新型的ARM嵌入式系統,使用KEIL開發編譯器。測試人員需要對KEIL編譯器下的目標文件結構進行分析,從而總結空間余量計算方法。
一個ARM程序包含3部分:RO,RW和ZI。RO是程序中的指令和常量;RW是程序中的已初始化變量;ZI是程序中的未初始化的變量,如圖1。
使用KEIL軟件成功編譯工程后會生成系統MAP文件,MAP文件內包含Code、RO Data、RW Data、ZI Data的信息,分別代表編譯后C文件的指令、常量、已被初始化的變量、未被初始化或初始化為0的變量。那么,該工程的RO則為Code與RO Data之和;RW為RW Data與ZI Data之和;ZI為ZI Data;另外,燒錄到ROM中文件稱之為ARM映像文件。該文件包含了RO和RW,而不包含ZI。因為ZI數據都是0,只要程序運行之前將ZI數據所在的區域一律清零即可。為驗證上述理論,設計如下實驗:

表1:RO實驗數據

表2:RW實驗數據

表3:ZI實驗數據
實驗1:驗證RO數據。設計兩段程序,它們之間差了一條“聲明一個字符常量”語句。因此按照之前描述,兩段程序之間應只會在RO Data中相差一個字節(字符常量為1字節),如表1所示。
實驗2:驗證RW數據。同樣再看兩個程序,它們之間只相差一個“已初始化的變量”,按照之前描述,已初始化的變量應該是算在RW Data中的,所以兩段程序之間應該是RW Data大小有區別,如表2所示。
實驗3:驗證ZI數據。最后這兩個程序的設計差別為一個未初始化的變量“a”,從之前的了解中,應該可以推測,這兩個程序之間應該只有ZI Data有差別,如表3所示。
由此我們可以分析出,堆棧空間、代碼空間、數據空間的測試方法。

圖1:ARM程序的目標文件結構
針對堆棧空間,我們從MAP文件中查詢堆棧空間的起始地址和終止地址,再將該區域內全賦值為0xFFFF,編譯通過后上傳被測軟件并運行,此時使用Memory查看堆棧區的使用情況。公式如下:

針對代碼空間,我們在MAP文件中查看所有Code和RO Data占用的空間數,找到Code和RO Data對應的存儲區的地址長度,從而計算出代碼空間余量。公式如下:

圖2:測試環境搭建框圖

針對數據空間,則在MAP文件中查看所有RW Data和ZI Data占用的空間數,然后找到RW Data和ZI Data對應的存儲區的地址長度,最后計算出數據空間余量。公式如下:

根據被測伺服軟件所提供的運行環境的不同,伺服軟件測試平臺一般分為三種類型:全實物仿真測試平臺、半實物仿真測試平臺、全數字仿真測試平臺。這三種測試環境都是嵌入式軟件測試過程中的重要手段和方法。但由于全實物仿真測試的可控性弱,構建經費多,該平臺中的真實外圍設備使得系統的設置缺乏靈活性,測試用例輸入條件無法滿足,測試結果記錄困難,測試有效性差。全數字仿真測試則是在接口、實時性、數據真實性等方面較弱,部分與硬件特性緊密相關的軟件特性無法有效測試,這種測試環境的通用性較差,且采用軟件來模擬硬件的運行,與在實際環境中的運行將會存在差異。為解決兩者之間的矛盾,保證真實性的同時又保證可控性,滿足對高動態的測試要求,我們采用半實物仿真測試平臺,就是在計算機仿真回路中接入一些實物,以取代相應部分數學模型的系統仿真,這種技術是建立在半實物仿真測試環境基礎上的。
面向STM32和RS422總線的伺服軟件的半實物仿真測試平臺由目標機、仿真機系統和環境模擬設備組成。其中目標機包括伺服控制驅動器,用來運行被測軟件;仿真機系統包括接入RS422板卡、裝有LDRA Testbed、RTinsight、KEIL、RS422總線上位機測試軟件等軟件的工控機,實現彈上總線及設備的模擬與仿真以及給目標機發送控制指令;環境模擬設備包括供電電源、示波器、JlINK仿真器,主要實現軟件在線調試,通過示波器觀察看門狗復位和PWM波形。基于STM32和RS422總線的伺服軟件測試平臺組成如圖2。
此次搭建的測試環境包含RS422串口總線設備。RS422串行通訊的特點主要是數據位按位順序傳送,所以最少只需一根傳輸線即可完成通信,成本低,容易實現遠距離通信。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。軟件在解析時同樣按字節接收,由于通訊中每個幀包括固定長度的字節,所以軟件對于錯誤幀的處理尤為關鍵。半實物仿真測試環境可以針對幀缺失和幀冗余進行測試,幀缺失指的是數據幀中的字節數少于固定長度,幀冗余則是字節數多于固定長度,首先通過串口調試軟件發送錯誤幀,查看伺服軟件是否響應錯誤幀,再發送正確的數據幀,查看軟件是否可以正常處理,也就是驗證軟件能否從錯誤的狀態下恢復回來。
半實物仿真測試環境最大程度地模擬軟件的實際運行環境,真實地反映了軟件的實際運行狀態,有效地保證了軟件測試實時性,最大限度地減小了測試環境對動態性能指標的影響。結合半實物仿真測試環境,使用硬件、數據和操作故障注入技術,能夠全面考察基于STM32和RS422總線的伺服軟件的功能、接口特性、容錯機制和異常數據處理的能力。
壓力測試也稱強度測試,是在強負載(大數據量、大量并發用戶等)下的測試。通過查看伺服軟件在峰值使用情況下的操作行為,發現被測軟件的某項功能隱患、軟件是否具有良好的容錯能力和可恢復能力。在實際的運行狀態下,伺服軟件實時接收控制系統指令,并及時解碼、保存當前控制指令,用于伺服系統閉環控制,在每個固定周期N ms發送一次控制指令消息,消息內容為伺服系統的角度命令值。本次測試采用串口調試軟件配套RS422總線板卡,支持單條消息的定時發送,分辨率為1 ms。以伺服軟件測試平臺為基礎,將測試流程中的消息配置為控制指令消息,并且定時發送周期設置為N ms,此時軟件可以實時接收上位機發送的控制指令,進行閉環控制計算,測試人員可以通過設計測試用例,考察軟件在這種狀態下是否工作穩定和可靠。為了進一步考核軟件在強負載下的工作狀態,我們將上位機發送控制指令的周期逐步縮短,此時軟件在單位時間內接收到的數據量明顯增加,在此狀態下,測試人員通過PWM接口的輸出、變量監控等方法,查看軟件是否具有某些隱患,也就是考核了軟件的抗壓能力。
基于STM32和RS422總線的伺服軟件是新型ARM系列伺服控制驅動軟件,是今后嵌入式軟件的重點發展方向。面對如此復雜需求的軟件,深入研究基于STM32和RS422總線的伺服軟件測試方法,具有重要意義。該測試方法,充分利用測試資源,縮短軟件開發周期和成本,同時縮減軟件測試平臺搭建資金,進一步提高軟件測試水平和同行業競爭力。