暫無商品咨詢信息 [發表商品咨詢]
本書由擁有 50 余年嵌入式系統編程經驗的 Stephen Oualline 撰寫,經電氣 / 電子工程領域專家 Frank Duignan 審校,專業性與權威性兼具。內容圍繞嵌入式開發核心需求展開,既系統講解嵌入式系統基礎知識、開發環境搭建,又深入剖析 C 語言在動態內存管理、中斷控制、寄存器操作等場景的實戰技巧,且全程以 STM32F030x4 處理器為實例,結合編譯原理、鏈接器應用等底層邏輯,為不同階段開發者提供從理論到實踐的完整知識體系,是嵌入式 C 語言開發領域兼具深度與實用性的專業參考用書。
本書是一部專注于嵌入式系統編程的指南,旨在幫助你深入探索嵌入式系統的奧秘,掌握C語言在嵌入式領域的應用技巧,從而在嵌入式開發領域取得成功。全書分為兩部分:第一部分(第1~12章)介紹了嵌入式系統的基礎知識和開發環境的搭建,包括安裝必要的工具和軟件、配置開發環境等內容,通過一步步的實踐示例,帶你快速入門嵌入式系統編程,了解嵌入式程序的編寫流程和基本技巧;第二部分(第13~18章)更深入地探討了C語言在嵌入式系統中的高級應用,從動態內存管理、文件I/O操作、命令行參數處理到模塊化編程等方面,全面介紹了C語言在嵌入式系統中的實際應用技巧和最佳實踐,幫助你進一步提升編程技能,應對更復雜的編程任務。
目 錄<br />譯者序<br />前言<br />關于作者<br />關于技術審校<br />第一部分 嵌入式編程<br />第1章 Hello World 3<br />1.1 安裝GCC 3<br />1.2 下載STM32系統工作臺 4<br />1.3 我們的第一個程序 4<br />1.3.1 編譯程序 5<br />1.3.2 犯錯 5<br />1.3.3 理解程序 6<br />1.3.4 添加注釋 7<br />1.4 改進程序和構建流程 7<br />1.4.1 make 程序 8<br />1.4.2 編譯器標志 9<br />1.5 編譯器在幕后的工作方式 9<br />1.5.1 預處理器 10<br />1.5.2 編譯器 10<br />1.5.3 匯編器 11<br />1.5.4 鏈接器 12<br />1.6 在Makefile中添加內容 13<br />1.7 總結 14<br />1.8 問題 15<br />第2章 集成開發環境介紹 16<br />2.1 使用STM32的System <br />Workbench 16<br />2.1.1 啟動IDE 17<br />2.1.2 創建Hello World 18<br />2.1.3 調試程序 21<br />2.2 IDE為我們做了什么 24<br />2.3 導入本書的編程示例 25<br />2.4 總結 25<br />2.5 編程問題 26<br />2.6 其他問題 26<br />第3章 嵌入式系統編程 27<br />3.1 NUCLEO-F030R8開發板 27<br />3.1.1 對開發板進行編程和調試 28<br />3.1.2 配置開發板 28<br />3.2 建立嵌入式項目 30<br />3.3 你的第一個嵌入式程序 33<br />3.3.1 初始化硬件 33<br />3.3.2 GPIO引腳編程 34<br />3.3.3 切換LED 35<br />3.3.4 構建完成的程序 35<br />3.4 探索構建過程 36<br />3.5 探索項目文件 38<br />3.6 調試應用程序 39<br />3.7 逐步執行程序 41<br />3.8 總結 42<br />3.9 編程問題 43<br />3.10 其他問題 43<br />第4章 數字和變量 44<br />4.1 使用整數 44<br />4.1.1 聲明保存整數的變量 45<br />4.1.2 給變量賦值 46<br />4.1.3 初始化變量 47<br />4.2 整數大小和表示 47<br />4.2.1 數字表示 49<br />4.2.2 標準整數 50<br />4.2.3 無符號整數類型 51<br />4.2.4 溢出 52<br />4.2.5 有符號整數類型中的補碼<br />表示 54<br />4.3 縮寫操作符 55<br />4.4 使用位操作控制內存映射的I/O<br />寄存器 56<br />4.4.1 或 56<br />4.4.2 與 57<br />4.4.3 非 58<br />4.4.4 異或 58<br />4.4.5 位移 59<br />4.5 定義位的含義 60<br />4.5.1 同時設置兩個位的值 61<br />4.5.2 關閉一個位 61<br />4.5.3 檢查位的值 62<br />4.6 總結 64<br />4.7 編程問題 64<br />第5章 決策和控制語句 65<br />5.1 if語句 65<br />5.2 if/else語句 67<br />5.3 循環語句 67<br />5.3.1 while循環 68<br />5.3.2 for循環 69<br />5.4 使用按鈕 70<br />5.4.1 初始化 71<br />5.4.2 選擇下拉電路 71<br />5.4.3 獲取按鈕的狀態 73<br />5.4.4 運行程序 73<br />5.5 循環控制 74<br />5.5.1 break語句 74<br />5.5.2 continue語句 74<br />5.6 反模式 75<br />5.6.1 空的while循環 75<br />5.6.2 while中的賦值 76<br />5.7 總結 76<br />5.8 編程問題 77<br />第6章 數組、指針和字符串 78<br />6.1 數組 78<br />6.1.1 底層細節:指針 80<br />6.1.2 數組和指針算術 83<br />6.1.3 數組溢出 84<br />6.2 字符和字符串 86<br />6.3 總結 88<br />6.4 編程問題 88<br />第7章 局部變量和函數 89<br />7.1 局部變量 89<br />7.2 隱藏變量 90<br />7.3 函數 91<br />7.4 堆棧幀 92<br />7.5 遞歸 95<br />7.6 編程風格 96<br />7.7 總結 97<br />7.8 編程問題 97<br />第8章 復雜數據類型 98<br />8.1 枚舉 98<br />8.2 預處理器技巧和枚舉 99<br />8.3 結構體 101<br />8.3.1 內存中的結構體 103<br />8.3.2 訪問未對齊的數據 104<br />8.3.3 結構體初始化 106<br />8.3.4 結構體賦值 107<br />8.3.5 結構體指針 108<br />8.3.6 結構體命名 109<br />8.4 聯合體 110<br />8.5 創建自定義類型 111<br />8.6 結構體和嵌入式編程 113<br />8.7 typedef 114<br />8.7.1 函數指針和typedef 115<br />8.7.2 typedef和struct 116<br />8.8 總結 117<br />8.9 編程問題 117<br />第9章 STM上的串口輸出 119<br />9.1 逐字符寫入字符串 119<br />9.2 串行輸出 121<br />9.2.1 串行通信簡史 122<br />9.2.2 串行Hello World 123<br />9.2.3 UART初始化 124<br />9.2.4 發送一個字符 126<br />9.3 與設備通信 131<br />9.3.1 Windows 132<br />9.3.2 Linux和macOS 133<br />9.4 總結 133<br />9.5 編程問題 134<br />第10章 中斷 135<br />10.1 輪詢與中斷 135<br />10.2 串行I/O的中斷 136<br />10.3 中斷例程 136<br />10.4 使用中斷寫入字符串 137<br />10.4.1 程序細節 140<br />10.4.2 中斷問題 143<br />10.5 使用緩沖區來提高速度 144<br />10.5.1 發送函數 145<br />10.5.2 中斷例程 146<br />10.5.3 完整程序 147<br />10.5.4 問題 149<br />10.6 總結 153<br />10.7 編程問題 153<br />第11章 鏈接器 154<br />11.1 鏈接器的作用 155<br />11.2 編譯和鏈接內存模型 155<br />11.2.1 理想的C語言模型 155<br />11.2.2 非標準部分 159<br />11.3 鏈接過程 160<br />11.4 鏈接器定義的符號 161<br />11.5 重定位和鏈接目標文件 162<br />11.6 鏈接器映射文件 163<br />11.7 高級鏈接器的用法 164<br />11.7.1 用于“永久”存儲的<br />閃存 164<br />11.7.2 多個配置項 171<br />11.7.3 定制示例 172<br />11.7.4 固件升級 172<br />11.8 總結 173<br />11.9 編程問題 173<br />第12章 預處理器 174<br />12.1 簡單宏 174<br />12.1.1 參數化宏 176<br />12.1.2 代碼宏 177<br />12.2 條件編譯 180<br />12.3 符號的定義位置 181<br />12.3.1 命令行符號 182<br />12.3.2 預定義符號 182<br />12.4 包含文件 183<br />12.5 其他預處理器指令 183<br />12.6 預處理器技巧 184<br />12.7 總結 185<br />12.8 編程問題 185<br />第二部分 用于大型機器的<br />C語言編程<br />第13章 動態內存 189<br />13.1 基本堆分配和釋放 189<br />13.2 鏈表 191<br />13.2.1 添加節點 192<br />13.2.2 打印鏈表 194<br />13.2.3 刪除節點 195<br />13.2.4 整合所有內容 196<br />13.3 動態內存問題 198<br />13.4 Valgrind和GCC Address <br />Sanitizer 工具 199<br />13.5 總結 200<br />13.6 編程問題 201<br />第14章 緩沖文件I/O 202<br />14.1 printf 函數 202<br />14.1.1 編寫ASCII表 203<br />14.1.2 寫入預定義文件 204<br />14.2 讀取數據 204<br />14.3 打開文件 206<br />14.4 二進制I/O 207<br />14.5 緩沖和刷新 209<br />14.6 關閉文件 211<br />14.7 總結 211<br />14.8 編程問題 211<br />第15章 命令行參數和原始<br />I/O 212<br />15.1 命令行參數 212<br />15.2 原始I/O 213<br />15.2.1 使用原始I/O 214<br />15.2.2 使用二進制模式 216<br />15.3 ioctl 217<br />15.4 總結 217<br />15.5 編程問題 218<br />第16章 浮點數 219<br />16.1 什么是浮點數 219<br />16.1.1 浮點類型 219<br />16.1.2 自動轉換 220<br />16.2 浮點數的問題 220<br />16.2.1 舍入誤差 220<br />16.2.2 精度位數 221<br />16.3 無窮大、NaN和次正規數 221<br />16.4 實現 223<br />16.5 替代方案 223<br />16.6 總結 226<br />16.7 編程問題 226<br />第17章 模塊化編程 227<br />17.1 簡單的模塊 227<br />17.1.1 簡單模塊的問題 228<br />17.1.2 制作模塊 231<br />17.2 好的模塊有哪些特點 231<br />17.3 命名空間 232<br />17.4 庫 232<br />17.4.1 ranlib和庫鏈接 235<br />17.4.2 確定性與不確定性庫 237<br />17.5 弱符號 237<br />17.6 總結 238<br />17.7 編程問題 239<br />第18章 后記 240<br />18.1 學會寫作 240<br />18.2 學會閱讀 240<br />18.3 合作與創造性借鑒 241<br />18.4 有用的開源工具 241<br />18.4.1 Cppcheck 241<br />18.4.2 Doxygen 241<br />18.4.3 Valgrind 242<br />18.4.4 SQLite 242<br />18.5 永不停止學習 242<br />附錄 項目創建清單 243
| 基本信息 | |
|---|---|
| 出版社 | 機械工業出版社 |
| ISBN | 9787111792017 |
| 條碼 | 9787111792017 |
| 編者 | [美]斯蒂芬·歐林(Stephen Oualline) 著 黃俊彬 譯 |
| 譯者 | |
| 出版年月 | 2025-10-01 00:00:00.0 |
| 開本 | 16開 |
| 裝幀 | 平裝 |
| 頁數 | 248 |
| 字數 | 368 |
| 版次 | 1 |
| 印次 | 1 |
| 紙張 | 一般膠版紙 |
暫無商品評論信息 [發表商品評論]
暫無商品咨詢信息 [發表商品咨詢]