【正文】
“ Time Stamp” ? 允許用戶設(shè)置 “ Timer” ? 提供 “ Shadow RAM”,支持非干擾調(diào)試查詢。 27 軟件學(xué)院 仿真開發(fā)結(jié)構(gòu)圖 宿 主 機 O S編 輯 : C 、 C + + 、 J a v a編 譯 、 鏈 接圖 9 . 1 0 應(yīng) 用 仿 真 開 發(fā) 結(jié) 構(gòu) 示 意調(diào) 試目 標 操 作 系 統(tǒng) 庫T O S L i b應(yīng) 用 編 程 接 口 A P I仿 真 調(diào) 試代 理 E D A應(yīng) 用 系 統(tǒng)通 信用 戶虛 擬 目 標 硬 件V T a r g e t虛 擬 目 標 環(huán) 境仿 真 開 發(fā) I D E28 軟件學(xué)院 一、仿真開發(fā)分類 純軟件仿真開發(fā)是利用宿主機上的資源模擬目標機實際硬件電路的運行,構(gòu)建應(yīng)用軟件運行所需的虛擬硬件環(huán)境,提供嵌入式軟件開發(fā)和調(diào)試的真正“軟”平臺。 35 軟件學(xué)院 開發(fā)環(huán)境提供的主要工具 ? 項目管理器 ? 項目配置工具 ? 源碼編輯工具 ? C RTL( C RunTime Library) ? RTOS開發(fā)支持包 ? 交叉編譯工具 ? 交叉調(diào)試工具 ? 交叉測試 ? 性能分析工具等 36 軟件學(xué)院 一、項目管理 項目管理器一般采用通用的工作區(qū)、項目管理方式,這能較好的支持在不同硬件平臺上的軟件移植。 40 軟件學(xué)院 ? 設(shè)置目標代碼生成選項; ? C源碼預(yù)處理; ? C源碼編譯成匯編代碼; ? 匯編語言程序轉(zhuǎn)換為可重定位目標代碼; ? 可重定位的目標模塊鏈接成目標程序; ? 文件格式轉(zhuǎn)換。 42 軟件學(xué)院 ? 錯誤信息 :致命錯誤、一般錯誤和警告。 44 軟件學(xué)院 5. 常用文件后綴 ① .c或 .cc 或 .cxx 或 .cpp ② .h或 .hpp ③ .s或 .asm ④ .S ⑤ .o或 .obj ⑥ .a或 .lib ⑦ .elf ⑧ .omf ⑨ .hex ⑩ .eep 11 .cof .s2或 .s3 45 軟件學(xué)院 五、交叉調(diào)試 ? 硬件 :連接線、仿真頭、轉(zhuǎn)換板等連接硬件。 47 軟件學(xué)院 交叉調(diào)試與非交叉調(diào)試比較 交叉調(diào)試 本地調(diào)試 Debugger和 Debuggee運行在不同的計算機 Debugger和 Debuggee運行在同一臺計算機 運行時不一定需要操作系統(tǒng)的調(diào)試支持 運行時需要操作系統(tǒng)的調(diào)試支持 Debuggee裝載由 Debugger或Loader完成 Debuggee的裝載是由專門的Loader程序完成 需要通過外部通信的方式來控制 Debuggee 不需要外部的通信方式來控制Debuggee 可以直接調(diào)試不同指令集的程序 只能直接調(diào)試相同指令集的程序 48 軟件學(xué)院 1. 交叉調(diào)試支持的功能 ? 內(nèi)存 ? 寄存器 ? 斷點 ? 程序執(zhí)行 ? 變量 ? 顯示模式 ? OSaware 49 軟件學(xué)院 交叉調(diào)試的過程框架 圖 9 . 1 5 采 用 R O M M o n i t o r 的 交 叉 調(diào) 試 過 程宿 主 機 目 標 機編 碼編 譯 鏈 接啟 動 調(diào) 試 器向 目 標 機發(fā) 出 連 接 信 號加 電復(fù) 位啟 動 M o n i t o r目 標 板 初 始 化等 待 調(diào) 試 命 令接 收 連 接 信 號發(fā) 出 應(yīng) 答 信 號連 接 成 功發(fā) 出 下 載 命 令接 收 下 載 信 息下 載 完 成設(shè) 置 程 序 斷 點接 收 斷 點設(shè) 置 命 令斷 點 設(shè) 置 成 功啟 動 程 序 執(zhí) 行C o n t i n u e 命 令執(zhí) 行被 調(diào) 試 程 序等 待 用 戶 選 擇的 調(diào) 試 命 令在 斷 點 處 停 下等 待 下 一 個調(diào) 試 命 令50 軟件學(xué)院 2. 任務(wù)級調(diào)試 調(diào)試對象是一個用戶任務(wù)(集),用戶可以自定義調(diào)試范圍。 53 軟件學(xué)院 系統(tǒng)級調(diào)試 圖 9 . 1 7 系 統(tǒng) 級 調(diào) 試 框 架宿 主 操 作 系 統(tǒng)應(yīng) 用 程 序體 現(xiàn)調(diào) 試 器R T O S調(diào) 試 代理被 調(diào) 試 應(yīng)用 程 序通 訊 協(xié) 議調(diào) 試 系 統(tǒng) 被 調(diào) 試 系 統(tǒng)54 軟件學(xué)院 六、測試工具 嵌入式系統(tǒng)采用交叉測試,即嵌入式軟件測試必須由宿主機和目標機協(xié)作完成。 ? 無須改動其源程序。不執(zhí)行被測程序,通過分析估計執(zhí)行時間。實際執(zhí)行程序測試程序的時間特性。 60 軟件學(xué)院 七、版本管理工具 版本管理是用戶對項目文件版本進行控制的工具軟件。 61 軟件學(xué)院 嵌入式軟件版本管理工具的功能結(jié)構(gòu) 圖 9 . 2 0 嵌 入 式 軟 件 版 本 管 理 功 能 結(jié) 構(gòu) 示 意版 本 管 理版本標記版本合并發(fā)行版本標識安全保護目錄版本控制版本分支文件版本控制基線版本標識項目啟動需求分析系統(tǒng)設(shè)計編碼調(diào)試登錄管理注銷管理用戶管理日志管理62 軟件學(xué)院 GNU的嵌入式開發(fā)環(huán)境 ? C編譯器 gcc ? make工具 GNU make ? 開發(fā)調(diào)試工具 gdb 63 軟件學(xué)院 一、 gcc編譯器 gcc前端支持多種高級語言,后端支持多種平臺,它是一個交叉編譯器,可以把源代碼編譯成在其他硬件平臺上運行的可執(zhí)行代碼。 66 軟件學(xué)院 編譯 將預(yù)處理后生成的源代碼編譯為后綴名為“ .s”的匯編文件。 68 軟件學(xué)院 鏈接 它調(diào)用 ld鏈接程序,把所有目標代碼以及靜態(tài)庫,定位鏈接生成最后的可執(zhí)行程序或其他格式的目標文件。 與 t e s t . c 比 較 , t e s t . i 的文 件 頭 部 加 入 了 s t d i o . h 文 件 的內(nèi) 容 ; 程 序 中 的 I N T 和 C H A R 分別 被 1 和 ‘ A ’ 替 換 。對 t e s t . s 進 行 匯 編 , 得 到目 標 文 件 t e s t . o .鏈 接 t e s t . o , 生 成 可 執(zhí) 行 文 件 t e s t 。運 行 t e s t70 軟件學(xué)院 2. 交叉 gcc的生成 gcc的缺省配置是本地使用。 71 軟件學(xué)院 交叉 gcc的生成過程 ? 重新生成 binutils。 73 軟件學(xué)院 1. Make命令 一般語法規(guī)則是: make [f makefile文件名 ] [其他選項 ] [目標名 ] 說明: f: makefile的文件名字。 兩個常用選項。 p:顯示并檢查 make文件中的所有宏定義和所有內(nèi)部規(guī)則。目標的狀態(tài)取決于所依賴的源程序文件狀態(tài)。 t e s t : $ ( O B J E C T ) g c c – o $ $ ( O B J E C T ) 等價于語句: t e s t : $ ( O B J E C T ) g c c – o t e s t $ ( O B J E C T ) 77 軟件學(xué)院 Make內(nèi)部預(yù)定義的宏 ? $*,表示去掉后綴的當前目標名。 78 軟件學(xué)院 4. 符號 ? %,對應(yīng)于具體的文件名 ? ,表示命令本身不在屏幕上顯示。 79 軟件學(xué)院 符號 例如 : 結(jié)果是: A = g c cB = $ ( A )C : = $ ( A )A = c cA = c cB = c cC = g c c80 軟件學(xué)院 5. 函數(shù) 語法格式如下: $(funame arg1, …, argn) 例如: SOURCES=$(wildcard *.c) 產(chǎn)生一個所有以“ .c”為后綴名的文件的列表,然后存入變量 SOURCES中。 82 軟件學(xué)院 示例 a n e x a m p l e f o r m a k e f i l e f i l e n a m e : m a k e f i l e : : : : : :C C = g c c