在 RT-Thread/MCU 上安全使用 C++:从编译器基线到零开销抽象实践
MCU 上用 C++ 不是禁忌,是有条件的工程选择。本文结合 RT-Thread v5.x 的 C++ 实际支持范围,从编译器基线、多态策略、固定大小容器、内存池 RAII、无锁 SPSC、C/C++ 互操作六个维度给出可落地的决策框架。
MCU 上用 C++ 不是禁忌,是有条件的工程选择。本文结合 RT-Thread v5.x 的 C++ 实际支持范围,从编译器基线、多态策略、固定大小容器、内存池 RAII、无锁 SPSC、C/C++ 互操作六个维度给出可落地的决策框架。
面向嵌入式 Linux 网络的排障与优化指南。覆盖 UDP 丢包全链路诊断(6 个丢包位置与对应 sysctl 调优)、TCP TIME_WAIT 端口耗尽排障、零拷贝方案对比(sendfile/splice/MSG_ZEROCOPY)、dropwatch 内核丢包追踪,以及同机通信的共享内存方案。
面向工业嵌入式的 A/B 分区固件升级引擎。osp::StateMachine 驱动 8 阶段流程,raw 分区状态持久化、U-Boot 冗余环境变量切换与 bootcount 回滚三层保护实现掉电安全,全程零堆分配 (~10KB 栈/静态),适合 32-256MB RAM 设备。
工业嵌入式设备常在 TCP telnet、串口、stdin 等不同环境下调试。newosp 的 Shell 模块用函数指针做 I/O 抽象,一套命令支持多后端,18 个命令覆盖诊断与运行时控制,全程零堆分配、兼容 -fno-exceptions。
newosp 是面向嵌入式 Linux 的 C++17 header-only 基础库,覆盖消息总线、层次状态机、共享内存 IPC、调度器等模块。本文介绍它的设计原则、核心模块和四个工业示例。
从 newosp v0.4.3 (43 headers, 1153 tests) 源码中提炼 C++17 能力的实际工程运用。每项附具体代码位置、设计决策和 C 语言对比,展示工业嵌入式库如何将语言特性转化为可靠性与性能优势。
从 MCCC 消息总线优化中提炼 5 个零堆分配模式 (Envelope 内嵌、编译期类型索引、函数指针 RAII、定长容器、编译期配置矩阵),附实测数据: BARE_METAL 18.7 M/s,FULL_FEATURED 5.8 M/s,HIGH 优先级零丢失,E2E P99 449 ns。
面向 4 核 ARM-Linux、32-256MB RAM、-fno-exceptions 的工业嵌入式场景,newosp 采用事件驱动消息总线 + 固定线程预算 + 可移植 I/O 抽象的并发架构,涵盖零堆分配、线程预算与背压控制。
面向激光雷达、工业视觉、机器人等 ARM-Linux 场景,设计一套 C++17 header-only 的流式数据处理架构。覆盖数据流 (10-100 Hz 大块帧) 与控制流 (低频高可靠消息) 的分离处理、零堆分配内存管理、多级流水线调度,基于 newosp 基础设施库实现。
面向 4 核 ARM-Linux (32-256MB RAM) 的工业级 A/B 分区固件升级引擎。osp::StateMachine 驱动 8 状态流程,raw 分区状态持久化、U-Boot 冗余 env 切换与 bootcount 回滚三层保护保证掉电安全,全程零堆分配。
newosp ospgen 是一个约 200 行的 Python 生成器,把 YAML 消息定义转成嵌入式 C++17 代码:trivially_copyable 结构体、enum class、std::variant 载荷、sizeof 断言和 Validate()/Dump()。
行为树凭借 Tick 心跳和 RUNNING 状态,在单核 MCU 上实现无需多线程的协作式并发。本文从 Tick 运行模型出发,以 newosp 的 osp::BehaviorTree 为主线,结合 HSM+BT 组合模式和视觉平台预览服务重构案例,给出嵌入式落地路径。
共享内存是 Linux 上延迟最低的 IPC 机制,但 POSIX shm_open/mmap 缺少同步、生命周期管理和崩溃恢复。本文剖析 newosp 中 ShmRingBuffer 的 CAS 无锁设计、ARM 内存序加固与缓存行对齐,并与 cpp-ipc 对比架构取舍。
std::shared_ptr 和 std::weak_ptr 在实时系统里会引入原子引用计数、堆碎片化和竞态风险。本文从一个 weak_ptr 竞态 bug 出发拆解五个陷阱,并给出 newosp 的零堆分配替代路径。
传统设计模式依赖虚函数和动态分配,在嵌入式系统中代价偏高。本文以 newosp 真实代码为例,给出 8 种编译期替代手法,覆盖类型擦除、RAII、编译期分发、Tag Dispatch、强类型包装、零堆 Pub/Sub、Visitor 与 CRTP。