嵌入式軟體調試技術

嵌入式軟體調試技術

《嵌入式軟體調試技術》由電子工業出版社出版,陳雲川著。全書首先對調試技術及嵌入式調試手段進行一個概覽,然後重點對linux環境下的嵌入式調試技術進行詳細的講解,最後給出兩個綜合套用實例:MPEG-4視頻播放器的設計和基於GPS的移動定位終端。

嵌入式軟體調試技術嵌入式軟體調試技術

《嵌入式軟體調試技術》既可作為Linux環境下嵌入式軟體調試技術從入門到精通的學習用書,也可供從事Linux環境下的嵌入式軟體調試的工程人員參考使用。

圖書簡介

作者:陳雲川
編者:羅克露
定價:59.00元
出版社:電子工業出版社
頁碼:482 頁
出版日期:2009年
ISBN:9787121077265
版本:1版
裝幀:平裝
開本:16
叢書名:嵌入式技術與套用叢書
附帶品描述:附VCD光碟一張

內容簡介

《嵌入式軟體調試技術》兼顧理論與實踐。全書首先對調試技術及嵌入式調試手段進行一個概覽,然後重點對linux環境下的嵌入式調試技術進行詳細的講解,最後給出兩個綜合套用實例:MPEG-4視頻播放器的設計和基於GPS的移動定位終端。在編寫思路上,《嵌入式軟體調試技術》以理論為先、實踐為重;具體到調試技巧和手段上,則全部結合具體實例展開。書中各個實例之間採取從前至後逐步深入的方式,既銜接有序,又便於讀者學習。《嵌入式軟體調試技術》配套光碟包含書中相關的補充資料、與Sitsang評估板相關的工具鏈和原始碼、《嵌入式軟體調試技術》第3~9章的原始碼,以及書中使用到的工具和軟體等。

目錄

上篇 基礎篇

第1章 軟體調試概述 2
1.1 什麼是軟體調試 2
1.2 軟體調試的分類 6
1.2.1 靜態調試和動態調試 6
1.2.2 機器級調試與源碼級調試 7
1.2.3 任務級調試與系統級調試 7
1.2.4 本地調試與遠程(交叉)調試 8
1.3 軟體調試的關鍵技術·斷點 8
1.3.1 軟體斷點 8
1.3.2 硬體斷點 8
1.4 調試器應當遵循的原則 9
1.4.1 調試器必須反映真實信息 9
1.4.2 提供儘可能多的程式上下文信息 9
1.4.3 Heisenberg原則·儘可能減少對被測系統的影響 10
1.5 嵌入式軟體調試手段 10
1.5.1 軟體仿真調試·模擬器 10
1.5.2 ICE·早期手段 11
1.5.3 BDM·M68K系列及PowerPC等採用的技術 12
1.5.4 JTAG·調試領域的後起之秀 13
1.5.5 調試代理·嵌入式調試的基石 15
1.6 本章小結 15
第2章 邊界掃描測試技術(JTAG) 16
2.1JTAG的背景和原理 16
2.2 JTAG接口的結構 19
2.3 測試訪問連線埠(TAP) 20
2.3.1 測試時鐘輸入TCK 20
2.3.2 測試模式輸入TMS 20
2.3.3 測試數據輸入TDI 21
2.3.4 測試數據輸出TDO 21
2.3.5 測試復位輸入TRST* 21
2.3.6 TAP的互聯方式 21
2.4 測試訪問連線埠控制器(TAP controller) 22
2.5 指令暫存器 27
2.6 JTAG指令 27
2.6.1 公共指令(public)與私有指令(private) 27
2.6.2 BYPASS指令 28
2.6.3 SAMPLE指令 29
2.6.4 PRELOAD指令 29
2.6.5 EXTEST指令 29
2.6.6 其他指令 29
2.7 數據暫存器組 30
2.7.1 BYPASS暫存器 31
2.7.2 邊界掃描暫存器 31
2.7.3 設備ID暫存器 32
2.7.4 其他數據暫存器 32
2.8 ARM7TDMI的JTAG調試 32
2.8.1 調試架構 33
2.8.2 ARM7TDMI處理器結構 33
2.8.3 進入調試狀態 34
2.8.4 JTAG指令 35
2.8.5 EmbeddedICE-RT邏輯 36
2.8.6 訪問暫存器和存儲器 38
2.9 本章小結 41
 

 中篇 系統篇

