尘银

给单片机写个能用的命令行:行编辑、历史、Tab 补全、ANSI 转义全都要

一个只会 if (strcmp(buf, "test")) 的调试串口,用三天就会变成一团乱麻。本文实现一个真正能用的嵌入式 shell:命令表在 Flash 里、参数解析支持引号、支持退格/方向键/历史/Tab 补全/Ctrl-C,并且把「中断里只收字节、主循环里才执行命令」这件事做成结构。

Administrator Administrator 发布于 2026-09-25

固定块内存池:为什么嵌入式该用它替掉 malloc(附真实碎片实测)

很多人以为内存池的好处是「省内存」,其实不是——在同样的分配尺寸下,池和 first-fit 堆的每块开销可以完全一样(本文实测两边都是 8 字节)。池真正的价值是**可预测**:分配永远是 O(1),永远不会碎片化,关中断时间恒定。本文实现一个零额外开销的固定块池,并和手写的 first-fit 堆做同序列对比,把碎片现象量化出来。

Administrator Administrator 发布于 2026-09-25

现场升级不翻车:手写一个带 A/B 双分区与自动回滚的串口 IAP

OTA 最怕的不是升级失败,而是「升级失败之后连旧版本也回不去」。本文实现一套 A/B 双分区 IAP:协议帧、分块校验、状态元数据双备份、试运行计数与自动回滚,并把丢帧、CRC 错、升级中途掉电、新固件起不来全部实测一遍。

Administrator Administrator 发布于 2026-09-25

软件 I2C 实战:开漏总线、时钟延展、扫描与 9 时钟解锁

把 I2C 拆到「一根线什么时候是 0、什么时候是释放」这一层来写,你才会真正理解 ACK 是怎么来的、总线为什么会卡死、以及为什么 9 个时钟就能把从设备从死锁里救出来。本文用一个带从设备状态机的虚拟开漏总线做实测,不依赖任何硬件。

Administrator Administrator 发布于 2026-09-25

别再用 switch 堆状态了:表驱动状态机 + 超时 + 层次状态 + 静态检查

几百行 if/else 和嵌套 switch 堆出来的逻辑,改一个分支就要重新读一遍全文件。把状态机写成「一张表 + 一个引擎」之后,流程变成了数据:可以打印、可以校验、可以自动查出不可达状态和死状态。本文实现一个带超时迁移和层次状态的表驱动引擎,并用投币咖啡机实测。

Administrator Administrator 发布于 2026-09-25

掉电不丢参数:手写一个带 CRC、双备份与磨损均衡的片内 Flash 键值存储

往 Flash 里存参数最容易踩的坑是「写一半掉电」和「擦写寿命」。本文用日志式记录 + 双 bank 轮换 + CRC16 做一套完整的 KV 存储,并用一个能模拟掉电和位翻转的 Flash 仿真器把每种故障都实测一遍。

Administrator Administrator 发布于 2026-09-25

把 CAN 拆到比特级:位填充、CRC15、仲裁与错误计数

CAN 的可靠性不是「协议写得稳」,而是硬性地做在了比特层:每个位都靠差分电平和 5 位填充防止失步,15 位 CRC 保证检错,ID 越小优先级越高的仲裁让高优先级帧几乎不排队,错误计数到 128 / 256 就自动降级甚至下线,坏节点没法拖垮总线。本文把这一切用纯软件实现并实测。

Administrator Administrator 发布于 2026-09-25