C++ 嵌入式開發實例精解 Embedded Programming with C++ Cookbook: Practical recipes to help you build robust and secure embedded applications on Linux

Igor Viarheichyk 譯 劉顒

  • C++ 嵌入式開發實例精解-preview-1
  • C++ 嵌入式開發實例精解-preview-2
  • C++ 嵌入式開發實例精解-preview-3
C++ 嵌入式開發實例精解-preview-1

買這商品的人也買了...

商品描述

本書詳細闡述了與C++嵌入式開發相關的基本解決方案,主要包括嵌入式系統的基礎知識,配置開發環境,與不同的體系結構協同工作,處理中斷,調試、日誌和分析,內存管理,多線程和同步機制,通信和序列化,外圍設備,降低功耗,時間點和時間間隔,錯誤處理和容錯機制,實時系統、安全性系統的指導原則,微控制器編程等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。

目錄大綱

目    錄

第1章  嵌入式系統的基礎知識 1

1.1  考查嵌入式系統 1

1.1.1  與台式機或Web應用程序的不同之處 1

1.1.2  嵌入式系統的類型 2

1.1.3  微控制器 2

1.1.4  片上系統 3

1.1.5  專用集成電路 4

1.1.6  現場可編程門陣列 4

1.2  與有限的資源協同工作 4

1.3  考查性能影響 4

1.4  與不同的架構協同工作 5

1.4.1  字節順序 5

1.4.2  對齊問題 7

1.4.3  定寬整數類型 8

1.5  處理硬件錯誤 8

1.5.1  硬件的早期版本 8

1.5.2  硬件的不可靠性 9

1.5.3  環境條件的影響 9

1.6  C++嵌入式開發 9

1.6.1  不必為無用的事務付諸實踐 10

1.6.2  基於面向對象編程的代碼復雜度計算 12

1.6.3  資源獲取時即初始化 12

1.6.4  異常機制 14

1.6.5  強大的標準庫 16

1.6.6  線程和內存模型 16

1.7  遠程部署軟件 17

1.8  遠程運行軟件 18

1.9  日誌和診斷 18

1.10  本章小結 19

第2章  配置開發環境 21

2.1  在Docker容器中配置構建系統 22

2.1.1  實現方式 22

2.1.2  工作方式 23

2.1.3  更多內容 24

2.2  與模擬器協同工作 24

2.2.1  實現方式 25

2.2.2  工作方式 25

2.2.3  更多內容 27

2.3  交叉編譯 27

2.3.1  準備工作 27

2.3.2  實現方式 27

2.3.3  工作方式 28

2.3.4  更多內容 31

2.4  連接至嵌入式系統 31

2.4.1  準備工作 31

2.4.2  實現方式 31

2.4.3  工作方式 32

2.4.4  更多內容 33

2.5  調試嵌入式應用程序 34

2.5.1  準備工作 34

2.5.2  實現方式 34

2.5.3  工作方式 35

2.5.4  更多內容 36

2.6  針對遠程調試使用gdbserver 37

2.6.1  準備工作 37

2.6.2  實現方式 37

2.6.3  工作方式 38

2.6.4  更多內容 39

2.7  使用CMake作為構建系統 40

2.7.1  準備工作 40

2.7.2  實現方式 40

2.7.3  工作方式 41

2.7.4  更多內容 44

第3章  與不同的體系結構協同工作 45

3.1  定寬整數類型 45

3.1.1  實現方式 46

3.1.2  工作方式 47

3.1.3  更多內容 48

3.2  處理size_t類型 48

3.2.1  實現方式 48

3.2.2  工作方式 49

3.2.3  更多內容 50

3.3  檢測平臺的字節順序 50

3.3.1  實現方式 51

3.3.2  工作方式 52

3.3.3  更多內容 53

3.4  轉換字節順序 53

3.4.1  實現方式 54

3.4.2  工作方式 57

3.5  處理數據對齊問題 58

3.5.1  實現方式 59

3.5.2  工作方式 60

3.5.3  更多內容 61

3.6  處理打包結構 61

3.6.1  實現方式 62

3.6.2  工作方式 62

3.6.3  更多內容 63

3.7  緩存行對齊數據 63

3.7.1  實現方式 63

3.7.2  工作方式 65

3.7.3  更多內容 66

第4章  處理中斷 67

4.1  數據輪詢 67

4.2  中斷服務程序 68

4.3  對ISR的一般考慮 68

4.4  8051微控制器中斷 69

4.5  實現中斷服務程序 70

