版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PS 死機(jī)案例系統(tǒng)死機(jī)的典型案例n取數(shù)據(jù)異常n所有中斷均失效只有ARM核運(yùn)行n棧溢出,界外數(shù)據(jù)被破壞n數(shù)據(jù)越界訪問(wèn)n中斷被誤打開(kāi),并沒(méi)有清除中斷n不能等到寄存器置位或者清零n函數(shù)重入問(wèn)題n函數(shù)聲明和實(shí)現(xiàn)的接口不統(tǒng)一n雙處理器的同步問(wèn)題取數(shù)據(jù)異常非法指令非法指令Function A()Function B() Struct *pStr = (Struct *)m_malloc(sizeof(Struct); pStr-pC = A; . m_free(pStr);/不小心不小心free了了pStr,這時(shí)候這時(shí)候pStr指向的數(shù)據(jù)塊已指向的數(shù)據(jù)塊已經(jīng)被其他數(shù)據(jù)所填充經(jīng)被其他數(shù)據(jù)所填充 . pStr
2、-pC;/調(diào)用調(diào)用A,但實(shí)際跳轉(zhuǎn)到其他地址,可能進(jìn)入指令預(yù)取但實(shí)際跳轉(zhuǎn)到其他地址,可能進(jìn)入指令預(yù)取異常中斷,或者未定義指令異常中斷,或者程序跑飛(最麻煩的)異常中斷,或者未定義指令異常中斷,或者程序跑飛(最麻煩的)取數(shù)據(jù)異常取數(shù)據(jù)異常中止取數(shù)據(jù)異常中止(DataAbort)Function A() char *p = GetPointer(index);/GetPointer沒(méi)有寫(xiě)好,沒(méi)有寫(xiě)好,返回了一個(gè)非法的地址(亂七八糟的數(shù)據(jù))返回了一個(gè)非法的地址(亂七八糟的數(shù)據(jù)) . U8 q = *p;/CPU遇到從一個(gè)非法地址取數(shù)而產(chǎn)生遇到從一個(gè)非法地址取數(shù)而產(chǎn)生DataAbort異常,注意:如果是
3、異常,注意:如果是p=NULL是不會(huì)產(chǎn)生異常中斷的,是不會(huì)產(chǎn)生異常中斷的,必須是一個(gè)必須是一個(gè)CPU認(rèn)為的不能取數(shù)的地址認(rèn)為的不能取數(shù)的地址所有中斷均失效在607平臺(tái)老的Framework 上,有兩個(gè)現(xiàn)象1.在第一幅開(kāi)機(jī)動(dòng)畫(huà)處死機(jī)2.反復(fù)播放前一段開(kāi)機(jī)鈴聲3.任何按鍵沒(méi)有反應(yīng)系統(tǒng)無(wú)任何中斷產(chǎn)生,Melody部?jī)H反復(fù)播放最開(kāi)始送入的Midi數(shù)據(jù),對(duì)用戶來(lái)說(shuō)是“死機(jī)”,實(shí)際是ARM核在bloop()中執(zhí)行有限的幾行代碼。棧溢出,界外數(shù)據(jù)被破壞/#define SMS_NUM 10 /UTXXX SMS number#define SMS_NUM 50 /UTXXX SMS number.Funct
4、ion A SMSLog smsSMS_NUM;/僅僅修改宏定義是不夠的,必須察看與之有關(guān)的所有代碼 . memset(void *)sms, 0 xFF, SMS_NUM*SMS_SiZE);/棧后面可能有其他全局量,被“無(wú)辜”的賦為0 xFF .數(shù)據(jù)越界訪問(wèn)Function A . m = m_malloc(size); m+;/不小心+,可能是其他方式導(dǎo)致其+ memset(void *)m, 0, size);/堆中的數(shù)據(jù)被“無(wú)辜”破壞數(shù)據(jù)越界訪問(wèn)可以看到,緊挨在m后面的數(shù)據(jù)被無(wú)辜的破壞,導(dǎo)致系統(tǒng)在其他狀態(tài)下“死機(jī)”。所有的賦值語(yǔ)句都要慎重,特別是對(duì)某一地址指向的一段數(shù)據(jù)進(jìn)行賦值的時(shí)候
5、要特別小心。中斷被誤打開(kāi),且沒(méi)有清除中斷Function A SetTimeXInt(); /設(shè)置某個(gè)時(shí)鐘,產(chǎn)生周期性中斷 DisnableTimeXInt();/禁止該時(shí)鐘中斷(不需要該時(shí)鐘).Function B DisnableAllInt();/禁止所有中斷 . EnableAllInt();/使能所有中斷,誤打開(kāi)了TimeX中斷中斷被誤打開(kāi),且沒(méi)有清除中斷1.如果不需要該時(shí)鐘,那么就要把時(shí)鐘控制寄存器設(shè)置如果不需要該時(shí)鐘,那么就要把時(shí)鐘控制寄存器設(shè)置為禁止為禁止2.使能所有中斷是危險(xiǎn)的,必須使能那些需要使能的中使能所有中斷是危險(xiǎn)的,必須使能那些需要使能的中斷斷 U32 irqs =
6、ReadIntEnableReg(); WriteIntEnableReg(irqs);使得該時(shí)鐘中斷頻繁進(jìn)入,幾乎完全占用了使得該時(shí)鐘中斷頻繁進(jìn)入,幾乎完全占用了CPU的的MIPS,其他程序沒(méi)有機(jī)會(huì)執(zhí)行,從而表現(xiàn)出其他程序沒(méi)有機(jī)會(huì)執(zhí)行,從而表現(xiàn)出“死機(jī)死機(jī)”不能等到寄存器置位或者清零Function A while(1) if(U8)(*BBIO_XXXX_XXXX) = 0 x01) break;/如果等不到這么辦如果等不到這么辦 不能等到寄存器置位或者清#ifdef _DEBUGU32 nCount = 0;#endifFunction A #ifdef _DEBUG nCount =
7、0; #endif while(1) 一種可選的做法一種可選的做法 #ifdef _DEBUG nCount+; if(nCountXXXX) ASSERT(0);/做一個(gè)超時(shí)保護(hù)做一個(gè)超時(shí)保護(hù) #endif if(U8)(*BBIO_XXXX_XXXX) = 0 x01) break; 函數(shù)重入的問(wèn)題Function A . *BBIO_XXXX_XXXX |= 0 x08;/打開(kāi)打開(kāi)AD采樣電路采樣電路 while(*BBIO_YYYY_YYYY = 0 x0b);/采樣完成采樣完成 vol = *BBIO_ZZZZ_ZZZZ;/得到電壓得到電壓 *BBIO_XXXX_XXXX &
8、= 0 xF7;/關(guān)閉關(guān)閉AD采樣電路采樣電路如果函數(shù)如果函數(shù)c在調(diào)用在調(diào)用A時(shí),正在等待采樣完成,被中斷打斷,函時(shí),正在等待采樣完成,被中斷打斷,函數(shù)數(shù)D調(diào)用了調(diào)用了A,完成采樣之后,把采樣電路關(guān)閉了,完成采樣之后,把采樣電路關(guān)閉了,這樣函數(shù)這樣函數(shù)c就永遠(yuǎn)無(wú)法從就永遠(yuǎn)無(wú)法從A出來(lái)了。出來(lái)了。函數(shù)重入的問(wèn)題1.可以在函數(shù)內(nèi)部增加調(diào)試代碼,來(lái)找到重入可以在函數(shù)內(nèi)部增加調(diào)試代碼,來(lái)找到重入的證據(jù)的證據(jù)2.也可以在系統(tǒng)級(jí)別避免類似函數(shù)的重入問(wèn)題也可以在系統(tǒng)級(jí)別避免類似函數(shù)的重入問(wèn)題(避免中斷調(diào)用此函數(shù))(避免中斷調(diào)用此函數(shù))3.如果無(wú)法避免重入,那只好關(guān)中斷了如果無(wú)法避免重入,那只好關(guān)中斷了函數(shù)聲
9、明和實(shí)現(xiàn)的接口不統(tǒng)一XXX.hS8 A(U8 a, LP_U8 b, LP_U16 c);YYY.hU8 A(U8 a, LP_U8 b, LP_U16 c, U16 d);XXX.cS8 A(U8 a, LP_U8 b, LP_U16 c)雙處理器的同步問(wèn)題n雙處理器的通信方式(串口,雙口RAM等)n造成不能同步的原因往往是數(shù)據(jù)Buffer溢出,或者中斷丟掉n數(shù)據(jù)Buffer大小的合理設(shè)定,考慮“生產(chǎn)者”和“消費(fèi)者”的活動(dòng)狀態(tài);從系統(tǒng)角度考慮中斷優(yōu)先級(jí)的安排n兩邊同步失調(diào)可能會(huì)造成死機(jī)“死機(jī)”預(yù)防(最重要)絕大部分的“死機(jī)”可以通過(guò)仔細(xì)的設(shè)計(jì)和編碼預(yù)防主動(dòng)設(shè)置“陷阱”,主動(dòng)增加調(diào)試代碼,在任
10、何程序不該進(jìn)入的地方設(shè)置“陷阱”來(lái)“捕獲”它,一旦捕獲有更多的信息來(lái)分析(使用StackInsight工具)在一些看起來(lái)沒(méi)有任何問(wèn)題的地方也要設(shè)置“陷阱”(數(shù)據(jù)越界訪問(wèn)和棧溢出等導(dǎo)致看起來(lái)沒(méi)有問(wèn)題的地方也容易無(wú)辜牽連,這也是“死機(jī)”分析的突破口)“死機(jī)”預(yù)防系統(tǒng)軟件正常運(yùn)行圖系統(tǒng)軟件異常運(yùn)行圖“死機(jī)”預(yù)防主動(dòng)設(shè)置“陷阱”后的圖陷阱“陷阱”就是中止程序正常運(yùn)行的代碼。最常用的就是ASSERT(0);或者軟件中斷或者reset系統(tǒng)(release)“死機(jī)”分析n必現(xiàn)或者容易重現(xiàn)的“死機(jī)”分析,(Debug,代碼走讀,案例套用,版本比較)n落入陷阱的“死機(jī)”分析(StackInsight輸出文件)n沒(méi)有落入陷阱的,又很難重現(xiàn)的“死機(jī)”分析(陷阱沒(méi)有設(shè)置全,運(yùn)氣不好)。重復(fù)1-2個(gè)星期的專項(xiàng)測(cè)試,爭(zhēng)取重現(xiàn),如果還重現(xiàn)不了,就讓領(lǐng)導(dǎo)拍板是否可以量產(chǎn)?!八罊C(jī)”的“亡羊補(bǔ)牢”n“陷阱”處讓系統(tǒng)resetnWatchdog “偷偷”地reset#ifdef _DEBUG#define ASSERT(x) DebugAssert(.)#else#define ASSERT(x) (if(FALSE=(U32)x) reset_req()#end
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件選購(gòu)合同范本集錦
- 招標(biāo)文件互審數(shù)據(jù)表
- 公共設(shè)施清潔服務(wù)承包合同
- 仔豬購(gòu)銷合同簽訂步驟
- 水泥購(gòu)買協(xié)議格式
- 采購(gòu)合同的合同違約責(zé)任
- 個(gè)人三方借款合同欠條版
- 網(wǎng)吧會(huì)員包月上網(wǎng)服務(wù)協(xié)議
- 2024年票務(wù)代理服務(wù)及票務(wù)增值服務(wù)合作合同3篇
- 競(jìng)崗演講稿合集8篇
- 人教版(2024版)七年級(jí)上冊(cè)英語(yǔ)期末模擬測(cè)試卷 3套(含答案)
- 江蘇省鹽城市大豐區(qū)部分學(xué)校2024-2025學(xué)年九年級(jí)上學(xué)期12月調(diào)研考試化學(xué)試題(含答案)
- 《上課用的小動(dòng)物過(guò)冬》課件
- 2024版建筑工程設(shè)計(jì)居間協(xié)議3篇
- 醫(yī)學(xué)教程 梅毒
- 貴州省銅仁市2023-2024學(xué)年高二上學(xué)期期末質(zhì)量監(jiān)測(cè)試題 地理 含答案
- 2025屆新高考語(yǔ)文必背74篇古詩(shī)詞譯文(解析版)
- 《中國(guó)膿毒血癥指南》課件
- 4.3.1海氣相互作用課件高中地理湘教版(2019)選擇性必修1
- 2023年天津南開(kāi)區(qū)教育系統(tǒng)招聘筆試真題
- 問(wèn)題解決策略:歸納課件2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論