单线程事件循环的内核设计: 机制、移植与适用边界
libev 是一个单线程的事件循环库(Reactor 模式)。使用时把要等待的事件(文件描述符可读、定时器到期、跨线程通知)注册进去,事件发生后由库调用回调函数处理。在嵌入式系统中,它可以作为一个 RT-Thread 线程运行,STM32F407 上已用 select 后端验证了 ev_io、e
libev 是一个单线程的事件循环库(Reactor 模式)。使用时把要等待的事件(文件描述符可读、定时器到期、跨线程通知)注册进去,事件发生后由库调用回调函数处理。在嵌入式系统中,它可以作为一个 RT-Thread 线程运行,STM32F407 上已用 select 后端验证了 ev_io、e
双份状态并非问题根源,失控的写入口才是;通过写穿、受控旁路、版本失效、脏标记和集中同步可让缓存与硬件重新收敛。
SRAM 面向 DMA 与外设,CCM 面向 CPU 热数据;根据访问者、执行需求和访问频率分配内存,避免 DMA 不可见与 CCM 溢出。
面向嵌入式 Linux 网络的排障与优化指南。覆盖 UDP 丢包全链路诊断(6 个丢包位置与对应 sysctl 调优)、TCP TIME_WAIT 端口耗尽排障、零拷贝方案对比(sendfile/splice/MSG_ZEROCOPY)、dropwatch 内核丢包追踪,以及同机通信的共享内存方案。
设计模式、分层架构、可扩展性在桌面/服务器领域是最佳实践,但搬到资源受限的 MCU 上时,每个抽象层都有可量化的代价。本文通过一次信号处理 pipeline 重构的量化分析,提炼出三个典型的过度设计模式 (为不存在的动态性付费、凭直觉拆锁、为假想需求预留架构),并给出四维评估框架 (RAM/ROM/CPU/栈) 和轻量替代方案。
从 Simple-WebSocket-Server 重构而来,去掉 ASIO 依赖,用 poll Reactor + 固定 RingBuffer + 状态机实现一个 67KB 二进制、12KB/连接、热路径零堆分配的嵌入式 WebSocket 服务器。
从进程内 MPSC 总线到跨进程 SPMC 共享内存,newosp 同时支持 1:1 (SPSC) 和 1:N (SPMC) 两种共享内存数据分发模式。本文以 LiDAR 点云分发为例,展示 SPMC 的设计、实现和工业应用场景。
基于无锁 MPSC 消息总线,实现嵌入式场景下的数据分发架构。提供两种方案: Component 动态订阅版和 StaticComponent 零开销编译期分发版。单文件 ~100 行,零堆分配,单 worker 线程处理所有订阅者。
面向嵌入式 ARM-Linux 开发者的 VS Code 远程开发完整方案。涵盖 SSH 免密登录与连接复用、clangd 替代 gtags 实现精确代码索引、gdbserver 交叉调试配置、以及网络受限环境的离线部署。
面向工业嵌入式的 A/B 分区固件升级引擎。osp::StateMachine 驱动 8 阶段流程,raw 分区状态持久化、U-Boot 冗余环境变量切换与 bootcount 回滚三层保护实现掉电安全,全程零堆分配 (~10KB 栈/静态),适合 32-256MB RAM 设备。
工业嵌入式设备常在 TCP telnet、串口、stdin 等不同环境下调试。newosp 的 Shell 模块用函数指针做 I/O 抽象,一套命令支持多后端,18 个命令覆盖诊断与运行时控制,全程零堆分配、兼容 -fno-exceptions。
LMDB 是基于 B+ 树 + mmap 的嵌入式 KV 数据库,编译产物 < 50KB,零拷贝读取,CoW 断电安全。本文从嵌入式 Linux 视角评估 LMDB 的适用场景(标定数据、设备配置、OTA 元数据)、架构原理、工业级代码质量、加密方案,以及跨平台 Python 工具链在工厂标定工位中的实际应用。
newosp 是面向嵌入式 Linux 的 C++17 header-only 基础库,覆盖消息总线、层次状态机、共享内存 IPC、调度器等模块。本文介绍它的设计原则、核心模块和四个工业示例。
MCCC 系列第三篇。从 C++14 消息总线的四个堆分配瓶颈出发,逐项给出 C++17 替代方案: FixedFunction、VariantIndex 固定数组、Envelope 内嵌 Ring Buffer、FixedString/FixedVector,并附代码对比与性能实测数据。
从 newosp v0.4.3 (43 headers, 1153 tests) 源码中提炼 C++17 能力的实际工程运用。每项附具体代码位置、设计决策和 C 语言对比,展示工业嵌入式库如何将语言特性转化为可靠性与性能优势。