資料介紹
? 嵌入式系統(tǒng)除錯(cuò)的工作量,可望占了嵌入式軟體專案工作量的一半以上。了解硬體除錯(cuò)功能以及它們所能解決的問題,是選擇正確的晶片、建立除錯(cuò)系統(tǒng)以及提高生產(chǎn)效率的關(guān)鍵。
很多人都相信“臭蟲(bug)”此一用詞起源于海軍少將 Grace Murray Hopper。但事實(shí)上,沒人知道這種用法的真正來源,它可能可以回溯到 Thomas A Edison,或甚至更早。美國海軍后備役軍官 Hopper 在 1945 年 9 月 9 日于哈佛大學(xué)對(duì) Mark II Aiken 繼電計(jì)算器( Relay Calculator)進(jìn)行測試時(shí),于短路的 Panel F #70 號(hào)繼電器處發(fā)現(xiàn)了一雙臭蟲。她把這只臭蟲拿掉后(就是對(duì)電腦進(jìn)行除臭蟲(debugging)),就解決了這臺(tái)機(jī)器不定時(shí)關(guān)機(jī)的故障(參考文獻(xiàn) 1)。雖然這個(gè)早期的例子指的是從系統(tǒng)硬體中去除臭蟲,但今天“debugging”這個(gè)詞是指發(fā)現(xiàn)一個(gè)程式的問題,并去掉缺陷代碼(defective code)的過程。這些問題包括任何與原始意向的差異,而去掉缺陷代碼的做法則遠(yuǎn)優(yōu)于增加糾正代碼(correction code)。理想情況下,在任何時(shí)間都可以獲得所有的特性(如系統(tǒng)的匯流排與暫存器值),供監(jiān)控與修改。但隨著 IC 轉(zhuǎn)向 SoC,可存取性(accessibility)就變得更加困難了。
對(duì)硬體除錯(cuò),是要盡可能地可以存取到嵌入式系統(tǒng)內(nèi)部資源,這可以透過觀察系統(tǒng)的特性,如 CPU 狀態(tài)和 PC 值,或修改系統(tǒng)的參數(shù)。在嵌入式系統(tǒng)設(shè)計(jì)的早期可以用簡單技術(shù)進(jìn)行除錯(cuò),如記錄(logging)與監(jiān)控,或者對(duì)多核心 SoC而言,可以采用最新開發(fā)的方法,如跟蹤、緩衡記憶體除錯(cuò)(cache debugging)和交叉觸發(fā)(cross-triggering)等。本文的重點(diǎn)不是在如何編寫代碼或?yàn)榇a除錯(cuò),而是描述現(xiàn)在可用的嵌入式硬體硅智財(cái)權(quán)(intellectual property ,IP),以及該 IP 能解決哪方面的除錯(cuò)問題。
記錄與監(jiān)控
最古老也是最常用的除錯(cuò)方法就是在代碼中增加一些列印敘述(print statement),它可以顯示軟體某個(gè)部分的執(zhí)行資訊,并提供暫存器和變數(shù)的實(shí)際值。這可能是一年級(jí)學(xué)生練習(xí)“hello world”的一種延續(xù),該程式會(huì)在熒幕上顯示這兩個(gè)詞,用于表示程式能夠運(yùn)行,以及執(zhí)行到了某個(gè)點(diǎn)。列印敘述(或 printf 語句)只是記錄的一種變型,它是用處理器將重要資訊寫入一個(gè)“管道(pipe)”,作為外部跟蹤的過程。所使用的管道將視系統(tǒng)而訂,在 printf 情況下,管道是標(biāo)準(zhǔn)的輸出(熒幕),但它也可以是 UART、USB,甚至是通用 I/O。
當(dāng)你需要用一種對(duì)程式設(shè)計(jì)工程師有意義的方式,組織各個(gè)部分資訊時(shí)(例如提供感測器資訊或狀態(tài)機(jī)的轉(zhuǎn)換),采用記錄的方法是很有價(jià)值的??梢杂糜涗浌ぞ邅矸治鲇涗浀馁Y訊,并產(chǎn)生一個(gè)后處理資料庫。必須小心使用記錄功能才能獲得高效率。例如,記錄資訊應(yīng)使用關(guān)鍵字開頭,如“警告”、“錯(cuò)誤”或“除錯(cuò)”等,并應(yīng)能識(shí)別出資訊的建立者。應(yīng)將記錄功能劃分為一小組檔案,以便于維護(hù),并提供時(shí)間戳資訊。不幸的是,記錄是一種侵入性的方法,它會(huì)修改軟體的即時(shí)狀態(tài),因而不同于最終應(yīng)用。
除錯(cuò)監(jiān)控器是另一種常見的除錯(cuò)工具,它與運(yùn)行在 CPU 記憶體中的目標(biāo)代碼一起工作(參考文獻(xiàn) 2 和參考文獻(xiàn) 3)。除錯(cuò)器運(yùn)行在一臺(tái)主機(jī)上,它透過一個(gè)專用的埠發(fā)送指令和接收響應(yīng),從而達(dá)到與監(jiān)控器通信的目的??梢詫?Linux 上的 gdbserver 程式當(dāng)作一個(gè)除錯(cuò)監(jiān)控器,不過它比早期的 ROM 監(jiān)控器更復(fù)雜
?。▓D 1)。