第3章 學習使用GDB調試器 44
3.1 GDB簡介 44
3.1 1 GDB的啟動和退出 45
3.1.2 GDB的啟動步驟 50
3.1.3 GDB的多語言支持 50
3.2 在編譯時加入調試信息 51
3.2.1 打開GCC的調試選項-g 51
3.2.2 代碼最佳化對調試的影響 52
3.3 在GDB下運行程式 53
3.3.1 指定要運行的程式 53
3.3.2 設定程式的運行環境 54
3.3.3 停止運行 60
3.4 斷點、監視點與捕捉點 60
3.4.1 斷點、監視點與捕捉點的設定 61
3.4.2 斷點的刪除、禁用和使能 75
3.4.3 條件斷點 82
3.4.4 斷點命令列表 87
3.4.5 斷點選單·對函式重載的支持 89
3.5 繼續(continuing)與單步(stepping) 90
3.5.1 繼續運行 91
3.5.2 單步運行 91
3.5.3 與單步有關的命令 94
3.5.4 指令級單步命令 97
3.6 查看數據 99
3.6.1 用print命令查看數據 99
3.6.2 查看數據類型 103
3.6.3 人為數組·查看記憶體中的連續對象 105
3.6.4 查看存儲器和暫存器 108
3.6.5 自動顯示列表 111
3.6.6 使用快捷變數
(convenience variable) 114
3.6.7 處理C語言宏定義 115
3.6.8 產生轉儲檔案 116
3.7 棧幀的回溯與選定 117
3.7.1 棧幀回溯(backtrace) 118
3.7.2 棧幀選定 120
3.7.3 棧幀狀態 121
3.8 改變程式的執行流程 122
3.8.1 給變數賦值 122
3.8.2 使程式從另外的地址繼續執行 124
3.8.3 向程式傳送信號 125
3.8.4 調用函式 127
3.9 其他常用命令 128
3.9.1 原始碼查看命令 128
3.9.2反彙編命令 129
3.10 實例:Framebuffer與libjpeg混合編程 131
3.10.1 Framebuffer簡介 131
3.10.2 libjpeg簡介 133
3.10.3 程式說明 135
3.10.4 調試 143
3.11 GDB命令匯總 146
3.12 本章小結 148
第4章 GDB遠程調試技術 149
4.1 目標平台簡介 149
4.2 準備工作 151
4.2.1 minicom終端仿真程式 151
4.2.2 NFS檔案系統 154
4.2.3 聯合使用minicom和NFS 157
4.3 兩種遠程調試方式 159
4.3.1 gdbserver 159
4.3.2遠程插樁(stub) 160
4.4 編譯arm-linux-gdb 160
4.5 編譯gdbserver 162
4.6 連線到遠程目標 163
4.6.1 啟動gdbserver 163
4.6.2 串列連線方式 164
4.6.3 TCP連線方式 165
4.6.4 UDP連線方式 166
4.6.5 與遠程目標下線 166
4.6.6 GDB的遠程調試選項 166
4.7 實例:調試誤用記憶體的程式 168
4.7.1 段錯誤 168
4.7.2 野指針 171
4.7.3 記憶體泄漏 174
4.7.4 處理記憶體問題的對策 176
4.8 實例:音頻採集與回放程式的調試 176
4.8.1 Linux下的音頻接口 176
4.8.2 OSS的編程接口 177
4.8.3 OSS的編程機制 178
4.8.4 OSS的一般框架 181
4.8.5 源程式SndKit.c說明 181
4.8.6 SndKit調試過程 190
4.9 本章小結 193
第5章 網路應用程式調試 194
5.1 套接口編程簡介 194
5.1.1 基本TCP套接口編程 198
5.1.2 基本UDP套接口編程 203
5.2 網路調試和診斷工具 206
5.2.1 tcpdump 207
5.2.2 其他工具 210
5.3 實例:遠程獲取加速度 212
5.3.1 加速度感測器ADXL202JE簡介 212
5.3.2 服務端程式 213
5.3.3 客戶端程式 218
5.3.4 小結 224
5.4 實例:通過CDMA傳送短訊息 224
5.4.1 Linux串口編程概覽 224
5.4.2 傳送英文短訊息 229
5.4.3 傳送中文短訊息 240
5.4.4 小結 247
5.5 本章小結 248
第6章 多進程與多執行緒調試 249
6.1 Linux下的多進程程式調試 249
6.1.1 進程的創建 249
6.1.2 GDB對多進程調試的支持 251
6.1.3 實例:調試simple_fork 253
6.2 Linux多執行緒程式調試 255
6.2.1 執行緒的創建、終止和取消 256
6.2.2 執行緒互斥鎖 261
6.2.3 條件變數(condition variable) 263
6.2.4 執行緒的cleanup handler 267
6.2.5 執行緒特定數據 268
6.2.6 執行緒引入的問題 272
6.2.7 GDB對多執行緒調試的支持 272
6.2.8 實例:調試simple_thread 275
6.3 本章小結 279
第7章 靜態庫與動態庫的調試 280
7.1 靜態程式庫的構建和調試 280
7.2 動態共享庫的優點和代價 287
7.3 動態共享庫的命名·soname 289
7.4 動態共享庫的構建和安裝 291
7.5 動態共享庫的使用 292
7.6 動態共享庫的調試方法 292
7.7 實例:解析AVI檔案 298
7.7.1 AVI檔案格式介紹 298
7.7.2 OpenDML所做之擴展 303
7.7.3 AVI解析之代碼實現 309
7.7.4 編譯共享庫並安裝到目標板 330
7.7.5 遠程調試共享庫 330
7.8 本章小結 334

