嵌入式C++實戰:從C語言無縫切換到現代C++
王士喜
- 出版商: 人民郵電
- 出版日期: 2026-03-01
- 售價: $600
- 語言: 簡體中文
- ISBN: 7115692718
- ISBN-13: 9787115692719
-
相關分類:
C++ 程式語言
- 此書翻譯自: C++ in Embedded Systems: A practical transition from C to modern C++ (Paperback)
下單後立即進貨 (約4週~6週)
相關主題
商品描述
本書系統闡述了現代C++(直至C++23)在資源受限嵌入式系統開發中的應用方法與實踐技巧。本書不僅深入解析了C++相較於C語言在嵌入式開發中的核心優勢,還全面覆蓋了從語言基礎到高階技術,再到實際工程落地的完整知識體系。全書共18章,分為四大部分。 部分聚焦嵌入式開發中C++的認知普及與環境搭建,破除關於C++的常見誤解,分析資源受限嵌入式系統的開發挑戰,介紹嵌入式C++生態系統的工具鏈,分析工具與測試框架,並指導讀者搭建現代化的嵌入式C++項目開發環境與仿真測試環境。第2部分夯實C++基礎核心,詳解類的核心機制,命名空間,函數重載等基礎特性,以及C++與C語言的互操作性,同時系統梳理各類錯誤處理技術與異常機制。第3部分深入C++ 概念,包括模板與元編程,強類型安全強化。lambda表達式應用及編譯時計算等關鍵技術,助力開發者編寫通用,高效,高可讀性的代碼。第4部分聚焦嵌入式實際問題解決,演示硬件抽象層(HAL)實現,C庫協作方法,講解序列器優化,設計模式應用,有限狀態機設計等實用方案,並介紹嵌入式開發常用庫與框架及跨平臺開發技巧。本書適合長期使用C語言,希望轉型現代C++的嵌入式開發者閱讀,也適合從事低功耗設備,醫療設備,汽車電子,自動駕駛等領域的軟硬件開發工程師,系統設計工程師及技術愛好者閱讀。無論讀者是否具備深厚的C++基礎,都能通過本書掌握嵌入式C++開發的核心能力,開發出 可靠,靈活,易維護且高效的嵌入式系統。
作者簡介
阿瑪爾?馬哈茂德貝戈維奇(Amar Mahmutbegovi?)是Semblie公司的聯合創始人兼工程負責人,他帶領團隊將現代 C++ 技術應用於固件開發。他的專業領域涵蓋藍牙低功耗(BLE)消費類設備與醫療設備開發,為包括初創企業在內的各類客戶提供精密成熟的解決方案。阿瑪爾對創新的執著追求,助力眾多電子產品理念成功落地。在嵌入式開發社區中,阿瑪爾通過博客與領英(LinkedIn)積極分享C++語言的優勢,同時為年輕工程師提供指導,幫助他們提升現代開發實踐技能。他的工作目標是讓嵌入式系統 易於開發、維護且具備可擴展性,為 開發者搭建起傳統開發方法與現代高效技術之間的橋梁。
目錄大綱
第1部分 嵌入式開發中的C++簡介
第1章 破除關於C++的常見誤解 2
1.1 C++的簡要發展史 3
1.2 帶類的C語言 4
1.2.1 現代C++ 4
1.2.2 泛型類型 5
1.2.3 constexpr說明符 12
1.3 代碼膨脹與運行時開銷 16
1.3.1 構造函數與析構函數 16
1.3.2 優化 20
1.3.3 模板 22
1.3.4 RTTI與異常 23
1.4 總結 25
第2章 資源受限嵌入式系統的挑戰 27
2.1 *關鍵型與硬實時嵌入式系統 27
2.1.1 *氣囊控制單元與實時性需求 28
2.1.2 固件性能與非確定性測量 29
2.2 動態內存管理 32
2.2.1 內存碎片 33
2.2.2 C++動態內存管理的*關鍵型指南 34
2.2.3 C++標準庫中的動態內存管理 35
2.3 禁用不需要的C++特性 39
2.4 總結 41
第3章 嵌入式C++生態系統 42
3.1 編譯器與開發環境 42
3.1.1 Arm Keil MDK與Arm嵌入式編譯器 44
3.1.2 IAR C/C++編譯器與IAR Arm嵌入式工作臺 45
3.1.3 廠商支持的IDE與GCC 46
3.2 靜態分析器 48
3.3 單元測試 51
3.4 性能分析 55
3.5 總結 57
第4章 搭建C++嵌入式項目開發環境 58
4.1 現代軟件開發環境的需求 58
4.1.1 編譯器 59
4.1.2 構建自動化 60
4.1.3 模擬器 60
4.1.4 代碼編輯器 60
4.2 容器化開發環境 61
4.2.1 用CMake構建“Hello, World!”程序 62
4.2.2 使用CMake構建固件 65
4.3 容器化開發環境與Visual Studio Code的結合 66
4.4 總結 70
第2部分 C++基礎
第5章 類—C++應用的構建塊 72
5.1 封裝 72
5.1.1 setter與getter 74
5.1.2 靜態方法 75
5.1.3 結構體 76
5.2 存儲期與初始化 77
5.2.1 非靜態成員的初始化 77
5.2.2 靜態成員初始化 81
5.3 繼承與動態多態 82
5.3.1 虛函數 84
5.3.2 動態多態 87
5.4 總結 88
第6章 類外核心特性—C++進階基礎基石 89
6.1 命名空間 89
6.1.1 無名命名空間 91
6.1.2 嵌套命名空間 91
6.2 函數重載 92
6.3 與C語言的互操作性 93
6.3.1 C++中的外部鏈接和語言鏈接 94
6.3.2 C++中的C標準庫 94
6.4 引用 95
6.4.1 值類別 96
6.4.2 左值引用 97
6.4.3 右值引用 97
6.5 標準庫容器與算法 99
6.5.1 數組 99
6.5.2 容器適配器 100
6.5.3 算法 101
6.6 總結 103
第7章 強化固件—實用的C++錯誤處理方法 104
7.1 錯誤碼與斷言 104
7.1.1 全局錯誤處理器 107
7.1.2 斷言 108
7.2 異常 112
7.3 std::optional與std::expected 114
7.4 總結 117
第3部分 C++*概念
第8章 使用模板構建通用、可覆用的代碼 120
8.1 模板基礎 120
8.1.1 模板函數的調用 121
8.1.2 模板特化 123
8.2 模板元編程 124
8.3 concept 127
8.4 編譯時多態 128
8.5 總結 132
第9章 使用強類型提升類型* 133
9.1 隱式轉換 133
9.1.1 數值提升與數值轉換 135
9.1.2 數組到指針的轉換 138
9.1.3 函數到指針的轉換 140
9.2 顯式轉換 141
9.2.1 const_cast 141
9.2.2 static_cast 142
9.2.3 dynamic_cast 144
9.2.4 reinterpret_cast 145
9.3 強類型 150
9.4 總結 154
第10章 使用lambda編寫高可讀性代碼 155
10.1 lambda表達式基礎 155
10.2 使用std::function存儲lambda表達式 157
10.2.1 命令模式 160
10.2.2 GPIO中斷管理器 161
10.3 std::function與動態內存分配 164
10.4 總結 166
第11章 編譯時計算 167
11.1 模板 167
11.2 constexpr說明符 169
11.2.1 示例1:MAC地址解析器 171
11.2.2 示例2:生成查找表 173
11.3 consteval說明符 183
11.4 總結 184
第4部分 使用C++解決嵌入式領域問題
第12章 編寫C++硬件抽象層(HAL) 186
12.1 內存映射的外設 186
12.1.1 CMSIS內存映射的外設 187
12.1.2 C++中的內存映射外設 188
12.1.3 C++中類型*的內存映射外設 191
12.2 定時器 195
12.3 總結 199
第13章 使用C語言庫 200
13.1 在C++項目中使用C語言HAL 200
13.1.1 用於靈活軟件設計的UART接口 201
13.1.2 適配器模式中的UART接口 204
13.2 靜態類 205
13.3 利用RAII封裝littlefs C庫 207
13.3.1 LittleFS—適用於微控制器的文件系統 207
13.3.2 基於RAII的C++包裝器 210
13.3.3 利用RAII實現更簡潔的文件管理 212
13.4 總結 213
第14章 用序列器增強*循環 214
14.1 *循環及序列器的設計動機 214
14.2 設計序列器 216
14.3 存儲可調用對象 218
14.4 實現序列器 221
14.5 總結 224
第15章 實用模式—構建溫度發布器 225
15.1 觀察者模式 225
15.2 運行時實現 227
15.3 編譯時實現 230
15.3.1 利用可變參數模板 230
15.3.2 改進編譯時實現 233
15.4 總結 235
第16章 設計可擴展的有限狀態機 236
16.1 FSM—簡單實現 236
16.1.1 描述狀態和事件 238
16.1.2 跟蹤當前狀態和處理事件—FSM類 238
16.1.3 使用ble_fsm類 240
16.1.4 分析輸出 241
16.2 FSM—使用狀態模式的實現 242
16.2.1 理解狀態類接口 242
16.2.2 重構ble_fsm類 244
16.2.3 實現狀態模式 245
16.2.4 狀態設計模式 246
16.3 使用標簽分發的狀態模式實現 247
16.4 Boost SML 250
16.5 總結 252
第17章 庫與框架 253
17.1 標準庫 253
17.1.1 GCC中的獨立式實現與宿主式實現 254
17.1.2 數值與數學 254
17.1.3 容器與算法 255
17.1.4 模板元編程 257
17.1.5 嵌入式應用中應避免的標準庫部分 258
17.2 嵌入式模板庫(ETL) 258
17.2.1 固定大小的容器 258
17.2.2 使用etl::delegate存儲可調用對象 259
17.2.3 ETL提供的其他工具 259
17.3 Pigweed 259
17.3.1 Pigweed的Sense教程 260
17.3.2 RPC和協議緩沖區 264
17.4 編譯時初始化與構建(CIB) 266
17.4.1 在溫度發布器示例中使用CIB 267
17.4.2 擴展溫度發布器示例 269
17.5 總結 272
第18章 跨平臺開發 273
18.1 編寫可移植代碼的重要性 273
18.2 SOLID設計原則 274
18.2.1 單一職責原則(SRP) 277
18.2.2 開閉原則(OCP) 277
18.2.3 裏氏替換原則(LSP) 278
18.2.4 接口隔離原則(ISP) 278
18.2.5 依賴倒置原則(DIP) 278
18.3 可測試性 278
18.4 總結 281