4.5.1  實現方式 70

4.5.2  工作方式 72

4.6  通過8位自動重載模式生成一個5 kHz的方波信號 73

4.6.1  實現方式 74

4.6.2  工作方式 75

4.7  使用Timer 1作為事件計數器計數一個1 Hz脈沖 76

4.7.1  實現方式 76

4.7.2  工作方式 78

4.7.3  更多內容 79

4.8  串行接收和傳輸數據 79

4.8.1  實現方式 80

4.8.2  工作方式 80

4.8.3  更多內容 81

第5章  調試、日誌和分析 83

5.1  技術需求 83

5.2  在GDB中運行源程序 84

5.2.1  實現方式 84

5.2.2  工作方式 86

5.2.3  更多內容 90

5.3  處理斷點 91

5.3.1  實現方式 91

5.3.2  工作方式 92

5.3.3  更多內容 96

5.4  處理核心轉儲 96

5.4.1  實現方式 96

5.4.2  工作方式 97

5.4.3  更多內容 99

5.5  使用gdbserver進行調試 99

5.5.1  準備工作 100

5.5.2  實現方式 100

5.5.3  工作方式 100

5.6  添加調試日誌機制 101

5.6.1  實現方式 101

5.6.2  工作方式 102

5.6.3  更多內容 104

5.7  與調試和發布版本協同工作 104

5.7.1  實現方式 105

5.7.2  工作方式 106

5.7.3  更多內容 108

第6章  內存管理 109

6.1  使用動態內存分配 109

6.1.1  實現方式 110

6.1.2  工作方式 112

6.2  對象池 112

6.2.1  實現方式 113

6.2.2  工作方式 115

6.2.3  更多內容 118

6.3  環狀緩沖區 118

6.3.1  實現方式 119

6.3.2  工作方式 121

6.4  使用共享內存 124

6.4.1  實現方式 125

6.4.2  工作方式 128

6.4.3  更多內容 131

6.5  使用專用內存 131

6.5.1  實現方式 131

6.5.2  工作方式 133

6.5.3  更多內容 135

第7章  多線程和同步機制 137

7.1  C++語言中的線程支持 137

7.1.1  實現方式 138

7.1.2  工作方式 139

7.2  數據同步機制 140

7.2.1  實現方式 140

7.2.2  工作方式 141

7.2.3  更多內容 143

7.3  使用條件變量 143

7.3.1  實現方式 143

7.3.2  工作方式 145

7.3.3  更多內容 147

7.4  使用原子變量 147

7.4.1  實現方式 148

7.4.2  工作方式 150

7.4.3  更多內容 151

7.5  使用C++內存模型 152

7.5.1  實現方式 152

7.5.2  工作方式 154

7.5.3  更多內容 155

7.6  無鎖同步機制 155

7.6.1  實現方式 155

7.6.2  工作方式 157

7.6.3  更多內容 158

7.7  在共享內存中使用原子變量 159

7.7.1  實現方式 159

7.7.2  工作方式 162

7.8  異步函數和特性 164

7.8.1  實現方式 165

7.8.2  工作方式 166

7.8.3  更多內容 168

第8章  通信和序列化 169

8.1  在應用程序中使用進程間的通信 169

8.1.1  實現方式 170

8.1.2  工作方式 172

8.1.3  更多內容 175

8.2  進程間的通信機制 175

8.2.1  準備工作 175

8.2.2  實現方式 176

8.2.3  工作方式 177

8.2.4  更多內容 178

8.3  消息隊列和發布者-訂閱者模式 178

8.3.1  實現方式 179

8.3.2  工作方式 182

8.3.3  更多內容 184

8.4  針對回調使用C++ lambda函數 185

8.4.1  實現方式 185

8.4.2  工作方式 186

8.4.3  更多內容 187

8.5  數據序列化 187

8.5.1  實現過程 188

8.5.2  工作方式 190

8.5.3  更多內容 191

8.6  使用FlatBuffers庫 192

8.6.1  實現方式 192

8.6.2  工作方式 194

8.6.3  更多內容 195

第9章  外圍設備 197

9.1  控制通過GPIO連接的設備 197

9.1.1  實現方式 197

9.1.2  工作方式 199

9.2  脈沖寬度調制 201

9.2.1  實現方式 201

9.2.2  工作方式 203

9.2.3  更多內容 204

9.3  在Linux中使用ioctl訪問實時時鐘 204

9.3.1  實現方式 205

9.3.2  工作方式 207

