白 靈,魏 磊,張文博,王曉東,王玉光
(1.北奔重型汽車集團有限公司,內蒙古 包頭 014030;2.內蒙古一機集團宏遠電器股份有限公司,內蒙古 包頭 014030)
某商用車組合儀表主要由指針表頭、TFT液晶顯示屏及指示符組成,偶爾會出現“死機”故障。故障現象為:指針儀表的指針指到某一位置不動作,液晶屏顯示數據不變,在這種情況下,關閉儀表“15”電,即將鑰匙擰到“OFF”擋,儀表沒有復位,還是維持“死機”故障現象;將鑰匙擰到“ON”擋,組合儀表還是維持“死機”故障現象;只有將整車電源總開關斷開后再接通,然后將鑰匙擰到“ON”擋,組合儀表重新啟動,各個指針儀表指針復位指示正常,液晶屏復位顯示正常,組合儀表功能恢復。
通過故障現象初步分析,儀表在發生“死機”故障的時候,儀表是在運行的,只是在執行一些高優先級的事件 (例如中斷和高優先級的任務等),不再執行一些低優先級事件。該儀表軟件的基本架構如下:AD數據采集任務——負責AD數據采集和鑰匙“15”電檢測;步進電機任務——負責步進電機的走位;顯示任務——負責液晶屏上具體位置的數據顯示;按鈕任務——負責按鈕的操作采集處理;加密驗證任務——負責驗證硬件和軟件是否合法保護客戶的權益;其余任務——負責其他功能,例如故障檢測、數據保存等,除此之外,還有一些中斷負責頻率信號的采集和提供時間基準。
我們在偶爾出現“死機”故障儀表軟件程序上增加測試點,以便準確找到出現故障的原因,分別在以下5處增加的測試點進行監控:①AD轉換任務;②其余任務中存儲里程任務;③按鈕任務;④加密驗證任務;⑤CAN芯片出現故障。
當再次出現“死機”故障時通過上述測試點監控發現,任務都是在等待時間片轉的時候出現,于是排除了在執行某個任務程序死循環后而造成的“死機”故障現象的情況,于是我們推測故障的原因就是中斷造成操作系統調度失敗或者失誤調度造成。
為此我們在臺架試驗臺上模擬制造了一個高優先級事件-20us的定時中斷,結果模擬出了儀表“死機”故障現象。軟件程序中對儀表“15”電的檢測屬于AD數據采集任務,優先級比中斷低,在出現故障的時候此AD采樣任務一直不能得到執行,即關閉儀表“15”電不能被正確檢測到,所以必須關閉“30”電,才能使儀表復位,恢復正常功能;同樣軟件架構中的顯示任務及步進電機任務也不會執行,所以液晶屏顯示不會變,指針儀表的指針會停留在出現故障前的位置,進一步確定了導致“死機”故障原因是中斷造成操作系統調度失敗。
這次我們修改了測試方法,通過可編程設置外部信號發生裝置,使車速和轉速信號變化得更無規律,在內部仿真環境下抓到了一次“死機”故障,確定儀表“死機”故障時操作系統任務調度失敗。進一步檢查發現,故障時操作系統任務調度中斷 (時基中斷)在調度的時候沒有正常退出,被轉速捕捉中斷打斷造成調度失敗,通過進一步分析發現要出現這個故障現象必須受轉速高低電平出現的時刻,又受時基中斷執行時刻,以及是否有任務的切換影響,因此很難在短時間內出現“故障”且無規律可尋。
通過上述故障分析、排查,確認“死機”故障是由中斷造成操作系統調度失敗而產生。當進入“時基中斷服務子程序”后,此階段需要任務調度、高優先級以及中斷產生的時候 (3個條件同時滿足)就會出現任務調度失敗,一旦失敗,以后所有的調度都不能正常執行,從故障現象上看如同“死機”,軟件流程如圖1所示。

圖1 優化前時基中斷軟件流程圖
從圖1可以看出,當進入“時基中斷服務子程序”后,此階段又需要任務調度且又有高優先級中斷產生的時候 (3個條件同時滿足)就會出現任務調度失敗,一旦失敗,后續所有的調度都不能正常執行,優化設置“時基中斷”優先級為最高,在執行任務調度的時候不會被別的中斷打斷造成任務調度失敗,如果有其他中斷在此時刻需要等到退出時基中斷后再執行相應的中斷服務程序,軟件流程圖如圖2所示。

圖2 優化后時基中斷軟件流程圖
隨著電子技術的發展,越來越多的先進技術也應用到儀表中,嵌入式軟件中斷在汽車儀表中得到了廣泛的應用,由于中斷執行具有隨機性,與硬件、環境和應用都有密切的關系,帶來的問題往往具有隱蔽性[2]。本文結合實車儀表的故障排查、原因分析及優化設計,為后續儀表設計中軟件中斷的應用積累了豐富的經驗。