MTK系統錯誤型別

2021-05-24 23:20:25 字數 1497 閱讀 5059

mastervon 發表於 2010-8-14 9:55:00系統錯誤中有兩種典型的分類,一種是cpu觸發的系統錯誤,另外一種是軟體觸發的系統錯誤。(其實我覺得這兩種錯誤沒什麼區別。靠!什麼叫cpu觸發?什麼叫軟體觸發?這兩種分類有意義嗎?對我們除錯有幫助嗎?答案是一點幫助都沒有!我debug了這麼多年,不覺得分類有什麼用。其實「觸發」不如換成用「檢測」,一種是cpu檢測到的,另外一種是軟體中檢測到的。管它是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使用系統timer

首先,定義自己的timer typedef struct mytimeritem mytimer 在檔案timerevents.h裡有乙個enum,叫做mmi timer ids,它存放了所有timer的索引,如果想要使用乙個自己的timer,就要在這個enum時加上自己的一項.一般加在後面,即ma...

mtk 新增app編譯進系統

總之都在devices下,直接搜名字就可以搜到 z wangdh work alps mp n0.mp1 v1.0.2 aeon6737m 65 d n alps device mediatek common device.mk z wangdh work alps mp n0.mp1 v1.0.2...

if not isnull 型別錯誤

private sub datagrid1 beforecolupdate byval colindex as integer,oldvalue as variant,cancel as integer if 明細金額對賬 1 then dim 數量回單 as variant dim 單價修正 as...