一个只会 if (strcmp(buf, "test")) 的调试串口,用三天就会变成一团乱麻。本文实现一个真正能用的嵌入式 shell:命令表在 Flash 里、参数解析支持引号、支持退格/方向键/历史/Tab 补全/Ctrl-C,并且把「中断里只收字节、主循环里才执行命令」这件事做成结构。
很多人以为内存池的好处是「省内存」,其实不是——在同样的分配尺寸下,池和 first-fit 堆的每块开销可以完全一样(本文实测两边都是 8 字节)。池真正的价值是**可预测**:分配永远是 O(1),永远不会碎片化,关中断时间恒定。本文实现一个零额外开销的固定块池,并和手写的 first-fit 堆做同序列对比,把碎片现象量化出来。
把 I2C 拆到「一根线什么时候是 0、什么时候是释放」这一层来写,你才会真正理解 ACK 是怎么来的、总线为什么会卡死、以及为什么 9 个时钟就能把从设备从死锁里救出来。本文用一个带从设备状态机的虚拟开漏总线做实测,不依赖任何硬件。