嵌入式系统中的过度设计: 识别、量化与规避

设计模式、分层架构、可扩展性在桌面/服务器领域是最佳实践, 但搬到资源受限的 MCU 上时, 每个抽象层都有可量化的代价。本文通过一次信号处理 pipeline 重构的量化分析, 提炼出三个典型的过度设计模式 (为不存在的动态性付费、凭直觉拆锁、为假想需求预留架构), 并给出四维评估框架 (RAM/ROM/CPU/栈) 和轻量替代方案。

February 19, 2026 · 6 min · 1095 words · map[name:DeguiLiu]

EWSS: 面向嵌入式 Linux 的轻量级 WebSocket 服务器

从 Simple-WebSocket-Server 重构而来,去掉 ASIO 依赖,用 poll Reactor + 固定 RingBuffer + 状态机实现一个 67KB 二进制、12KB/连接、热路径零堆分配的嵌入式 WebSocket 服务器。

February 19, 2026 · 6 min · 1197 words · map[name:DeguiLiu]

嵌入式 C++ 远程开发环境: 从 SSH 到交叉调试

面向嵌入式 ARM-Linux 开发者的 VS Code 远程开发完整方案。涵盖 SSH 免密登录与连接复用、clangd 替代 gtags 实现精确代码索引、gdbserver 交叉调试配置、以及网络受限环境的离线部署。

February 17, 2026 · 3 min · 477 words · map[name:DeguiLiu]

newosp 调试 Shell: 多后端架构与运行时控制命令设计

工业嵌入式系统需要在 TCP telnet、串口、stdin 等不同环境下统一调试。newosp 的 Shell 模块通过函数指针 I/O 抽象实现多后端统一架构,通过 TCLAP 风格的子命令分发实现运行时控制(日志级别、配置修改、统计重置、生命周期转换),18 个命令覆盖诊断与控制两大需求,全程零堆分配、-fno-exceptions 兼容。

February 17, 2026 · 10 min · 1954 words · map[name:DeguiLiu]

newosp: 面向工业嵌入式的 C++17 Header-Only 基础设施库

本文介绍的 newosp 库基于 MIT 协议开源,当前版本 v0.2.0。

February 17, 2026 · 4 min · 831 words · map[name:DeguiLiu]

newosp 源码中的 C++17 实践: 8 项能力的工程落地

从 newosp v0.4.3 (43 headers, 1153 tests) 源码中提炼 C++17 能力的实际工程运用。每项附具体代码位置、设计决策和 C 语言对比,展示工业嵌入式库如何将语言特性转化为可靠性与性能优势。

February 17, 2026 · 4 min · 816 words · map[name:DeguiLiu]

内存屏障的硬件原理: 从 Store Buffer 到 ARM DMB/DSB/ISB

内存屏障是无锁编程的底层基石,但多数文章停留在 acquire/release 的使用层面,没有解释 为什么 CPU 会重排序。本文从 Store Buffer、Invalidation Queue 和 MESI 协议三个硬件机制出发,推导出四种屏障类型的必然性,区分编译器屏障、硬件屏障和 C++ memory_order 三个层次,最终详解 ARM DMB/DSB/ISB 三条指令的精确语义与适用场景。

February 17, 2026 · 10 min · 1979 words · map[name:DeguiLiu]

MCCC 消息总线零堆分配优化与性能实测

从 MCCC 消息总线优化实践中提炼 5 个零堆分配模式 (Envelope 内嵌、编译期类型索引、函数指针 RAII、FixedFunction/FixedVector/FixedString、编译期配置矩阵),并附完整性能数据: BARE_METAL 18.7 M/s (54 ns/msg),FULL_FEATURED 5.8 M/s (172 ns/msg),HIGH 优先级零丢失,E2E P99 仅 449 ns。

February 17, 2026 · 8 min · 1673 words · map[name:DeguiLiu]

激光雷达高吞吐数据处理 Pipeline: 模块化架构与 NEON 向量化

本文展示如何用 newosp C++17 header-only 基础设施库构建激光雷达等高吞吐传感器的 DAG 数据处理 Pipeline。数据面采用 SPSC 直连 + Handle 传递实现真零拷贝,控制面用 AsyncBus 处理诊断和扇入/扇出场景,结合 SoA 数据布局、多级流水线并行和 Stage 融合,在 ARM Cortex-A53 上达到 100 Hz 实时处理目标。

