编译期 AOP: 把横切不变式收进循环骨架
从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。
从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。
设计模式、分层架构、可扩展性在桌面/服务器领域是最佳实践,但搬到资源受限的 MCU 上时,每个抽象层都有可量化的代价。本文通过一次信号处理 pipeline 重构的量化分析,提炼出三个典型的过度设计模式 (为不存在的动态性付费、凭直觉拆锁、为假想需求预留架构),并给出四维评估框架 (RAM/ROM/CPU/栈) 和轻量替代方案。
PIMPL 是 C++ 中最经典的编译隔离手段,但教科书只展示了 unique_ptr 一种实现。本文对比三种 C++14 兼容的 PIMPL 实现,Heap PIMPL、Fast PIMPL (栈内联)、函数指针表 PIMPL,从编译隔离、运行时成本、缓存友好性三个维度量化分析,给出不同场景的选型依据。
传统设计模式依赖虚函数和动态分配,在嵌入式系统中代价偏高。本文以 newosp 真实代码为例,给出 8 种编译期替代手法,覆盖类型擦除、RAII、编译期分发、Tag Dispatch、强类型包装、零堆 Pub/Sub、Visitor 与 CRTP。
在没有面向对象语法的 C 语言中,策略模式和状态模式都通过函数指针表 (vtable) 模拟多态,代码结构几乎一致。本文从设计意图出发,用通用示例 (传感器滤波、通信协议状态机) 剖析二者的本质差异,并展示它们在同一系统中的协作方式。
以 state_machine 框架的重构为案例,展示如何将一个过程驱动的 C 语言状态机改造为数据驱动的层次状态机 (HSM)。涵盖转换表替代 switch-case、LCA 算法消除递归、用户缓冲区替代内部分配、守卫条件与内外转换区分等关键改造点,附完整数据结构和 API 设计。