當(dāng)使用者希望在某條指令處設(shè)置一個(gè)中斷點(diǎn)時(shí),gdbserver 會(huì)保存該指令,而用一個(gè)系統(tǒng)呼叫(system call)來替代它。Gdbserver 然后用 Linux 的 ptrace 程式獲得所有進(jìn)行系統(tǒng)呼叫的應(yīng)用程式資訊。接著,當(dāng)發(fā)生系統(tǒng)呼叫而啟動(dòng)中斷點(diǎn)時(shí),gdbserver 可以取得對(duì)被除錯(cuò)應(yīng)用的控制。除錯(cuò)器運(yùn)行在一臺(tái)主控機(jī)上,透過串列埠或乙太網(wǎng)路連接到目標(biāo)物件(參考文獻(xiàn) 4)。監(jiān)控器的方法既便宜又實(shí)用,但也有一些缺點(diǎn),例如需要在進(jìn)行任何除錯(cuò)前載入代碼,并可能與應(yīng)用軟體相互影響。如果代碼位于快閃記憶體中就不能使用監(jiān)控器軟體,因?yàn)橐迦胲涹w中斷點(diǎn)就需要修補(bǔ)應(yīng)用軟體。
很多人都相信“臭蟲(bug)”此一用詞起源于海軍少將 Grace Murray Hopper。但事實(shí)上,沒人知道這種用法的真正來源,它可能可以回溯到 Thomas A Edison,或甚至更早。美國海軍后備役軍官 Hopper 在 1945 年 9 月 9 日于哈佛大學(xué)對(duì) Mark II Aiken 繼電計(jì)算器( Relay Calculator)進(jìn)行測試時(shí),于短路的 Panel F #70 號(hào)繼電器處發(fā)現(xiàn)了一雙臭蟲。她把這只臭蟲拿掉后(就是對(duì)電腦進(jìn)行除臭蟲(debugging)),就解決了這臺(tái)機(jī)器不定時(shí)關(guān)機(jī)的故障(參考文獻(xiàn) 1)。雖然這個(gè)早期的例子指的是從系統(tǒng)硬體中去除臭蟲,但今天“debugging”這個(gè)詞是指發(fā)現(xiàn)一個(gè)程式的問題,并去掉缺陷代碼(defective code)的過程。這些問題包括任何與原始意向的差異,而去掉缺陷代碼的做法則遠(yuǎn)優(yōu)于增加糾正代碼(correction code)。理想情況下,在任何時(shí)間都可以獲得所有的特性(如系統(tǒng)的匯流排與暫存器值),供監(jiān)控與修改。但隨著 IC 轉(zhuǎn)向 SoC,可存取性(accessibility)就變得更加困難了。
對(duì)硬體除錯(cuò),是要盡可能地可以存取到嵌入式系統(tǒng)內(nèi)部資源,這可以透過觀察系統(tǒng)的特性,如 CPU 狀態(tài)和 PC 值,或修改系統(tǒng)的參數(shù)。在嵌入式系統(tǒng)設(shè)計(jì)的早期可以用簡單技術(shù)進(jìn)行除錯(cuò),如記錄(logging)與監(jiān)控,或者對(duì)多核心 SoC而言,可以采用最新開發(fā)的方法,如跟蹤、緩衡記憶體除錯(cuò)(cache debugging)和交叉觸發(fā)(cross-triggering)等。本文的重點(diǎn)不是在如何編寫代碼或?yàn)榇a除錯(cuò),而是描述現(xiàn)在可用的嵌入式硬體硅智財(cái)權(quán)(intellectual property ,IP),以及該 IP 能解決哪方面的除錯(cuò)問題。
記錄與監(jiān)控
最古老也是最常用的除錯(cuò)方法就是在代碼中增加一些列印敘述(print statement),它可以顯示軟體某個(gè)部分的執(zhí)行資訊,并提供暫存器和變數(shù)的實(shí)際值。這可能是一年級(jí)學(xué)生練習(xí)“hello world”的一種延續(xù),該程式會(huì)在熒幕上顯示這兩個(gè)詞,用于表示程式能夠運(yùn)行,以及執(zhí)行到了某個(gè)點(diǎn)。列印敘述(或 printf 語句)只是記錄的一種變型,它是用處理器將重要資訊寫入一個(gè)“管道(pipe)”,作為外部跟蹤的過程。所使用的管道將視系統(tǒng)而訂,在 printf 情況下,管道是標(biāo)準(zhǔn)的輸出(熒幕),但它也可以是 UART、USB,甚至是通用 I/O。
當(dāng)你需要用一種對(duì)程式設(shè)計(jì)工程師有意義的方式,組織各個(gè)部分資訊時(shí)(例如提供感測器資訊或狀態(tài)機(jī)的轉(zhuǎn)換),采用記錄的方法是很有價(jià)值的??梢杂糜涗浌ぞ邅矸治鲇涗浀馁Y訊,并產(chǎn)生一個(gè)后處理資料庫。必須小心使用記錄功能才能獲得高效率。例如,記錄資訊應(yīng)使用關(guān)鍵字開頭,如“警告”、“錯(cuò)誤”或“除錯(cuò)”等,并應(yīng)能識(shí)別出資訊的建立者。應(yīng)將記錄功能劃分為一小組檔案,以便于維護(hù),并提供時(shí)間戳資訊。不幸的是,記錄是一種侵入性的方法,它會(huì)修改軟體的即時(shí)狀態(tài),因而不同于最終應(yīng)用。
除錯(cuò)監(jiān)控器是另一種常見的除錯(cuò)工具,它與運(yùn)行在 CPU 記憶體中的目標(biāo)代碼一起工作(參考文獻(xiàn) 2 和參考文獻(xiàn) 3)。除錯(cuò)器運(yùn)行在一臺(tái)主機(jī)上,它透過一個(gè)專用的埠發(fā)送指令和接收響應(yīng),從而達(dá)到與監(jiān)控器通信的目的??梢詫?Linux 上的 gdbserver 程式當(dāng)作一個(gè)除錯(cuò)監(jiān)控器,不過它比早期的 ROM 監(jiān)控器更復(fù)雜
?。▓D 1)。