下篇 套用篇

第8章 MPEG-4視頻播放器的設計及調試 336
8.1 概述 336
8.2 XviD與SDL的構建 337
8.3 XviD編程接口說明 339
8.3.1 版本 339
8.3.2 錯誤碼 340
8.3.3 色場空間 340
8.3.4 profile和level定義 341
8.3.5 像素幅型比(Pixel Aspect Ration) 341
8.3.6 幀類型 341
8.3.7 xvid_global()函式 342
8.3.8 xvid_decore()函式 344
8.3.9 小結 350
8.4 SDL編程接口說明 350
8.4.1 SDL的初始化和退出 350
8.4.2 SDL視頻子系統函式接口 351
8.4.3 SDL事件處理子系統函式接口 355
8.5 整體結構 359
8.6 輔助模組:event和ping/pong雙緩衝區 361
8.7 解碼模組設計 375
8.8 播放模組設計 393
8.9 驅動模組設計 407
8.10 本章小結 410
第9章 基於GPS的移動定位終端 411
9.1 功能概述 411
9.2 GPS介紹 412
9.2.1 GPS定位原理 412
9.2.2 GPS數據格式 414
9.3 MiniGUI介紹 417
9.3.1 MiniGUI體系結構與模型 418
9.3.2 交叉編譯MiniGUI 419
9.3.3 為觸控螢幕編寫IAL驅動層 421
9.3.4 改寫MiniGUI伺服器程式mginit 432
9.4 在單獨的執行緒中讀取和解析GPS數據 437
9.4.1 經緯度坐標到像素坐標的映射 437
9.4.2 雙精度浮點數位元組序的問題 441
9.4.3 通過異步串口讀寫GPS數據 443
9.4.4 解析GPS數據 444
9.4.5 計算歸一化坐標 447
9.4.6GPS執行緒 448
9.4.7 與GUI前端交換數據 451
9.4.8 GPS接收機模擬程式 453
9.5 用到的MiniGUI元素 454
9.5.1 主視窗 455
9.5.2 控制項 457
9.5.3 靜態框 460
9.5.4 按鈕 461
9.5.5 編輯框 465
9.5.6 GDI接口與點陣圖操作 468
9.5.7 定時器 473
9.5.8 訊息處理過程 474
9.6 本章小結 479

