MTK系統錯誤類型分析
MTK系統錯誤類型分析是本文要介紹的內容,主要是來了解MTK系統中出現的問題,系統錯誤中有兩種典型的分類,一種是CPU觸發的系統錯誤,另外一種是軟件觸發的系統錯誤。
1、CPU觸發(檢測到)的系統錯誤
Undefined Instruction Exception(沒有定義的指令錯誤)
本來的意思是指:ARM解析不了當前指令如何執行,換句話說,當前指令不屬于ARM指令集。但是大家看到這里會感到納悶,這種錯誤怎么可能會發生?除非ADS和RVCT等編譯器出現bug,否則這種錯誤不可能沒有在編譯階段里揪出來。這些編譯器吃白米飯的么,連是不是ARM的指令集里的指令還不知道嗎?所以出現這種錯誤一定不是代碼的問題。出現這種錯誤很可能是程序跑飛,跑到data區域執行了。跑飛的原因有很多,如函數指針問題,或者局部變量溢出把堆棧中的函數返回地址寫壞了,等等
Software Interrupt Exception
給大家先看看有趣的東東,MTK介紹SWI exception類型時寫的:
- The software interrupt instruction (SWI) is used to enter Supervisor mode,
- usually to request a particular supervisor function.
借問各位大俠,從上面那段話能知道SWI是exception么?我實在是忍無可忍,甚至達到了抓狂的程度。看了上面的解釋,完全搞不懂SWI與exception有絲毫關系。SWI其實可以解釋為軟件觸發中斷,但在MTK的系統中,不會用到這種軟中斷。所以假設軟中斷被觸發了,一定是程序跑飛了。到此,大家終于明白SWI為什么也算是exception一種了。
Pre-fetch Abort Exception
預取指令錯誤是指CPU從RAM或者ROM中讀取指令時,所提供的地址是個非法地址(RAM和ROM以外的地址)。一般是函數指針問題,或者局部變量溢出把堆棧中的函數返回地址寫壞了,等等
Data Abort Exception
數據錯誤是指訪問RAM或ROM中數據時,所提供的地址是個非法地址(RAM和ROM以外的地址)。一般是數據指針出現問題。
2、軟件觸發(檢測到)的系統錯誤
Assert Error
程序員在代碼中埋的Assert語句,在MTK代碼中有3種:ASSERT(),EXT_ASSERT(),EXT_ASSERT_DUMP()
Fatal Error
可以理解為寫在KAL層中的Assert語句,這是MTK的System工程師在KAL層埋的一些Assert語句。KAL層是系統的適配層,因此在這層里面出現問題,一般都是與系統的異常相關。如:ctrl buffer不足,外部隊列滿了之類的錯誤
System Lockup
文檔中是寫系統掛起。小弟不才,debug這么多年都未能與這種異常邂逅。
小結:MTK系統錯誤類型分析的內容介紹完了,希望通過本文的學習能對你有所幫助!