February 17, 2026 · 9 min · 1850 words · map[name:DeguiLiu]

嵌入式流式数据处理架构: 传感器到网络输出的全链路设计

面向激光雷达、工业视觉、机器人等 ARM-Linux 场景,设计一套 C++17 header-only 的流式数据处理架构。覆盖数据流 (10-100 Hz 大块帧) 与控制流 (低频高可靠消息) 的分离处理、零堆分配内存管理、多级流水线调度,基于 newosp 基础设施库实现。

February 17, 2026 · 8 min · 1518 words · map[name:DeguiLiu]

perf 性能分析实战: 从硬件计数器到火焰图的完整工作流

perf 是 Linux 内核自带的性能分析利器,但多数开发者只停留在 perf top 层面。本文以嵌入式 ARM-Linux 实战为背景,从 PMU 硬件计数器原理出发,系统讲解 perf stat(IPC/缓存/分支预测)、perf record + 火焰图(On-CPU/Off-CPU)、perf sched(调度延迟)三大核心工作流,并给出 ARM 平台缓存访存分析方法和自动化监控脚本。

February 16, 2026 · 12 min · 2500 words · map[name:DeguiLiu]

newosp ospgen: YAML 驱动的嵌入式 C++17 零堆分配消息代码生成

newosp ospgen 是一个 200 行 Python 的 YAML->C++ 代码生成器,面向嵌入式 C++17 场景。生成 trivially_copyable POD 结构体、enum class、std::variant Payload、sizeof 编译期断言、event-message 零开销绑定、Validate() 范围检查、Dump() 调试打印。通过 streaming_protocol 流媒体协议示例展示真实应用集成: 删除手写 messages.hpp,用生成代码获得输入校验、结构化调试、类型安全枚举、拓扑常量和编译期保护。对比 Protobuf/FlatBuffers/nanopb,展示为什么嵌入式场景需要比 Protobuf 更轻、比手写更安全的第三条路。

February 16, 2026 · 8 min · 1630 words · map[name:DeguiLiu]

Clang-Tidy 嵌入式 C++17 实战: 从配置到 CI 集成的完整指南

将两篇 clang-tidy 基础教程整合并扩展为面向嵌入式 C++17 的完整实战指南。涵盖针对 -fno-exceptions/-fno-rtti 场景的精选 check 集合、嵌入式专属 check (concurrency、performance、bugprone)、HeaderFilterRegex 精确控制、CMake CMAKE_CXX_CLANG_TIDY 原生集成、GNU parallel 并行加速、GitHub Actions CI 门禁,以及 NOLINT 注释的正确用法。

February 16, 2026 · 7 min · 1387 words · map[name:DeguiLiu]

Unix Domain Socket 实时性优化: 嵌入式 IPC 全链路调优

面向嵌入式 ARM-Linux 平台的 Unix Domain Socket 实时性优化系统指南。从 UDS 内核数据路径出发,覆盖 socket 类型选择(STREAM/DGRAM/SEQPACKET)、epoll 边缘触发正确实现、抽象命名空间、fd 传递零拷贝、memfd_create 大块数据传输、eventfd 轻量通知、实时调度与 CPU 隔离、内核缓冲区调优、io_uring 异步路径等维度。每项优化标注原理、ARM 特有注意事项和适用场景。附完整的 RAII 服务端实现。

February 16, 2026 · 10 min · 2110 words · map[name:DeguiLiu]

TCP 非阻塞发送的 Short Write 问题: 环形缓冲区 + epoll 事件驱动方案

非阻塞 TCP 发送的 short write 问题在高吞吐嵌入式场景下不可回避。本文从一个 CSDN 环形缓冲方案出发,逐项分析其 5 个工程缺陷 (非 2 幂、无界索引、内存泄漏、部分发送丢失、EAGAIN 误判),给出工程级改进方案: 2 的幂位掩码、精确 acquire-release 内存序、EPOLLOUT 驱动异步刷写,并对比 newosp SpscRingbuffer 的设计取舍。

February 16, 2026 · 9 min · 1854 words · map[name:DeguiLiu]