孫梧雨,龔 俊,袁 霞,陳栩睿
(中國(guó)兵器裝備集團(tuán)自動(dòng)化研究所有限公司,四川綿陽(yáng) 621000)
數(shù)據(jù)記錄系統(tǒng)可以對(duì)嵌入式系統(tǒng)的運(yùn)行狀態(tài)信息和數(shù)據(jù)進(jìn)行實(shí)時(shí)采集、存儲(chǔ)、傳輸和處理,支持建立系統(tǒng)數(shù)據(jù)維護(hù)管理體系,可以有效降低維護(hù)成本[1-4]。在近兩年自主國(guó)產(chǎn)化浪潮的背景下,對(duì)數(shù)據(jù)記錄系統(tǒng)的國(guó)產(chǎn)化率、存儲(chǔ)容量、處理速度、可靠性提出了更高的要求[5-6]。
eMMC 作為一種非易失性存儲(chǔ)器件,在其內(nèi)部集成存儲(chǔ)控制器,可以完成存儲(chǔ)塊的自我管理,其由于較高的讀寫速率、處理效率,在航空航天、金融電子行業(yè)有著廣泛應(yīng)用[7-9]。
文中針對(duì)基于eMMC 的數(shù)據(jù)記錄系統(tǒng)提出一種高可靠性的嵌入式軟件設(shè)計(jì)與實(shí)現(xiàn)方案,并通過(guò)實(shí)驗(yàn)驗(yàn)證了該軟件的可靠性,滿足國(guó)產(chǎn)高可靠數(shù)據(jù)記錄系統(tǒng)的設(shè)計(jì)需求。
基于國(guó)產(chǎn)eMMC 芯片的數(shù)據(jù)記錄系統(tǒng)可以為其他系統(tǒng)提供運(yùn)行過(guò)程的數(shù)據(jù)存儲(chǔ)功能,并支持上位機(jī)通過(guò)網(wǎng)絡(luò)讀取數(shù)據(jù)。數(shù)據(jù)記錄系統(tǒng)采用ARM+eMMC 架構(gòu),數(shù)據(jù)記錄系統(tǒng)結(jié)構(gòu)框圖如圖1 所示。微控制器負(fù)責(zé)主控模塊的數(shù)據(jù)收發(fā)、存儲(chǔ)控制、接口控制等功能,eMMC 存儲(chǔ)芯片選用容量為128 GB 的國(guó)產(chǎn)芯片TEE12833TW0,實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能,整個(gè)系統(tǒng)的國(guó)產(chǎn)化率超過(guò)95%。
圖1 數(shù)據(jù)記錄系統(tǒng)結(jié)構(gòu)框圖
數(shù)據(jù)記錄系統(tǒng)嵌入式軟件采用模塊化設(shè)計(jì)方法,主要功能模塊包括系統(tǒng)初始化模塊、系統(tǒng)功能調(diào)度任務(wù)、數(shù)據(jù)接收任務(wù)、數(shù)據(jù)存儲(chǔ)任務(wù)、數(shù)據(jù)讀取任務(wù)、系統(tǒng)自診斷任務(wù)和錯(cuò)誤處理任務(wù)。軟件體系架構(gòu)如圖2 所示。利用FreeRTOS 的多任務(wù)并行處理技術(shù),通過(guò)消息隊(duì)列和信號(hào)量的同步機(jī)制實(shí)現(xiàn)任務(wù)間的同步協(xié)作。
圖2 軟件體系架構(gòu)
系統(tǒng)初始化模塊流程如圖3 所示,首先開啟并檢查系統(tǒng)功能硬件,再開啟FreeRTOS 運(yùn)行周期進(jìn)行任務(wù)調(diào)度。需要特別注意的是,eMMC 上電時(shí)需要先讀取eMMC 存儲(chǔ)卡,判斷是否已經(jīng)存在數(shù)據(jù)文件,如存在數(shù)據(jù)文件,則跳過(guò)eMMC 初始化流程,避免系統(tǒng)重新上電后誤擦除已有數(shù)據(jù)。
圖3 系統(tǒng)初始化流程圖
系統(tǒng)功能調(diào)度任務(wù)負(fù)責(zé)根據(jù)從其他任務(wù)中傳來(lái)的事件消息開啟相應(yīng)的功能任務(wù),系統(tǒng)功能調(diào)度任務(wù)流程圖如圖4 所示。由于系統(tǒng)運(yùn)行過(guò)程中,數(shù)據(jù)接收的時(shí)間可能是隨機(jī)的,為了保證系統(tǒng)運(yùn)行的高效性和避免不必要的系統(tǒng)開支,在系統(tǒng)功能調(diào)度任務(wù)中建立一個(gè)消息指針隊(duì)列,用于等待事件消息。只有當(dāng)接收到數(shù)據(jù)接收成功消息時(shí)才開啟數(shù)據(jù)存儲(chǔ)任務(wù),接收到錯(cuò)誤數(shù)據(jù)時(shí)打開錯(cuò)誤處理任務(wù),接收到讀取存儲(chǔ)數(shù)據(jù)指令時(shí)打開相應(yīng)的數(shù)據(jù)讀取任務(wù),這些任務(wù)都在各自的處理函數(shù)中進(jìn)行關(guān)閉和資源回收。另外,系統(tǒng)功能調(diào)度任務(wù)對(duì)系統(tǒng)數(shù)據(jù)接收狀態(tài)進(jìn)行監(jiān)控,存儲(chǔ)系統(tǒng)的數(shù)據(jù)來(lái)源由外部設(shè)備周期性地輸入,若超過(guò)一定時(shí)間沒有接收到數(shù)據(jù)正確讀取的事件消息,則開啟錯(cuò)誤處理任務(wù)提示操作員。最后,系統(tǒng)功能調(diào)度任務(wù)負(fù)責(zé)周期性地喂看門狗,防止 系統(tǒng)程序跑飛。
圖4 系統(tǒng)功能調(diào)度任務(wù)流程圖
數(shù)據(jù)存取任務(wù)的關(guān)鍵在于對(duì)數(shù)據(jù)的可靠寫入和讀取,F(xiàn)reeRTOS 的內(nèi)核不帶文件系統(tǒng),為提升開發(fā)效率,在設(shè)計(jì)中加入高效、資源占用率低、專為小型嵌入式系統(tǒng)設(shè)計(jì)的文件管理系統(tǒng)FATFS[10-13]。在數(shù)據(jù)存儲(chǔ)過(guò)程中,對(duì)文件系統(tǒng)工作狀態(tài)進(jìn)行實(shí)時(shí)檢測(cè),對(duì)寫入的文件進(jìn)行重讀校驗(yàn)檢查,確保每幀數(shù)據(jù)的完整性,一旦發(fā)現(xiàn)錯(cuò)誤,則打開相應(yīng)的錯(cuò)誤處理任務(wù)。
為了保證系統(tǒng)的穩(wěn)定運(yùn)行,對(duì)系統(tǒng)狀態(tài)進(jìn)行周期性檢查,若出現(xiàn)電壓和芯片溫度超限的情況,則打開錯(cuò)誤處理任務(wù),打開對(duì)應(yīng)的錯(cuò)誤指示燈并記錄錯(cuò)誤信息。圖5 表示系統(tǒng)自診斷任務(wù)流程。
圖5 系統(tǒng)自診斷任務(wù)流程圖
從系統(tǒng)安全的角度分析,最佳的錯(cuò)誤處理策略是盡可能地避錯(cuò),如果無(wú)法避錯(cuò),應(yīng)該有相應(yīng)的報(bào)警措施[14-16]。為了提高系統(tǒng)運(yùn)行的可靠性,根據(jù)不同錯(cuò)誤對(duì)系統(tǒng)功能的影響程度對(duì)錯(cuò)誤進(jìn)行分級(jí)處理,錯(cuò)誤處理任務(wù)流程圖如圖6 所示。當(dāng)有錯(cuò)誤發(fā)生時(shí),首先在存儲(chǔ)芯片中建立的特定錯(cuò)誤日志文件中進(jìn)行記錄,記錄下錯(cuò)誤發(fā)生的時(shí)間戳信息。對(duì)于高風(fēng)險(xiǎn)錯(cuò)誤,系統(tǒng)點(diǎn)亮有特定占空比和顏色的指示燈,此時(shí)必須由操作員重啟系統(tǒng)才能關(guān)閉錯(cuò)誤指示燈提示;對(duì)于中風(fēng)險(xiǎn)錯(cuò)誤,規(guī)定報(bào)警運(yùn)行時(shí)間不得低于1 小時(shí);對(duì)于不影響系統(tǒng)運(yùn)行和文件數(shù)據(jù)讀寫的低風(fēng)險(xiǎn)錯(cuò)誤,則點(diǎn)亮對(duì)應(yīng)指示燈10 s,當(dāng)完成記錄和點(diǎn)亮指示燈后,關(guān)閉這個(gè)錯(cuò)誤處理任務(wù)進(jìn)程,數(shù)據(jù)記錄系統(tǒng)的錯(cuò)誤分級(jí)標(biāo)準(zhǔn)如圖7 所示。
圖6 錯(cuò)誤處理任務(wù)流程圖
圖7 錯(cuò)誤分類標(biāo)準(zhǔn)
為了驗(yàn)證系統(tǒng)軟件的有效性和可靠性,將數(shù)據(jù)記錄系統(tǒng)放置于高低溫試驗(yàn)箱,兩路數(shù)據(jù)接收接口通過(guò)UART 分別與兩個(gè)專用測(cè)試設(shè)備相連接,測(cè)試設(shè)備周期性地發(fā)送模擬數(shù)據(jù)至數(shù)據(jù)記錄系統(tǒng)。數(shù)據(jù)記錄系統(tǒng)另一側(cè)通過(guò)以太網(wǎng)接口連接至上位機(jī),用于接收數(shù)據(jù)讀取指令,并根據(jù)讀取指令返回特定的存儲(chǔ)數(shù)據(jù),實(shí)驗(yàn)過(guò)程中改變系統(tǒng)環(huán)境溫度,檢測(cè)系統(tǒng)對(duì)溫度的適應(yīng)性。系統(tǒng)測(cè)試時(shí)設(shè)備連接示意圖如圖8 所示。
圖8 系統(tǒng)測(cè)試連接示意圖
在測(cè)試設(shè)備的發(fā)送數(shù)據(jù)中按照0.001%的概率隨機(jī)加入錯(cuò)誤數(shù)據(jù),最后通過(guò)查驗(yàn)比對(duì)測(cè)試設(shè)備的錯(cuò)誤數(shù)據(jù)信息和數(shù)據(jù)記錄系統(tǒng)錯(cuò)誤信息日志,確定系統(tǒng)對(duì)錯(cuò)誤數(shù)據(jù)的檢測(cè)概率。
測(cè)得的系統(tǒng)性能參數(shù)如表1 所示。
表1 系統(tǒng)性能參數(shù)
針對(duì)當(dāng)前武器系統(tǒng)數(shù)據(jù)記錄單元國(guó)產(chǎn)化和可靠性提出的更高需求,文中采用ARM+eMMC 架構(gòu),設(shè)計(jì)并實(shí)現(xiàn)了一種針對(duì)國(guó)產(chǎn)數(shù)據(jù)記錄單元的高可靠嵌入式軟件,文中對(duì)軟件系統(tǒng)架構(gòu)和各個(gè)功能模塊的設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行了詳實(shí)的說(shuō)明。為保證系統(tǒng)的可靠性,在各個(gè)模塊的設(shè)計(jì)中加入防錯(cuò)及報(bào)警措施,并利用事件消息隊(duì)列和系統(tǒng)調(diào)度節(jié)省了軟件資源。文中提供了一種可行的針對(duì)國(guó)產(chǎn)數(shù)據(jù)記錄單元的高可靠軟件方案,經(jīng)過(guò)測(cè)試證明了該方案的有效性。同時(shí)該軟件已經(jīng)在某武器系統(tǒng)中得到應(yīng)用,大量的測(cè)試也證明了該方案的有效性和魯棒性。