嵌入式C++实战:从C语言无缝切换到现代C++
图书信息
| 作者 | [波黑]阿马尔・马哈茂德贝戈维奇(Amar Mahmutbegović) 著 |
| 出版社 | 人民邮电出版社有限公司 |
| ISBN | 9787115692719 |
| 出版时间 | 2026-03-01 |
| 字数 | 24.4万 |
| 分类 | 科技,计算机,网络,计算机教材 |
读书简介
本书系统阐述了现代C++(直至C++23)在资源受限嵌式系统发中的应用方法与实践技巧。本书不仅深解析了C++相较于C语言在嵌式发中的核心优势,还全面覆盖了从语言基础到高阶技术,再到实际工程落地的完整知识体系。 全书共18章,分为四大部分。第1部分聚焦嵌式发中C++的认知普及与环境搭建,破除关于C++的常见误解,分析资源受限嵌式系统的发挑战,介绍嵌式C++生态系统的工具,分析工具与测试框架,并指导读者搭建现代化的嵌式C++项目发环境与仿真测试环境。
目录
内容提要
推荐序
关于作者
关于技术审稿人
前言
资源与支持
第1部分嵌入式开发中的C++简介
第1章 破除关于C++的常见误解
1.1 C++的简要发展史
1.2 带类的C语言
1.2.1 现代C++
1.2.2 泛型类型
1.2.3 constexpr说明符
1.3 代码膨胀与运行时开销
1.3.1 构造函数与析构函数
1.3.2 优化
1.3.3 模板
1.3.4 RTTI与异常
1.4 总结
第2章 资源受限嵌入式系统的挑战
2.1 安全关键型与硬实时嵌入式系统
2.1.1 安全气囊控制单元与实时性需求
2.1.2 固件性能与非确定性测量
2.2 动态内存管理
2.2.1 内存碎片
2.2.2 C++动态内存管理的安全关键型指南
2.2.3 C++标准库中的动态内存管理
2.3 禁用不需要的C++特性
2.4 总结
第3章 嵌入式C++生态系统
3.1 编译器与开发环境
3.1.1 Arm Keil MDK与Arm嵌入式编译器
3.1.2 IAR C/C++编译器与IAR Arm嵌入式工作台
3.1.3 厂商支持的IDE与GCC
3.2 静态分析器
3.3 单元测试
3.4 性能分析
3.5 总结
第4章 搭建C++嵌入式项目开发环境
4.1 现代软件开发环境的需求
4.1.1 编译器
4.1.2 构建自动化
4.1.3 模拟器
4.1.4 代码编辑器
4.2 容器化开发环境
4.2.1 用CMake构建“Hello, World!”程序
4.2.2 使用CMake构建固件
4.3 容器化开发环境与Visual Studio Code的结合
4.4 总结
第2部分C++基础
第5章 类——C++应用的构建块
5.1 封装
5.1.1 setter与getter
5.1.2 静态方法
5.1.3 结构体
5.2 存储期与初始化
5.2.1 非静态成员的初始化
5.2.2 静态成员初始化
5.3 继承与动态多态
5.3.1 虚函数
5.3.2 动态多态
5.4 总结
第6章 类外核心特性——C++进阶基础基石
6.1 命名空间
6.1.1 无名命名空间
6.1.2 嵌套命名空间
6.2 函数重载
6.3 与C语言的互操作性
6.3.1 C++中的外部链接和语言链接
6.3.2 C++中的C标准库
6.4 引用
6.4.1 值类别
6.4.2 左值引用
6.4.3 右值引用
6.5 标准库容器与算法
6.5.1 数组
6.5.2 容器适配器
6.5.3 算法
6.6 总结
第7章 强化固件——实用的C++错误处理方法
7.1 错误码与断言
7.1.1 全局错误处理器
7.1.2 断言
7.2 异常
7.3 std::optional与std::expected
7.4 总结
第3部分C++高级概念
第8章 使用模板构建通用、可复用的代码
8.1 模板基础
8.1.1 模板函数的调用
8.1.2 模板特化
8.2 模板元编程
8.3 concept
8.4 编译时多态
8.4.1 奇异递归模板模式(CRTP)
8.5 总结
第9章 使用强类型提升类型安全
9.1 隐式转换
9.1.1 数值提升与数值转换
9.1.2 数组到指针的转换
9.1.3 函数到指针的转换
9.2 显式转换
9.2.1 const_cast
9.2.2 static_cast
9.2.3 dynamic_cast
9.2.4 reinterpret_cast
9.3 强类型
9.4 总结
第10章 使用lambda编写高可读性代码
10.1 lambda表达式基础
10.2 使用std::function存储lambda表达式
10.2.1 命令模式
10.2.2 GPIO中断管理器
10.3 std::function与动态内存分配
10.4 总结
第11章 编译时计算
11.1 模板
11.2 constexpr说明符
11.2.1 示例1:MAC地址解析器
11.2.2 示例2:生成查找表
11.3 consteval说明符
11.4 总结
第4部分使用C++解决嵌入式领域问题
第12章 编写C++硬件抽象层(HAL)
12.1 内存映射的外设
12.1.1 CMSIS内存映射的外设
12.1.2 C++中的内存映射外设
12.1.3 C++中类型安全的内存映射外设
12.2 定时器
12.3 总结
第13章 使用C语言库
13.1 在C++项目中使用C语言HAL
13.1.1 用于灵活软件设计的UART接口
13.1.2 适配器模式中的UART接口
13.2 静态类
13.3 利用RAII封装littlefs C库
13.3.1 LittleFS——适用于微控制器的文件系统
13.3.2 基于RAII的C++包装器
13.3.3 利用RAII实现更简洁的文件管理
13.4 总结
第14章 用序列器增强超级循环
14.1 超级循环及序列器的设计动机
14.2 设计序列器
14.3 存储可调用对象
14.4 实现序列器
14.5 总结
第15章 实用模式——构建温度发布器
15.1 观察者模式
15.2 运行时实现
15.3 编译时实现
15.3.1 利用可变参数模板
15.3.2 改进编译时实现
15.4 总结
第16章 设计可扩展的有限状态机
16.1 FSM——简单实现
16.1.1 描述状态和事件
16.1.2 跟踪当前状态和处理事件——FSM类
16.1.3 使用ble_fsm类
16.1.4 分析输出
16.2 FSM——使用状态模式的实现
16.2.1 理解状态类接口
16.2.2 重构ble_fsm类
16.2.3 实现状态模式
16.2.4 状态设计模式
16.3 使用标签分发的状态模式实现
16.4 Boost SML
16.5 总结
第17章 库与框架
17.1 标准库
17.1.1 GCC中的独立式实现与宿主式实现
17.1.2 数值与数学
17.1.3 容器与算法
17.1.4 模板元编程
17.1.5 嵌入式应用中应避免的标准库部分
17.2 嵌入式模板库(ETL)
17.2.1 固定大小的容器
17.2.2 使用etl::delegate存储可调用对象
17.2.3 ETL提供的其他工具
17.3 Pigweed
17.3.1 Pigweed的Sense教程
17.3.2 RPC和协议缓冲区
17.4 编译时初始化与构建(CIB)
17.4.1 在温度发布器示例中使用CIB
17.4.2 扩展温度发布器示例
17.5 总结
第18章 跨平台开发
18.1 编写可移植代码的重要性
18.2 SOLID设计原则
18.2.1 单一职责原则(SRP)
18.2.2 开闭原则(OCP)
18.2.3 里氏替换原则(LSP)
18.2.4 接口隔离原则(ISP)
18.2.5 依赖倒置原则(DIP)
18.3 可测试性
18.4 总结
- 批判与建构:南茜・弗雷泽反常规(乔瑞华)
- 电子产品装配与调试(杨秀平,吴雪峰)
- 水电站电气设备(全国水利行业“十三五”规划教材(普通高等教育))(主编马震岳王刚)
- 实用医学影像技术与应用(屈春晖)
- 中国高铁、贸易成本和企业出口研究(俞峰)
- 九年级+中考-快捷英语周周练-完形填空(石骥)
- 海洋水文测量(田淳、周丰年、高宗军、杨鲲编)
- 全球通胀与衰退(滕泰张海冰)
