出版時間:2012-1 出版社:電子工業(yè)出版社 作者:李云 頁數(shù):640
Tag標(biāo)簽:無
內(nèi)容概要
本書分為6篇。硬件篇就嵌入式軟件開發(fā)所需掌握的處理器概念進(jìn)行了介紹。工具篇對make、gcc編譯器、bintuils工具集、ld鏈接器和gdb調(diào)試器進(jìn)行了講解,其中對make這一嵌入式開發(fā)環(huán)境的全能管家進(jìn)行了精辟的介紹,致力于幫助讀者成為Makefile方面的專家。編程語言篇致力于讓讀者更深入地理解C編程語言。操作系統(tǒng)篇通過循序漸進(jìn)的方式介紹ClearRTOS的設(shè)計(jì)與實(shí)現(xiàn),使得讀者能透徹地理解操作系統(tǒng)的關(guān)鍵概念和實(shí)現(xiàn)原理。設(shè)計(jì)篇和質(zhì)量保證篇通過實(shí)踐的方式逐步展開講解,以幫助讀者獲得一些實(shí)用的設(shè)計(jì)原則、最佳實(shí)踐和一套有效的質(zhì)量保證方法論。
本書適合嵌入式軟件開發(fā)領(lǐng)域的新手和在工作中碰到瓶頸的老手閱讀。閱讀本書要求讀者已掌握C編程語言和基本的UML知識。
作者簡介
李云,現(xiàn)任諾基亞西門子網(wǎng)絡(luò)技術(shù)有限公司軟件架構(gòu)師。
2年電氣和電子開發(fā)工作經(jīng)驗(yàn),自1999年至今從事軟件開發(fā)工作曾在浙江大立科技有限公司、UT斯達(dá)康杭州研發(fā)中心、摩托羅拉杭州研發(fā)中心擔(dān)任軟件工程師、項(xiàng)目負(fù)責(zé)人和軟件架構(gòu)師等職早在2000年開始從事嵌入式軟件開發(fā)工作,內(nèi)容主要包括:操作系統(tǒng)內(nèi)核、文件系統(tǒng)和IP協(xié)議棧的移植,IDE硬盤、以太網(wǎng)芯片和PCI總線等外設(shè)的驅(qū)動開發(fā)熟悉x86、PowerPC、XScale處理器,以及TIDSP源碼級熟悉uC/OS、RTEMS和VxWorks實(shí)時操作系統(tǒng)的實(shí)現(xiàn),并在這些操作系統(tǒng)和Linux操作系統(tǒng)上有著豐富的軟件開發(fā)經(jīng)驗(yàn)。
書籍目錄
硬件篇
第1章 處理器的基本概念
1.1 區(qū)分微處理器與微控制器
1.2 寄存器
1.3 處理器是如何啟動的
1.4 輸入與輸出
1.5 指令與數(shù)據(jù)
1.6 中斷
1.7 字節(jié)序
1.8 邊界對齊
1.9 程序斷點(diǎn)和數(shù)據(jù)斷點(diǎn)
1.10 內(nèi)存管理單元
1.11 緩存
1.12 小結(jié)
第2章 開發(fā)活動中的硬件問題
2.1 兩個案例
2.2 案例的背后——信號完整性
2.3 應(yīng)對方法
2.4 小結(jié)
工具篇
第3章 make,開發(fā)環(huán)境全能管家
3.1 從最簡單的Makefile中了解規(guī)則
3.2 創(chuàng)建基本的編譯環(huán)境
3.2.1 將規(guī)則運(yùn)用于程序編譯
3.2.2 讓Makefile更專業(yè)
3.3 提高編譯環(huán)境的實(shí)用性
3.3.1 讓編譯環(huán)境更加有序
3.3.2 提升依賴關(guān)系管理
3.4 打造更專業(yè)的編譯環(huán)境
3.4.1 規(guī)劃項(xiàng)目目錄結(jié)構(gòu)
3.4.2 增進(jìn)復(fù)用性
3.4.3 支持頭文件目錄的指定
3.4.4 實(shí)現(xiàn)庫鏈接
3.4.5 增強(qiáng)可使用性
3.4.6 管理對庫的依賴關(guān)系
3.4.7 改善編譯效率
3.4.8 恰當(dāng)?shù)貢鴮懽⑨尅?br /> 3.5 理解make的解析行為
3.6 Makefile的調(diào)試
3.7 make的常用選項(xiàng)
3.8 活用make
3.9 小結(jié)
第4章 gcc,C語言編譯器
4.1 什么是交叉編譯器
4.2 gcc幕后工作揭示
4.3 實(shí)用的gcc選項(xiàng)
4.3.1 解決宏錯誤的好幫手
4.3.2 輔助編寫匯編程序的好方法
4.3.3 獲取系統(tǒng)頭文件路徑
4.3.4 產(chǎn)生映射文件
4.3.5 通過選項(xiàng)定義宏
4.3.6 生成依賴關(guān)系
4.3.7 指定鏈接庫
第5章 binutils工具集,軟件開發(fā)利器
5.1 addr2line,指令地址翻譯器
5.2 ar,靜態(tài)庫生成器
5.3 nm,符號顯示器
5.4 objdump,信息查看器
5.5 objcopy,段剪輯器
5.6 ranlib,庫索引生成器
5.7 size,段大小觀察器
5.8 strings,字符串窺視器
5.9 strip,程序文件瘦身器
第6章 ld,鏈接器
6.1 重定位的概念
6.2 鏈接腳本
6.2.1 段
6.2.2 符號
6.2.3 存儲區(qū)域
6.2.4 常用命令
6.3 常用選項(xiàng)
6.3.1 指定程序的入口點(diǎn)
6.3.2 生成可重定位的中間文件
6.3.3 指定鏈接腳本
練習(xí)與思考
第7章 gdb,程序調(diào)試助手
7.1 啟動和退出gdb
7.2 獲取幫助
7.3 調(diào)試程序
7.3.1 斷點(diǎn)設(shè)置
7.3.2 控制程序運(yùn)行
7.3.3 檢查程序
7.3.4 提高調(diào)試效率
7.4 查看符號表
7.5 控制gdb的行為
編程語言篇
第8章 掌握必要的匯編知識
8.1 as的語法
8.1.1 宏
8.1.2 匯編命令
8.1.3 符號和標(biāo)簽
8.1.4 匯編指令
8.2 嵌入?yún)R編的語法
第9章 深入理解程序的結(jié)構(gòu)
9.1 段
9.1.1 指令段
9.1.2 數(shù)據(jù)段
9.2 ?!?br /> 9.3 堆
9.4 小結(jié)
第10章 ABI/EABI規(guī)范,締造程序兼容合約
10.1 定義基本數(shù)據(jù)類型
10.2 規(guī)范字節(jié)對齊處理
10.3 分配寄存器的功能
10.4 規(guī)定棧幀結(jié)構(gòu)
10.4.1 棧幀的含義和作用
10.4.2 函數(shù)參數(shù)的傳遞方法
10.4.3 函數(shù)返回值的返回方法
10.5 小結(jié)
練習(xí)與思考
第11章 混淆指針與數(shù)組所導(dǎo)致的問題
11.1 問題示例
11.2 問題分析
11.2.1 數(shù)組的內(nèi)存模型
11.2.2 指針的內(nèi)存模型
11.3 問題成因
11.4 預(yù)防措施
11.5 小結(jié)
第12章 volatile,讓我保持原樣
設(shè)計(jì)篇
第13章 設(shè)計(jì),軟件質(zhì)量之本
13.1 軟件設(shè)計(jì)是什么
13.2 軟件質(zhì)量的概念
13.3 阻礙改善設(shè)計(jì)的常見觀念
13.3.1 測試是替罪羊或救命稻草
13.3.2 資源永遠(yuǎn)不足
13.3.3 不改變就可以規(guī)避風(fēng)險
13.4 如何提高設(shè)計(jì)能力
13.5 設(shè)計(jì)模式、設(shè)計(jì)原則和設(shè)計(jì)思想
13.6 放之四海皆適用的設(shè)計(jì)原則
13.6.1 以人為本
13.6.2 追求簡單性
13.6.3 讓模塊善始善終
13.6.4 重視收集統(tǒng)計(jì)信息
13.6.5 借助命名傳達(dá)設(shè)計(jì)意圖
13.6.6 消除“審美告警”
13.6.7 通過機(jī)制解決問題
13.6.8 防止他人犯錯
13.6.9 考慮可查錯性
13.7 小結(jié)
第14章 模塊管理,保障系統(tǒng)有序運(yùn)行
14.1 管理參照系
14.2 設(shè)計(jì)思路
14.3 程序?qū)崿F(xiàn)
14.3.1 引入模塊標(biāo)識
14.3.2 實(shí)現(xiàn)層與級的表達(dá)
14.3.3 系統(tǒng)狀態(tài)和回調(diào)函數(shù)原型定義
14.3.4 模塊注冊
14.3.5 系統(tǒng)啟動
14.3.6 系統(tǒng)關(guān)閉
14.4 module示例程序
14.5 模塊管理的一些思考
14.6 小結(jié)
練習(xí)與思考
第15章 錯誤管理,不可或缺的用戶需求
15.1 表達(dá)錯誤的通用方法
15.1.1 錯誤碼格式
15.1.2 定義方法
15.1.3 使用示例
15.1.4 提高可使用性
15.1.5 定義和使用錯誤碼的準(zhǔn)則
15.2 優(yōu)化錯誤日志的輸出
15.2.1 傳統(tǒng)方法
15.2.2 更有效的方法
15.3 平臺和框架層的錯誤處理
15.4 小結(jié)
第16章 目錄結(jié)構(gòu)管理,使項(xiàng)目進(jìn)展更順利
16.1 規(guī)劃目錄結(jié)構(gòu)的意義
16.1.1 書架功能
16.1.2 意識引導(dǎo)
16.1.3 加速新手上手
16.2 出色目錄結(jié)構(gòu)的特點(diǎn)
16.3 一個示例
16.4 小結(jié)
第17章 平臺與框架開發(fā),高質(zhì)量軟件打造之路
17.1 區(qū)分系統(tǒng)庫、平臺和框架
17.1.1 系統(tǒng)庫
17.1.2 平臺
17.1.3 框架
17.2 本質(zhì)和優(yōu)點(diǎn)
17.3 確立架構(gòu)模型
17.4 小結(jié)
第18章 可開發(fā)性設(shè)計(jì),一種高效且經(jīng)濟(jì)的開發(fā)模式
18.1 可開發(fā)性問題一瞥
18.2 可開發(fā)性設(shè)計(jì)的內(nèi)涵
18.3 引入設(shè)備抽象層
18.4 更復(fù)雜的設(shè)備抽象層
18.5 圖形界面的可開發(fā)性設(shè)計(jì)
18.5.1 增強(qiáng)設(shè)備抽象層
18.5.2 提供可視化編輯環(huán)境
18.6 其他可開發(fā)性設(shè)計(jì)
18.7 小結(jié)
操作系統(tǒng)篇
第19章 引導(dǎo)加載器,系統(tǒng)啟航者
19.1 功能
19.2 文件存儲布局
19.3 程序加載原理
19.4 優(yōu)點(diǎn)
19.5 小結(jié)
練習(xí)與思考
第20章 任務(wù),軟件基本調(diào)度單元
20.1 任務(wù)情景
20.1.1 情景內(nèi)容
20.1.2 情景保存
20.1.3 情景恢復(fù)
20.1.4 情景切換
20.2 任務(wù)調(diào)度
20.2.1 調(diào)度算法
20.2.2 調(diào)度器
20.3 任務(wù)的生命周期
20.4 任務(wù)控制
20.4.1 任務(wù)創(chuàng)建
20.4.2 任務(wù)啟動
20.4.3 任務(wù)刪除
20.4.4 任務(wù)掛起
20.4.5 任務(wù)恢復(fù)
20.4.6 任務(wù)睡眠
20.5 競爭問題與中斷控制
20.5.1 競爭問題的產(chǎn)生
20.5.2 通過中斷控制解決競爭問題
20.5.3 中斷控制的嵌套問題
20.6 任務(wù)與中斷狀態(tài)
20.7 任務(wù)棧溢出檢測
20.8 滴答與空閑任務(wù)
20.9 多任務(wù)環(huán)境控制
20.10 任務(wù)模塊管理
20.11 taskv1示例程序
20.12 任務(wù)鉤子函數(shù)
20.13 任務(wù)變量
20.13.1 taskv2示例程序
20.13.2 原理
20.13.3 實(shí)現(xiàn)
20.14 其他概念與思考
20.14.1 搶占式任務(wù)與實(shí)時系統(tǒng)的關(guān)系
20.14.2 影響任務(wù)切換效率的因素
20.14.3 避免直接刪除任務(wù)
20.14.4 小心多任務(wù)設(shè)計(jì)被濫用
20.15 小結(jié)
練習(xí)與思考
第21章 任務(wù)同步與通信,實(shí)現(xiàn)協(xié)同工作
21.1 信號量
21.1.1 應(yīng)用場合
21.1.2 程序?qū)崿F(xiàn)
21.1.3 semaphore示例程序
21.2 互斥鎖
21.2.1 應(yīng)用場合
21.2.2 程序?qū)崿F(xiàn)
21.2.3 mutex示例程序
21.2.4 優(yōu)先級反轉(zhuǎn)與繼承
21.2.5 遞歸鎖
21.3 事件
21.3.1 應(yīng)用場合
21.3.2 程序?qū)崿F(xiàn)
21.3.3 event示例程序
21.4 消息隊(duì)列
21.4.1 應(yīng)用場合
21.4.2 程序?qū)崿F(xiàn)
21.4.3 實(shí)現(xiàn)消息隊(duì)列
21.4.4 queue示例程序
21.4.5 使用指南
21.5 死鎖及預(yù)防
21.6 小結(jié)
練習(xí)與思考
第22章 內(nèi)存管理,協(xié)調(diào)動態(tài)內(nèi)存的使用
22.1 堆管理
22.1.1 heapv1示例程序
22.1.2 程序?qū)崿F(xiàn)
22.1.3 設(shè)計(jì)改進(jìn)
22.1.4 支持內(nèi)存泄漏檢測
22.1.5 實(shí)現(xiàn)內(nèi)存溢出檢測
22.1.6 內(nèi)存碎片問題
22.2 內(nèi)存池管理
22.2.1 mpool示例程序
22.2.2 程序?qū)崿F(xiàn)
22.2.3 緩沖區(qū)泄漏檢測
22.3 小結(jié)
練習(xí)與思考
第23章 設(shè)備管理,方便與外設(shè)交互
23.1 字符設(shè)備管理
23.2 中斷管理
23.2.1 中斷向量表
23.2.2 中斷控制
23.2.3 中斷狀態(tài)管理
23.2.4 設(shè)備與中斷
23.2.5 模塊管理
23.3 實(shí)現(xiàn)設(shè)備管理
23.3.1 安裝驅(qū)動程序
23.3.2 注冊設(shè)備
23.3.3 打開設(shè)備
23.3.4 關(guān)閉設(shè)備
23.3.5 設(shè)備讀寫與控制
23.4 設(shè)備驅(qū)動程序?qū)崿F(xiàn)
23.4.1 “滴答”設(shè)備
23.4.2 控制臺設(shè)備
23.4.3 終止程序運(yùn)行設(shè)備
23.5 驅(qū)動安裝與設(shè)備注冊
23.6 小結(jié)
練習(xí)與思考
第24章 定時器,程序鬧鐘
24.1 軟件定時器分類
24.2 設(shè)計(jì)思路
24.3 中斷回調(diào)定時器
24.3.1 程序?qū)崿F(xiàn)
24.3.2 timerv1示例程序
24.4 定時誤差
24.5 提高遍歷效率
24.6 改善實(shí)時性
24.6.1 實(shí)時性分析
24.6.2 改進(jìn)實(shí)時性
24.7 任務(wù)回調(diào)定時器
24.7.1 程序?qū)崿F(xiàn)
24.7.2 timerv3示例程序
24.8 小結(jié)
練習(xí)與思考
第25章 ClearRTOS“實(shí)時”操作系統(tǒng)
25.1 設(shè)計(jì)原則
25.2 源程序目錄管理
25.3 讓Makefile體現(xiàn)概念
25.4 實(shí)現(xiàn)集中配置
25.5 改進(jìn)與移植
質(zhì)量保證篇
第26章 質(zhì)量保證導(dǎo)言
26.1 軟件開發(fā)的特點(diǎn)
26.1.1 腦力密集型工作
26.1.2 實(shí)現(xiàn)不具唯一性
26.1.3 隱性成本高
26.1.4 忽視的細(xì)節(jié)很容易被放大
26.1.5 質(zhì)量難以評估
26.2 保證質(zhì)量的關(guān)鍵要素
26.2.1 完備的需求分析
26.2.2 高質(zhì)量的設(shè)計(jì)
26.2.3 編程好習(xí)慣
26.2.4 充分的驗(yàn)證
26.2.5 必要的流程
26.2.6 合適的工具
26.2.7 言簡意賅的文檔
26.3 質(zhì)量保證需要系統(tǒng)性的方法論
26.3.1 方法論=流程+工具
26.3.2 構(gòu)建有效方法論的核心手段
26.4 走出質(zhì)量困境的指導(dǎo)性思想
26.4.1 從管理者的角度
26.4.2 從工程師的角度
26.4.3 從組織的角度
26.5 小結(jié)
第27章 編程好習(xí)慣,質(zhì)量保證的基本條件
27.1 終生受用的編程好習(xí)慣
27.1.1 判斷失敗而非成功
27.1.2 采用sizeof減少內(nèi)存操作失誤
27.1.3 屏蔽編程語言特性
27.1.4 恰當(dāng)使用gto語句
27.1.5 合理運(yùn)用數(shù)組
27.1.6 以逆序方式釋放資源
27.1.7 在模塊對外接口中防范錯誤
27.1.8 避免出現(xiàn)魔數(shù)
27.1.9 利用編程語言特性提高效率
27.1.10 復(fù)用代碼提高維護(hù)性
27.1.11 借助隱式初始化簡化程序邏輯
27.1.12 青睞小粒度鎖
27.1.13 精確包含頭文件
27.1.14 讓模塊的對外頭文件保持簡潔
27.1.15 只暴露必要的變量和函數(shù)
27.1.16 清除編譯器報(bào)告的所有警告
27.2 小結(jié)
第28章 單元測試,被忽視的質(zhì)量保證方法
28.1 警惕單元測試無用論
28.2 一個簡單但不完善的單元測試?yán)印?br /> 28.3 構(gòu)建單元測試框架
28.4 無縫整合單元測試
28.4.1 維護(hù)規(guī)則
28.4.2 目錄規(guī)劃
28.4.3 更改Makefile
28.4.4 檢查整合效果
28.5 幾個實(shí)施問題
28.6 樁函數(shù)和打樁
28.7 錯誤注入,一種可測試性設(shè)計(jì)
28.8 平臺開發(fā)與單元測試
28.9 被測行為的確定性
28.10 測試用例的有效性
28.11 小結(jié)
第29章 代碼覆蓋,單元測試效果的衡量指標(biāo)
29.1 了解代碼覆蓋工具
29.2 無縫整合代碼覆蓋
29.2.1 更改Makefile
29.2.2 檢查整合效果
29.3 三個代碼覆蓋程度指標(biāo)
29.4 小結(jié)
第30章 靜態(tài)分析,防止將失誤帶給用戶
30.1 認(rèn)識靜態(tài)分析工具
30.2 無縫整合靜態(tài)分析
30.2.1 更改Makefile
30.2.2 檢查整合效果
30.3 小結(jié)
第31章 動態(tài)分析,使程序更健壯
31.1 結(jié)識動態(tài)分析工具
31.2 無縫整合動態(tài)分析
31.2.1 更改Makefile
31.2.2 檢查整合效果
31.3 小結(jié)
第32章 性能分析,讓優(yōu)化程序有的放矢
32.1 初探性能分析工具
32.2 無縫整合性能分析
32.2.1 更改Makefile
32.2.2 檢查整合效果
32.3 小結(jié)
第33章 qBench,一個開發(fā)高質(zhì)軟件的工作臺
參考資料
章節(jié)摘錄
版權(quán)頁:插圖:make是以從上到下的順序讀入Makefile中的內(nèi)容的。然而,處理Makefile中的語句卻并非完全從上到下。大體上,make處理一個Makefile分兩個階段。第一個階段包含:(1)make讀入Makefile,以及Makefile中所包含的其他Makefile。(2)make分析并獲得變量名、變量值、隱式規(guī)則和顯式規(guī)則。(3)構(gòu)建所有目標(biāo)的關(guān)系樹,以及它們的先決條件。在第二個階段,make基于第一個階段所建立的內(nèi)部結(jié)構(gòu)分析哪些目標(biāo)需要重新構(gòu)建,以及需要執(zhí)行哪些規(guī)則的命令來構(gòu)建這些目標(biāo)。理解make處理Makefile的兩個階段對于熟練地編寫Makefile非常重要。就作者的學(xué)習(xí)經(jīng)驗(yàn)來看,也曾經(jīng)因?yàn)椴涣私膺@兩個階段而產(chǎn)生過不少困惑。make在處理Makefile中的語句時,存在立即展開和延遲展開兩種類別。立即展開是指語句在第一個處理階段就被展開。變量和函數(shù)就是立即展開的。延遲展開則是指當(dāng)make處理它時并不立即展開,其展開動作發(fā)生在第二個階段。對于不同的語句,make將采用不同的展開策略。圖3.155示例說明了與賦值相關(guān)的展開策略。注意,左邊的變量名總是立即展開的,而右邊的變量值卻未必。其中“+=”的左邊有可能采用立即展開也有可能采用延遲展開。當(dāng)左邊的變量名在使用“+_”之前如已被設(shè)置為簡單擴(kuò)展變量(即采用“:=”賦值)時,則采用立即展開的方式,否則采用延遲展開的方式。
編輯推薦
《專業(yè)嵌入式軟件開發(fā):全面走向高質(zhì)高效編程》是一本全面講解實(shí)時操作系統(tǒng)實(shí)現(xiàn)原理的書為了使讀者獲得最佳的學(xué)習(xí)效果,作者為《專業(yè)嵌入式軟件開發(fā):全面走向高質(zhì)高效編程》量身打造了可在Windows和Linux操作系統(tǒng)上直接運(yùn)行的Clear RTOS“實(shí)時”操作系統(tǒng),并在書中詳解了所有實(shí)現(xiàn)細(xì)節(jié)。這是一本介紹嵌入式軟件開發(fā)所需掌握工具的書作者從實(shí)用的角度介紹了gcc編譯器、binutils工具集、Id鏈接器和gdb調(diào)試器,并花了較大的篇幅幫助讀者成為Makefile的專家。這是一本帶領(lǐng)讀者實(shí)踐如何構(gòu)建高質(zhì)高效軟件開發(fā)方法的書 書中通過展示如何將單元測試框架、靜態(tài)分析、動態(tài)分析和性能分析整合到開發(fā)環(huán)境中這種方式,闡述了作者的“以單元測試為中心”和“無縫整合”思想。這是一位飽嘗自學(xué)嵌入式軟件開發(fā)痛苦的工程師在軟件行業(yè)積累了12年后,與讀者分享心得的一本書中就軟件設(shè)計(jì)、編程習(xí)慣和質(zhì)量保證等內(nèi)容與讀者進(jìn)行了交流。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載