9.3.3  更多內容 208

9.4  使用libgpiod控制GPIO引腳 208

9.4.1  實現方式 209

9.4.2  工作方式 210

9.4.3  更多內容 211

9.5  控制I2C外圍設備 211

9.5.1  實現方式 212

9.5.2  工作方式 216

9.5.3  更多內容 219

第10章  降低功耗 221

10.1  技術需求 221

10.2  考查Linux中的節能模式 221

10.2.1  實現方式 222

10.2.2  工作方式 223

10.2.3  更多內容 224

10.3  利用RTC進行喚醒 224

10.3.1  實現方式 224

10.3.2  工作方式 225

10.3.3  更多內容 226

10.4  控制USB設備的自動掛起 226

10.4.1  實現方式 226

10.4.2  工作方式 227

10.4.3  更多內容 229

10.5  配置CPU頻率 230

10.5.1  實現方式 230

10.5.2  工作方式 231

10.5.3  更多內容 235

10.6  等待事件 235

10.6.1  實現方式 235

10.6.2  工作方式 238

10.6.3  更多內容 241

10.7  利用PowerTOP分析功耗 241

10.7.1  實現方式 241

10.7.2  工作方式 242

10.7.3  更多內容 244

第11章  時間點和時間間隔 245

11.1  C++ Chrono庫 245

11.1.1  實現方式 245

11.1.2  工作方式 246

11.1.3  更多內容 247

11.2  測量時間間隔 247

11.2.1  實現方式 248

11.2.2  工作方式 249

11.2.3  更多內容 250

11.3  處理延遲問題 250

11.3.1  實現方式 250

11.3.2  工作方式 252

11.3.3  更多內容 253

11.4  使用單調遞增時鐘 254

11.4.1  實現方式 254

11.4.2  工作方式 256

11.4.3  更多內容 257

11.5  使用POSIX時間戳 258

11.5.1  實現方式 258

11.5.2  工作方式 259

11.5.3  更多內容 260

第12章  錯誤處理和容錯機制 261

12.1  處理錯誤代碼 261

12.1.1  實現方式 261

12.1.2  工作方式 264

12.1.3  更多內容 265

12.2  針對錯誤處理使用異常 265

12.2.1  實現方式 266

12.2.2  工作方式 267

12.2.3  更多內容 269

12.3  捕捉異常時使用常量引用 269

12.3.1  實現方式 269

12.3.2  工作方式 271

12.3.3  更多內容 272

12.4  處理靜態對象 273

12.4.1  實現方式 273

12.4.2  工作方式 275

12.5  與定時器協同工作 276

12.5.1  實現方式 277

12.5.2  工作方式 278

12.6  高可用系統的心跳信號 280

12.6.1  實現方式 280

12.6.2  工作方式 283

12.6.3  更多內容 287

12.7  實現軟件反抖動邏輯 287

12.7.1  實現方式 287

12.7.2  工作方式 289

第13章  實時系統 291

13.1  使用Linux中的實時調度器 291

13.1.1  實現方式 292

13.1.2  工作方式 293

13.2  使用靜態分配的內存 295

13.2.1  實現方式 295

13.2.2  工作方式 297

13.2.3  更多內容 298

13.3  避免錯誤處理異常 298

13.3.1  實現方式 299

13.3.2  工作方式 301

13.3.3  更多內容 302

13.4  實時系統 302

13.4.1  實現方式 302

13.4.2  工作方式 303

13.4.3  更多內容 304

第14章  安全性系統的指導原則 305

14.1  使用全部函數的返回值 305

14.1.1  實現方式 306

14.1.2  工作方式 308

14.1.3  更多內容 310

14.2  使用靜態代碼分析器 310

14.2.1  實現方式 311

14.2.2  工作方式 311

14.2.3  更多內容 312

14.3  使用前置條件和後置條件 312

14.3.1  實現方式 313

14.3.2  工作方式 314

14.3.3  更多內容 316

14.4  代碼正確性的正規驗證方案 316

14.4.1  實現方式 316

14.4.2  工作方式 317

14.4.3  更多內容 319

第15章  微控制器編程 321

15.1  設置開發環境 321

15.1.1  實現方式 321

15.1.2  工作方式 322

15.1.3  更多內容 323

15.2  編譯並上傳程序 323

15.2.1  實現方式 323

15.2.2  工作方式 323

15.2.3  更多內容 325

15.3  調試微控制器代碼 326

15.3.1  實現方式 326

15.3.2  工作方式 327