本書在編寫時,結(jié)合編者多年嵌入式軟件開發(fā)與教學經(jīng)驗,首先系統(tǒng)介紹嵌入式操作系統(tǒng)的概念、體系結(jié)構及其發(fā)展趨勢,并重點介紹主流的嵌入式Linux操作系統(tǒng)的移植及相關設備驅(qū)動程序開發(fā)技術;其次,在介紹UML基本概念的基礎上,介紹了嵌入式系統(tǒng)快速面向?qū)ο筮^程模型,并結(jié)合案例闡述相關嵌入式軟件分析設計技術;最后,結(jié)合MISRAC:2004規(guī)則,闡述了嵌入式軟件測試相關模型與技術。本書力圖結(jié)合嵌入式軟件的特點,將軟件工程領域成熟的分析設計方法引入到嵌入式軟件的分析設計中。
本書可作為嵌入式軟件開發(fā)相關專業(yè)的研究生及高年級本科生教材。同時,也可作為有志于從事嵌入式軟件開發(fā)的專業(yè)技術人員的參考書。
嵌入式系統(tǒng)以微電子和電子學為基礎,融入了計算機、通信、軟件工程等領域的知識。隨著微機電系統(tǒng)(MicroElectroMechanical System,MEMS)和移動互聯(lián)技術的發(fā)展,其應用領域涉及從消費電器到工業(yè)設備、從民用產(chǎn)品到軍用器材等多個方面。隨著5G技術到來,嵌入式系統(tǒng)必將成為人們工作和生活中不可或缺的基礎部件。
嵌入式系統(tǒng)面向應用,具有多學科交叉等特點。尤其是隨著嵌入式軟件的功能和復雜性日益增加,對嵌入式軟件開發(fā)人員的需求遠遠大于硬件系統(tǒng)開發(fā)人員的需求。國內(nèi)許多高校紛紛成立了嵌入式系統(tǒng)專業(yè),培養(yǎng)嵌入式軟件開發(fā)人員。北京工業(yè)大學自2009年開始招收軟件工程(嵌入式系統(tǒng)方向)實驗班,并招收嵌入式系統(tǒng)碩士研究生,經(jīng)過近十多年的本科生和碩士生培養(yǎng),在總結(jié)分析軟件工程(嵌入式系統(tǒng)方向)學生專業(yè)和基礎理論特點的基礎上,我們編寫了本教材。
全書共分9章。其中,第1章主要介紹嵌入式系統(tǒng)的基本概念及其組成;第2章主要介紹嵌入式操作系統(tǒng)的基本概念、體系結(jié)構、分類,以及常見的嵌入式實時操作系統(tǒng);第3章介紹UML的語義、圖形表示方法,以及基于UML的軟件建模;第4章介紹基于OO技術的軟件開發(fā)基本概念和原則,重點介紹適用于嵌入式系統(tǒng)的統(tǒng)一軟件開發(fā)過程和嵌入式系統(tǒng)快速面向?qū)ο箝_發(fā)過程;第5章在介紹面向?qū)ο蟮那度胧杰浖枨蠓治龌靖拍畹幕A上,依次介紹基于UML的嵌入式系統(tǒng)需求分析、結(jié)構分析和行為分析;第6章介紹嵌入式軟件的構架設計、機制設計及詳細設計;第7章介紹嵌入式Linux驅(qū)動程序、應用軟件開發(fā)及相關代碼優(yōu)化;第8章介紹Android系統(tǒng)架構和開發(fā)環(huán)境,并結(jié)合具體案例介紹了Android驅(qū)動和應用程序開發(fā)相關技術;第9章在介紹MISRAC:2004規(guī)則的基礎上,闡述嵌入式軟件測試相關模型與技術。
本書在編寫過程中參考借鑒了朱成果、康一梅、Douglas等專家學者的成果,在此表示感謝。書中嵌入式軟件設計模式、Android開發(fā)等相關章節(jié)由王素玉和王曉懿老師結(jié)合項目研發(fā)經(jīng)驗編寫完成,在此表示誠摯的感謝。
由于時間和精力的限制,本書在深度和廣度上有一定的局限性,不當及謬誤之處,懇請大家批評指正,以助我改進完善本書。
第1章 嵌入式軟件開發(fā)導論 1
1.1 概述 1
1.1.1 定義 1
1.1.2 發(fā)展歷史 2
1.1.3 應用領域 3
1.1.4 特點 5
1.2 嵌入式系統(tǒng)的組成 5
1.2.1 嵌入式處理器 6
1.2.2 嵌入式外圍設備 7
1.2.3 嵌入式操作系統(tǒng) 7
1.2.4 嵌入式應用軟件 8
1.3 嵌入式軟件的開發(fā)流程 9
1.3.1 需求分析階段 9
1.3.2 設計階段 10
1.3.3 生成代碼階段 12
1.3.4 固化階段 14
1.3.5 嵌入式軟件開發(fā)的特點 15
1.4 嵌入式系統(tǒng)開發(fā)的硬件資源 16
1.4.1 在線仿真器 16
1.4.2 邏輯分析儀 17
1.4.3 ROM仿真器 17
1.4.4 源程序模擬器 17
1.4.5 示波器 17
1.5 嵌入式系統(tǒng)開發(fā)的軟件資源 18
1.5.1 語言編譯工具 18
1.5.2 交叉調(diào)試器 19
1.5.3 實時多任務操作系統(tǒng) 19
1.5.4 集成開發(fā)環(huán)境 19
1.5.5 板級支持包 19
1.6 嵌入式軟件的可移植性和
?可重用性 21
1.7 小結(jié) 22
課后習題 22
參考文獻 22
第2章 嵌入式操作系統(tǒng) 23
2.1 嵌入式操作系統(tǒng)基礎 23
2.1.1 嵌入式操作系統(tǒng)概念 23
2.1.2 嵌入式操作系統(tǒng)設計原則 24
2.1.3 嵌入式操作系統(tǒng)發(fā)展及趨勢 25
2.2 嵌入式操作系統(tǒng)的體系結(jié)構 27
2.2.1 單模塊結(jié)構 27
2.2.2 層次結(jié)構 27
2.2.3 微內(nèi)核結(jié)構 28
2.2.4 層次與微內(nèi)核相結(jié)合的結(jié)構 29
2.3 嵌入式操作系統(tǒng)的分類 30
2.4 常見嵌入式實時操作系統(tǒng) 31
2.4.1 VxWorks 31
2.4.2 pSOS 32
2.4.3 QNX 32
2.4.4 Delta OS 33
2.4.5 μC/OSII 33
2.5 嵌入式Linux操作系統(tǒng) 34
2.5.1 嵌入式Linux操作系統(tǒng)的特點 34
2.5.2 嵌入式Linux的引導程序 35
2.5.3 Linux內(nèi)核 36
2.5.4 嵌入式Linux文件系統(tǒng) 39
2.6 Windows CE 40
2.6.1 Windows CE簡介 41
2.6.2 Windows CE 的體系結(jié)構 42
2.7 小結(jié) 45
課后習題 45
參考文獻 45
第3章 UML建模技術 46
3.1 OO基礎 46
3.1.1 OO基本概念 46
3.1.2 OO的特征 48
3.1.3 OO的要素 48
3.2 UML語義 50
3.2.1 UML元模型理論 50
3.2.2 UML的組織結(jié)構 51
3.2.3 UML建模概念 51
3.2.4 UML的構造事物 53
3.2.5 UML中的關系 53
3.3 UML圖形表示 54
3.3.1 UML靜態(tài)結(jié)構圖 56
3.3.2 Use Case圖 59
3.3.3 UML交互圖 60
3.3.4 UML狀態(tài)圖 61
3.3.5 UML活動圖 63
3.3.6 UML實現(xiàn)圖 64
3.4 基于UML的軟件建模 65
3.4.1 UML建模過程 65
3.4.2 UML建模過程的特點 66
3.4.3 UML建模實例 68
3.5 小結(jié) 72
課后習題 72
參考文獻 73
第4章 面向?qū)ο蟮那度胧杰浖?
開發(fā)過程 74
4.1 OO開發(fā)過程中的基本概念 74
4.1.1 模式 74
4.1.2 復用 75
4.1.3 構架 75
4.1.4 框架 75
4.1.5 模型 75
4.2 OO軟件開發(fā)原則 76
4.2.1 迭代式開發(fā) 76
4.2.2 模型驅(qū)動 77
4.2.3 MDA的開發(fā)模式 77
4.3 用例驅(qū)動、以框架為核心的迭代
增量開發(fā)過程 79
4.3.1 用例驅(qū)動 80
4.3.2 以框架為核心 82
4.3.3 迭代和增量式過程 82
4.4 統(tǒng)一軟件開發(fā)過程 83
4.4.1 先啟階段 84
4.4.2 精化階段 85
4.4.3 構建階段 85
4.4.4 產(chǎn)品化階段 85
4.4.5 迭代開發(fā)與控制管理 86
4.5 嵌入式系統(tǒng)快速面向?qū)ο?
?開發(fā)過程 86
4.5.1 ROPES中的主要活動 87
4.5.2 ROPES過程中的階段工件 89
4.5.3 嵌入式軟件框架 92
4.6 小結(jié) 93
課后習題 93
參考文獻 94
第5章 面向?qū)ο蟮那度胧杰浖?
需求分析 95
5.1 基本概念 95
5.1.1 需求分析目標及內(nèi)容 95
5.1.2 用例模型 97
5.1.3 用例的補充描述 101
5.2 嵌入式系統(tǒng)需求分析 103
5.2.1 確定系統(tǒng)邊界 103
5.2.2 尋找參與者 104
5.2.3 尋找用例 104
5.2.4 尋找初始和終止事件 105
5.2.5 準備普通場景 105
5.2.6 增加變化和異常場景 106
5.2.7 尋找外部事件 106
5.2.8 畫順序圖 106
5.2.9 組織參與者和用例 107
5.3 嵌入式系統(tǒng)結(jié)構分析 107
5.3.1 領域分析與問題陳述 107
5.3.2 發(fā)現(xiàn)對象 107
5.3.3 標識關聯(lián) 110
5.3.4 標識對象屬性 111
5.3.5 建立系統(tǒng)的類模型 112
5.4 嵌入式系統(tǒng)行為分析 116
5.4.1 對象行為 116
5.4.2 狀態(tài)行為 117
5.4.3 建立狀態(tài)模型 120
5.4.4 建立交互模型 122
5.4.5 增加類的主要操作 124
5.5 小結(jié) 125
課后習題 126
參考文獻 126
第6章 面向?qū)ο蟮那度胧较到y(tǒng)
軟件設計 127
6.1 軟件構架設計 127
6.1.1 系統(tǒng)分解 127
6.1.2 軟件體系結(jié)構 129
6.1.3 并發(fā)性 134
6.1.4 選擇持續(xù)數(shù)據(jù)管理基礎設施 135
6.1.5 選擇完整性控制策略 135
6.1.6 選擇全局控制流機制 136
6.1.7 邊界條件處理 136
6.1.8 人機界面設計 136
6.2 嵌入式系統(tǒng)機制設計 137
6.2.1 設計模式 137
6.2.2 Adapter設計模式 139
6.2.3 匹配合適的模式 143
6.2.4 確定問題內(nèi)部的并發(fā)性 145
6.2.5 選擇軟件控制策略 145
6.2.6 處理邊界條件 146
6.2.7 權衡開發(fā)策略的優(yōu)先級 147
6.2.8 填補從高層需求到低層
服務間的空白 147
6.2.9 用操作實現(xiàn)用例 147
6.2.10 將操作分配給類 148
6.2.11 設計優(yōu)化 149
6.2.12 組織類 150
6.3 嵌入式系統(tǒng)詳細設計 151
6.3.1 數(shù)據(jù)結(jié)構 151
6.3.2 關聯(lián)的實現(xiàn) 152
6.3.3 對象接口 154
6.3.4 操作及其可見性 155
6.3.5 用于實現(xiàn)操作的算法 155
6.4 小結(jié) 155
課后習題 156
參考文獻 156
第7章 Linux系統(tǒng)嵌入式軟件開發(fā) 157
7.1 驅(qū)動程序開發(fā) 157
7.1.1 驅(qū)動程序結(jié)構 157
7.1.2 驅(qū)動程序分類 158
7.1.3 驅(qū)動程序加載方式 161
7.1.4 字符設備驅(qū)動程序?qū)嵗?163
7.2 Linux應用軟件開發(fā) 165
7.2.1 嵌入式視頻服務器 165
7.2.2 嵌入式Linux的GUI 167
7.2.3 Qt/Embedded簡介 169
7.2.4 Qt/Embedded的開發(fā)環(huán)境 170
7.2.5 Qt/Embedded常用類 172
7.3 代碼優(yōu)化 174
7.3.1 代碼優(yōu)化分類 174
7.3.2 源代碼優(yōu)化 175
7.3.3 中間代碼優(yōu)化 177
7.3.4 目標代碼優(yōu)化 178
7.4 小結(jié) 178
課后習題 178
參考文獻 178
第8章 Android嵌入式軟件開發(fā) 179
8.1 Android開發(fā)基礎 179
8.1.1 Android操作系統(tǒng)特性 179
8.1.2 Android系統(tǒng)架構 180
8.1.3 Android開發(fā)環(huán)境搭建 182
8.2 Android驅(qū)動程序開發(fā) 186
8.2.1 Android Things 186
8.2.2 LED燈條驅(qū)動程序開發(fā) 186
8.3 Android應用開發(fā) 189
8.3.1 Android開發(fā)模式 189
8.3.2 Android數(shù)據(jù)庫開發(fā) 191
8.3.3 Android開發(fā)實例 193
8.4 小結(jié) 199
課后習題 199
參考文獻 199
第9章 嵌入式軟件測試 200
9.1 MISRA C語言編程規(guī)范 200
9.2 嵌入式軟件靜態(tài)測試 211
9.2.1 代碼分析 211
9.2.2 錯誤分析 211
9.2.3 代碼檢查 212
9.3 嵌入式軟件動態(tài)測試 213
9.3.1 白盒測試 213
9.3.2 黑盒測試 214
9.3.3 灰盒測試 214
9.4 嵌入式軟件測試過程 215
9.4.1 過程模型 215
9.4.2 單元測試 218
9.4.3 集成測試 219
9.4.4 確認測試 219
9.4.5 系統(tǒng)測試 220
9.5 嵌入式軟件測試工具 221
9.5.1 純軟件測試工具 221
9.5.2 純硬件測試工具 221
9.5.3 軟硬件結(jié)合的測試工具 222
9.5.4 主流嵌入式軟件測試
工具比較 222
9.6 小結(jié) 224
課后習題 224
參考文獻 224