C 语言面向对象编程·嵌入式实战
从一颗 LED 写到 Linux 内核 4000 万行代码。
这本书讲三件事:封装、继承、多态。不讲 C 语法,不讲 100 个外设驱动 API,只讲工业级 C 代码是怎么组织起来的。
学完之后你能看懂 HAL 库源码、Linux 驱动骨架,能用 C 写出和 C++ class 等价的代码,换芯片时只改驱动文件、应用层一行不动。
永久免费在线阅读·MIT License·不出版纸质书。
适合谁
- 学完 C 语法但不知道“工业级代码长什么样“的大二、大三学生
- 写得了 demo 但不会架构的初级嵌入式工程师
- C++ / Java 转嵌入式,想知道 C 怎么手撸 OOP 的人
- 面试准备:把
container_of、函数指针、平台抽象讲到底层原理
不适合的:完全没写过 C 程序的零基础读者。先学 C 语法再来。
这本书的特点
- 不实操也能完全理解:每个
static、每个指针、每个container_of都讲到不开 IDE 也能 follow。有经验的工程师扫读一遍就懂,不用动手 - 三套代码并行:前 18 章教学包在 PC 上直接
gcc跑通(零硬件门槛),第五部分配套 Zephyr v3.7.0 LTS 工程(参考板 stm32f4_disco)和 Linux 6.6 主线工程(参考板 Raspberry Pi 4B),有板子能上板,没板子读源也成立 - 直接读 upstream:第五部分两章贴的代码段全部从 Zephyr / Linux 上游源码 read 出来,读者能 git clone 字面对照,不是脱敏代码
- 教学包代码 0 警告:前 18 章每章配套代码包过
gcc -Wall -Wextra0 警告 - Linux 内核风格:tab 缩进、
struct led而非Led_t,读完看 Linux 内核源码不陌生
全书目录
第一部分 · 封装
- 三个 LED 三份代码 · 第一次面对重复
- 同事改了一行 LED 全乱了 · static 与信息隐藏
- 你用 C 手搓了一个 class · 句柄与操作函数
- 你的全局变量该死了 · 数据三级分类
- HAL 库源码漫游 · 从抽象接口到平台实现
第二部分 · 继承
第三部分 · 多态
第四部分 · 工程威力
- 一个指针指所有 LED · 向上转型
- container_of 的地址魔法 · 向下转型
- 虚函数不实现 · 三种策略
- 换硬件不改应用 · OOP 完整框架
- 为什么 Linux 一点都不难 · 你已经在写 Linux 风格代码
- 4000 万行一招写完 · 链接自动初始化
- 全书地图回顾 · 一颗 LED 走过的演化路径
第五部分 · 开源工程实战
附录
配套代码
三套独立工程,按章节挂钩:
教学包(前 18 章 · 零硬件门槛 · PC 直接跑)
cd oop-in-c/code/01-three-leds/pc
make
./demo
oop-in-c/code/ 目录下,每章一个独立目录。所有代码通过 platform.h 抽象 GPIO,PC 上用 printf 模拟,无开发板也能学。
Zephyr 工程(ch19 + 附录 B · 参考板 stm32f4_disco · Zephyr v3.7.0 LTS)
cd industrial-zephyr
west build -b stm32f4_disco -p auto -- -DDEMO=1
west flash
industrial-zephyr/ freestanding application 模板,4 个 demo 切换:4 颗 LED 跑马灯 / device tree overlay / CONTAINER_OF / 可空 ops。读者按 Zephyr 官方 Getting Started 装好 SDK + zephyr/ 源即可。
Linux 工程(ch20 + 附录 C · 参考板 Raspberry Pi 4B · Linux 6.6 主线)
cd industrial-linux/ch20-leds-status
make
sudo insmod leds-status.ko
industrial-linux/ 含读者亲手写的内核驱动 leds-status.c、用户态 libgpiod 对照 demo、QEMU + gdb 看 container_of、ftrace 追踪 module_init 四个独立子目录。
关注作者
| 平台 | 信息 |
|---|---|
| 公众号 | 兆鸣嵌入式 |
| 个人微信 | zmqrs001 |
| GitHub | github.com/ZhaoChengBo/zhaoming-embedded |
| Gitee | gitee.com/zhao-chengbo/zhaoming_embedded |
| 抖音 | 搜「兆鸣嵌入式」 |
| B 站 | 搜「兆鸣嵌入式」 |
| 视频号 | 搜「兆鸣嵌入式」 |
扫码关注公众号「兆鸣嵌入式」,回复「交流」加入嵌入式技术交流群。后续会持续分享嵌入式架构、工业代码、Linux 内核走读、面试经验等深度内容。
反馈与勘误
发现错误、有改进建议、想贡献一章,到 GitHub Issues 或 Gitee Issues 提一个,附章节、你的理解、你认为的问题。我会回。
读完哪章你觉得讲透了,哪章还差点意思,欢迎写出来。这是迭代下一版的最好材料。
开始阅读:前言