暂无商品咨询信息 [发表商品咨询]
本书由拥有 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 |
| 纸张 | |
暂无商品评论信息 [发表商品评论]
暂无商品咨询信息 [发表商品咨询]