當(dāng)使用者希望在某條指令處設(shè)置一個(gè)中斷點(diǎn)時(shí),gdbserver 會(huì)保存該指令,而用一個(gè)系統(tǒng)呼叫(system call)來替代它。Gdbserver 然后用 Linux 的 ptrace 程式獲得所有進(jìn)行系統(tǒng)呼叫的應(yīng)用程式資訊。接著,當(dāng)發(fā)生系統(tǒng)呼叫而啟動(dòng)中斷點(diǎn)時(shí),gdbserver 可以取得對(duì)被除錯(cuò)應(yīng)用的控制。除錯(cuò)器運(yùn)行在一臺(tái)主控機(jī)上,透過串列埠或乙太網(wǎng)路連接到目標(biāo)物件(參考文獻(xiàn) 4)。監(jiān)控器的方法既便宜又實(shí)用,但也有一些缺點(diǎn),例如需要在進(jìn)行任何除錯(cuò)前載入代碼,并可能與應(yīng)用軟體相互影響。如果代碼位于快閃記憶體中就不能使用監(jiān)控器軟體,因?yàn)橐迦胲涹w中斷點(diǎn)就需要修補(bǔ)應(yīng)用軟體。
嵌入式系統(tǒng)
加入交流群
掃碼添加小助手
加入工程師交流群
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式系統(tǒng)系列叢書-時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式 0次下載
- 嵌入式軟件接口怎么測試,嵌入式系統(tǒng)接口測試策略.doc
- 嵌入式系統(tǒng)分析與設(shè)計(jì)
- 嵌入式系統(tǒng)定義
- 嵌入式系統(tǒng)與嵌入式PLC
- 嵌入式系統(tǒng)與嵌入式PLC 29次下載
- 嵌入式系統(tǒng)是如何組成的
- 嵌入式系統(tǒng)接口與案例的分析與設(shè)計(jì)資料說明 3次下載
- 嵌入式操作系統(tǒng)的介紹和嵌入式操作系統(tǒng)的發(fā)展?fàn)顩r和應(yīng)用前景說明
- 嵌入式Linux系統(tǒng)開發(fā)教程及案例分析 7次下載
- TI的嵌入式分析技術(shù)使設(shè)備更加智能 13次下載
- 實(shí)例分析嵌入式系統(tǒng)電源設(shè)計(jì) 5次下載
- 嵌入式系統(tǒng)設(shè)計(jì)師考試大綱及試題
- 嵌入式系統(tǒng)設(shè)計(jì)師備考策略
- 嵌入式系統(tǒng)關(guān)鍵技術(shù)分析與開發(fā)應(yīng)用
- 什么是嵌入式系統(tǒng)?嵌入式系統(tǒng)的具體應(yīng)用 4k次閱讀
- 嵌入式系統(tǒng)應(yīng)用實(shí)例的詳細(xì)資料介紹 5.5k次閱讀
- 嵌入式系統(tǒng)的全面解析 3.7k次閱讀
- 如何實(shí)現(xiàn)嵌入式系統(tǒng)遠(yuǎn)程調(diào)試 6.7k次閱讀
- 嵌入式系統(tǒng)的規(guī)范發(fā)展回顧 2.2k次閱讀
- 關(guān)于嵌入式系統(tǒng)以及嵌入式平臺(tái)下的學(xué)科分工詳解 2.4k次閱讀
- 關(guān)于嵌入式系統(tǒng)8大關(guān)鍵特性詳解 1.3k次閱讀
- 嵌入式系統(tǒng)的特點(diǎn)大匯總 6.5k次閱讀
- 嵌入式系統(tǒng)有哪些部分組成_嵌入式系統(tǒng)的應(yīng)用領(lǐng)域 3.5w次閱讀
- 嵌入式行業(yè)發(fā)展?fàn)顩r_嵌入式行業(yè)人才需求_嵌入式系統(tǒng)就業(yè)前景分析 2.5w次閱讀
- 什么是嵌入式操作系統(tǒng) 常見的嵌入式系統(tǒng)有哪些 4.1w次閱讀
- 嵌入式操作系統(tǒng)是什么_嵌入式操作系統(tǒng)有哪些 2.1w次閱讀
- 嵌入式開發(fā)就業(yè)前景分析_嵌入式領(lǐng)域的職業(yè)發(fā)展方向 2w次閱讀
- 技術(shù)分析:典型的嵌入式系統(tǒng)設(shè)計(jì) 3.1k次閱讀
- 典型的嵌入式系統(tǒng)設(shè)計(jì) 3.1k次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費(fèi)
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊(cè)
- 0.74 MB | 1次下載 | 免費(fèi)
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產(chǎn)品手冊(cè)
- 0.43 MB | 1次下載 | 免費(fèi)
- 8SDFM 激光測距模塊模組手冊(cè)
- 0.54 MB | 1次下載 | 免費(fèi)
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費(fèi)
- 3RV1126B系列開發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費(fèi)
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費(fèi)
- 6【開源】60余套STM32單片機(jī)、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項(xiàng)目案例及入門學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費(fèi)
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機(jī)主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論