尾声 · 致读者
写到这里要停笔了。最后想跟你说几句。
这本书干的事
一颗 LED 演化 18 章 OOP 主体,把 OOP 三大特性从概念推到工业代码。每个抽象都对照 Linux 内核、Zephyr、GObject 真实代码,给的内核引用都是精确行号,能 git checkout 跳过去看。
每章末尾“工业代码经验“段,把我自己工业控制板项目的代码组织方式公开(脱敏骨架)。这部分内容很多学校不会教,因为它来自被 bug 打过、被代码评审改过、被产品 review 否过几十次以后才长出来的工程纪律。
正文加 B 站 19 期视频加 GitHub / Gitee 配套代码三位一体。视频讲的是直觉和现场感,正文补“视频里没讲透的几个细节“,是刻意留出来给文字载体的部分。
跟市面上不一样的几个点
我自己读过几十本 C 和嵌入式书。我尽量列出我看到的、跟其他书的不一样:
不直接告诉你答案,渐进推理给你看。我看到的多数 C 语言 OOP 书直接说“用函数指针实现多态“。这本书从 ch01 到 ch11 用 11 章演化展示“为什么演化成这样“。从三个 LED 重复代码的痛点,到结构体里的函数指针字段,到 ops 表,再到 vptr 落地,每一步都被前一步的痛点逼出来。一遍读完你会发现自己居然能跟着推下去,因为不是背答案,是在被推着思考。
每个概念都验证到 4000 万行 Linux 内核。你学的不是教学幻灯片上的简化模型,是 v6.6 内核里到处都是的 struct file_operations、struct gpio_chip、struct cdev。这种“工业级“不是吹的。
C 与 C++ 双向对照。每章末尾“C 对比 C++“子节让你看到 C++ 编译器自动做的那一步、C 里手写出来是什么样。学完你回头看 C++ 的 virtual、inheritance,全是熟脸。
作者一线嵌入式现身说法。覆盖过 Cortex-M0 / M3 / M4 / M7 几代内核(STM32F0 到 STM32H7 系列),从裸机到 RTOS 到嵌入式 Linux,参与过工业控制板的主控、子控、全栈固件项目。这本书贴的工业代码骨架来自这些真项目,脱敏后保留教学需要的最小集合。哪一招在产品线上跑了几年没出问题,哪一招出过事故被替换掉,我自己心里有数。
教判断不教教条。“嵌入式不能用 malloc“是 1990 年代留下的 dogma,现代项目动态内存常态使用,关键是生命周期管理;“不透明指针是工业级答案“看场景,跨二进制库边界用,自家应用代码没必要;“机制总是优于约定“看团队水平,靠纪律就够的时候不要给自己加负担。这本书反复说“看场景”,因为工业代码不是数学定理。
目标读者是中等水平的在职嵌入式工程师。3 到 8 年经验、卡在“会写驱动但代码组织糟“的那一群人。他们有真实工程压力,也有学新东西的动力,是这本书想说话的对象。
这本书的局限
这本书写下来的是我这些年工程经验里跟“代码组织“和“OOP 在 C 里的工业落地“这一块,是我想分享的一部分。后面我会接着分享更多内容,比如电源管理、信号完整性、PCB 设计与产线工艺、状态机框架在嵌入式系统的工程落地、嵌入式工程师在新时代的成长路径。这些主题各自需要单独成书或成期。
也因此这本书肯定有写得不够好、甚至写错了的地方。我自己重读时还在改。如果你读完发现错误、有不同观点、或者想补一段你工业项目里的对照案例,给我提个 Issue(GitHub 或 Gitee 都行),或者扫首页二维码加微信。我会把合理的反馈认真改进去。
一个人写书会盲,读者反馈是这本书唯一能进化的方式。
写在最后
C 不会消失。系统底下永远是 C。学好它,你脚下永远踩着真东西。
走完这本书,你再看任何 C 代码,眼里都是设计。你能看出一段代码哪里不好、改哪一步开始。
希望这本书对你有用。
兆鸣