序言

在程式開發過程中,一個公認的事實是編寫代碼並不難,但是如何寫出正確的代碼、如何排除代碼中的錯誤,卻並不是一件簡單的事情。如何排除代碼中的錯誤,這就涉及軟體的調試。調試技術的理論基礎並不複雜,但是調試本身卻是一門實踐性非常強的技術。
需要說明的是,嵌入式系統中的軟體調試與桌面軟體的調試有很大的不同。調試嵌入式系統時,調試器和被調試程式往往是物理上分離的。調試器運行在宿主機上,而被調試程式運行在目標機上,宿主機與目標機之間通過某種媒介進行通信。同時,還要在目標機上運行一個稱為調試代理(Debug Agent)的監控程式,由它來負責與運行在宿主機上的調試器進行通信,控制被調試程式的執行,並將被調試程式的執行情況及時反饋給調試器。這進一步增加了調試的複雜性。
當前圖書市場上有關調試技術的書籍並不多。但是,對於從事實際開發的工程人員而言,尤其是對廣大的嵌入式系統程式設計師而言,調試是一個無法迴避的永恆話題。因此本書以嵌入式開發中的調試技術和調試手段作為全書的核心,在當前眾多的計算機編程開發書籍中另闢蹊徑,獨樹一幟,對於剛接觸嵌入式程式開發的讀者而言,必將大有裨益。同時,對於經驗豐富的程式設計師而言,本書也具有較大的參考價值。
本書所用平台
本書採用的嵌入式硬體平台為Intel公司的Sitsang評估板,其上運行的作業系統為ARM-Linux 2.4.19。本書宿主機端軟體平台採用Red Hat 9.0(Linux 2.4.20-8),本地調試器為GDB 5.3(Red Hat 9.0默認配置),交叉調試器在GDB 6.4的基礎上構建。另外,在本書寫作的後期,作者換到了一台筆記本電腦上工作,為了與時俱進,其上運行的是Fedora Core作業系統。本質上講,Fedora Core源自Red Hat,兩者並無根本不同。為消除讀者對此存疑,特此予以澄清。
儘管本書採用的軟硬體平台是固定的,但是書中演示的大部分實例都不依賴於具體的軟硬體環境。因此如果讀者所採用的軟硬體平台與作者書中採用的有所不同,也無須多慮,大部分功能和操作都是相同的。
本書內容組織
本書共分為3篇。
上篇基礎篇,包括第1~2章。主要對調試的基礎知識進行了大致的概覽,對各種調試手段進行了簡單的說明和對比。
中篇系統篇,包括第3~7章。第3章介紹GDB調試器的使用;第4章主要介紹如何通過GDB進行遠程調試,同時也涉及了遠程調試可能要用到的一些工具,如NFS、minicom等;第5~7章主要介紹在一些特定開發場景下所採用的調試技術,包括網路環境下的調試、多執行緒與多進程環境下的調試、靜態庫與動態庫的調試,等等。
下篇套用篇,包括第8~9章。這部分內容屬於較綜合的話題,運用到了前述章節中所講述的一些內容。第8章圍繞MPEG-4視頻流的解碼和播放展開,而第9章則給出了一個基於GPS的移動定位終端的開發。
本書配套光碟內容及使用方法
本書配套光碟包含書中相關的補充資料、與Sitsang評估板相關的工具鏈和原始碼、本書第3~9章的原始碼,以及書中使用到的工具和軟體庫等。
使用時只需將本光碟放入光碟驅動器中,選擇各資料夾瀏覽即可。

相關詞條

相關搜尋

熱門詞條

聯絡我們