版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)開發(fā)過程中的韋東山調(diào)試絕招韋東山從業(yè)20年,15年嵌入式培訓(xùn)經(jīng)驗(yàn),涉及Linux、FreeRTOS、RT-Thread等,專注于嵌入式操作系統(tǒng)。主題絕招1:?;厮菰砑笆纠^招2:修改bin文件自己實(shí)現(xiàn)斷點(diǎn)直播對(duì)應(yīng)的源碼,請(qǐng)加微信索取一、?;厮輧?nèi)容:棧回溯的原理修改異常處理函數(shù)打印棧內(nèi)容示例:手工分析棧,找出函數(shù)調(diào)用關(guān)系?;厮莸脑碚{(diào)試程序時(shí),經(jīng)常發(fā)生這類錯(cuò)誤:讀寫某個(gè)地址,導(dǎo)致程序崩潰調(diào)用某個(gè)空函數(shù),導(dǎo)致程序崩潰在異常處理函數(shù)中,可以打印出”發(fā)生錯(cuò)誤瞬間”的所有寄存器我們調(diào)試時(shí),可以根據(jù)這些寄存器,知道發(fā)生錯(cuò)誤的位置。但是,光知道發(fā)生錯(cuò)誤的位置還不夠!比如,根據(jù)打印信息知道在C函數(shù)里發(fā)
2、生錯(cuò)誤,但是你無法確定是在哪個(gè)調(diào)用鏈上出錯(cuò):A B C時(shí)出錯(cuò)? D C時(shí)出錯(cuò)?我們希望得到:出錯(cuò)時(shí)的函數(shù)調(diào)用關(guān)系怎么辦?分析棧!C語言函數(shù)的返回地址,保存在棧里棧內(nèi)容示例2. 修改異常處理函數(shù)打印棧內(nèi)容發(fā)生錯(cuò)誤時(shí),異常函數(shù)如何處理?太浪費(fèi)!我們可以打印更多信息!發(fā)生錯(cuò)誤時(shí),棧的使用情況修改HardFault_HandlerIMPORT rt_hw_hard_fault_exception EXPORT HardFault_HandlerHardFault_Handler PROC ; get current context TST lr, #0 x04 ; if(!EXC_RETURN2) I
3、TE EQ MRSEQ r0, msp ; 2=0 = Z=1, get fault context from handler. MRSNE r0, psp ; 2=1 = Z=0, get fault context from thread. STMFD r0!, r4 - r11 ; push r4 - r11 register STMFD r0!, lr ; push exec_return register TST lr, #0 x04 ; if(!EXC_RETURN2) ITE EQ MSREQ msp, r0 ; 2=0 = Z=1, update stack pointer t
4、o MSP. MSRNE psp, r0 ; 2=1 = Z=0, update stack pointer to PSP. PUSH lr BL rt_hw_hard_fault_exception POP lr ORR lr, lr, #0 x04 BX lr ENDP打印寄存器和棧3.示例:手工分析棧,找出函數(shù)調(diào)用關(guān)系要分析棧,需要得到程序的反匯編碼fromelf -text -a -c -output=all.dis F103_ModuelF103_Moduel.axf 3.1 根據(jù)PC值在反匯編文件中找到發(fā)生錯(cuò)誤的位置3.2 發(fā)現(xiàn)函數(shù)C太簡(jiǎn)單,它根本沒有使用棧, 函數(shù)C執(zhí)行完,直接返
5、回到LR。 在打印的信息中,LR=0 x08000383,去掉bit0,就是:0 x08000382 根據(jù)這個(gè)值,在反匯編文件中找到函數(shù)C的調(diào)用者,是函數(shù)B3.3 在函數(shù)B的入口處,發(fā)現(xiàn)使用了8字節(jié)的棧,并且保存了LR3.4 分析函數(shù)B的棧:確定返回地址LR=0 x08000355,bit0清零后就是0 x080003543.5 在反匯編中搜0 x08000354 ,確定函數(shù)B的返回地址是函數(shù)A3.6 在函數(shù)A的入口處,發(fā)現(xiàn)使用了8字節(jié)的棧,并且保存了LR3.7 分析函數(shù)A的棧:確定返回地址LR=0 x08001d99,bit0清零后就是0 x08001d98 這是TestDebug函數(shù)3.8 最終,調(diào)用鏈為:TestDebugABC主題內(nèi)容二、修改bin文件實(shí)現(xiàn)斷點(diǎn)內(nèi)容:什么情況下需要打斷點(diǎn)怎樣人為觸發(fā)斷點(diǎn)修改異常處理函數(shù)打印寄存器和棧內(nèi)容修改bin文件觸發(fā)異常什么情況下需要打斷點(diǎn) 沒有調(diào)試器 不方便使用調(diào)試器 想查看代碼任意位置的狀態(tài)2. 怎樣人為觸發(fā)斷點(diǎn) 修改原來的代碼 改為swi指令,F(xiàn)reeRTOS已經(jīng)使用它 改為未定義指令3. 修改異常處理函數(shù)打印寄存器和棧內(nèi)容4. 修改bin文件要修改bin文件,需要先得到bin文件:fromelf -bin -output=test.bin F103_Mod
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六下語文古詩(shī)教學(xué)課件教學(xué)課件教學(xué)
- 三年級(jí)語文第26課課件教學(xué)課件教學(xué)
- 2024年酒泉客運(yùn)從業(yè)資格證考試培訓(xùn)試題和答案
- 生理健康課件教學(xué)課件
- 2024年嘉峪關(guān)道路旅客運(yùn)輸駕駛員從業(yè)資格考試題庫(kù)
- 2025屆四川省成都市實(shí)驗(yàn)高級(jí)中學(xué)生物高二上期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 2024年福建客運(yùn)資格專業(yè)能力考試考什么
- 2025屆江西省臨川一中南昌二中九江一中新余一中等九校重點(diǎn)中學(xué)協(xié)作體語文高三上期末調(diào)研試題含解析
- 2025屆江西省撫州第一中學(xué)生物高三上期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 2025屆福建省漳州市東山第二中學(xué)高三生物第一學(xué)期期末監(jiān)測(cè)試題含解析
- 冬季安全生產(chǎn)特點(diǎn)及預(yù)防措施
- 視頻短片制作合同范本
- 抑郁癥與睡眠障礙課件
- 供應(yīng)鏈墊資采購(gòu)合同范本
- 內(nèi)部控制學(xué)李曉慧課后參考答案
- 大學(xué)生安全教育(在校篇)學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2023年
- 如何“泡”開詩(shī)歌公開課一等獎(jiǎng)市賽課獲獎(jiǎng)?wù)n件
- RTL8365MB-CG-DataSheet-1.2英文完整版本
- 中班科學(xué)《森林運(yùn)動(dòng)會(huì)》 課件
- 幼兒園每月食品安全調(diào)度會(huì)議紀(jì)要模板5
- 升降機(jī)安全管理培訓(xùn)
評(píng)論
0/150
提交評(píng)論