RISC-V 应用核的启动链路: 从 Reset_Handler 到调度器启动

从复位到第一个线程执行,启动过程分成四段,每段都有前置条件。本文按段说明每一段在做什么、为什么顺序不能换、这些段和它们的地址从哪里来,并给出启动失败时的判断顺序。

October 12, 2026 · 3 min · 541 words · map[name:DeguiLiu]

MCU 周期服务的共享状态: 读改写原子性、拒绝重入与锁的位置

在「一个工作线程 + 多个命令入口 + 共享状态」的 MCU 服务里,偶发缺陷大多来自三处:读改写被别的线程插进来、派发过程被重入、锁散落在各个分支里。本文给出三个低成本的收敛办法,并用两种写法的代码指标做对照。

September 22, 2026 · 3 min · 605 words · map[name:DeguiLiu]

单芯片相机上的 RTSP 服务: 一帧画面怎么送到播放器

相机芯片上的 RTSP 服务不建线程,由应用线程反复调用,画面只传地址不复制。全文围绕三件事:定时任务共用一个到期时刻、一帧画面被多个客户端共用时的复用时机、一条连接上控制命令与视频的发送顺序,最后与服务器上的实现逐项对照。

September 20, 2026 · 4 min · 637 words · map[name:DeguiLiu]

嵌入式块设备写入路径: 从文件系统到 SD 卡的四层地址翻译

一次写入要经过四层地址翻译:字节偏移、扇区、设备块号、命令。多数人以为数据在这四层里被拷了四遍,实际一次都没有。

September 18, 2026 · 2 min · 343 words · map[name:DeguiLiu]

MCU 任务监控: 怎样发现任务卡死并正确喂狗

用采集与发送任务的例子,说明心跳应在哪里上报、正常等待怎样与卡死区分,以及如何汇总检查结果后再喂硬件看门狗。

September 14, 2026 · 3 min · 454 words · map[name:DeguiLiu]

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

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

February 19, 2026 · 5 min · 962 words · map[name:DeguiLiu]

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

工业嵌入式设备常在 TCP telnet、串口、stdin 等不同环境下调试。newosp 的 Shell 模块用函数指针做 I/O 抽象,一套命令支持多后端,18 个命令覆盖诊断与运行时控制,全程零堆分配、兼容 -fno-exceptions。

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

嵌入式串口协议栈设计: 粘包、缓冲区滑窗与层次状态机

串口协议解析是嵌入式系统中最基础也最容易被忽视的工程问题。本文基于一个完整的 Linux 模拟工程,深入对比缓冲区滑窗扫描与层次状态机(HSM)两种解析架构,覆盖粘包处理、ISR 设计、环形缓冲区、无锁 SPSC 队列、CRC-CCITT 校验、错误恢复等工程细节,并分别讨论裸机(super-loop)和 RT-Thread RTOS 平台的集成方案。

February 16, 2026 · 11 min · 2200 words · map[name:DeguiLiu]

QPC 框架深度解析: Active Object 与层次状态机的嵌入式实践

QP/C 是面向嵌入式实时系统的事件驱动框架,核心是 Active Object 并发模型与层次状态机。本文剖析它的三大支柱:HSM 的冒泡-继承-覆盖机制与 QHsm/QMsm 双实现、QActive 零拷贝无锁事件队列的 SPSC 设计,以及在 RT-Thread 上的移植方案。

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

多线程死锁与优先级反转实战: 从问题复现到工程解决方案

死锁与优先级反转的实战指南。用 6 个可编译运行的 C++ 示例复现 AB-BA 死锁、回调重入死锁、自死锁和优先级反转,逐一给出修复方案(全局锁序、std::scoped_lock、try_lock 回退、PTHREAD_PRIO_INHERIT、无锁架构),并纠正「编译优化导致死锁」的误解。

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

C/C++ 性能优化实战: 内存布局、分支预测与编译器调优

系统级性能优化是在编译器、数据布局、并发架构三个层面做出的选择。本文按编译器内建函数、编译期多态替代虚函数、零堆分配热路径、缓存友好布局、无锁并发、Active Object 去锁化、行为树并行启动、实时调度八个方向,结合 newosp 基础库的代码,给出可落地的嵌入式 C/C++ 优化实践。

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

MCU 二级 Bootloader 设计: 状态机驱动的 A/B 分区 OTA 与安全启动

在工业 MCU 产品中,固件更新失败意味着设备变砖,安全启动漏洞意味着固件被篡改。本文设计一个裸机环境下的二级 Bootloader,用状态机驱动 A/B 分区 OTA (含 Scratch 分区原子交换的掉电安全方案)、TLV 标准化镜像格式的安全启动验证、以及 ISR + Ring Buffer + 状态机三层解耦的通信协议栈。所有设计面向零 RTOS 依赖的裸机环境。

February 16, 2026 · 11 min · 2318 words · map[name:DeguiLiu]

将 RT-Thread MSH 移植到 Linux: 嵌入式调试 Shell 的多后端设计

RT-Thread 的 MSH 是嵌入式里广泛使用的命令行组件。本文梳理它的设计要点,对比在嵌入式 Linux 上实现同等功能的三种方案,并介绍 embsh 如何在纯头文件库中融合多后端 I/O、telnet 协议、认证、历史导航和 Tab 补全。

February 15, 2026 · 4 min · 818 words · map[name:DeguiLiu]

ztask 调度器的 C++14 重写: 类型安全、RAII 与模板化改造

在轻量 RTOS 项目和嵌入式Linux中,合作式任务调度器是比操作系统线程更轻量的执行抽象。

February 15, 2026 · 6 min · 1105 words · map[name:DeguiLiu]

嵌入式系统死锁防御: 从有序锁到无锁架构的工程实践

死锁是嵌入式多线程系统中最隐蔽的故障之一。本文从一个典型的双锁死锁场景出发,逐步演示有序锁、lock_guard、try_lock、无锁队列四种防御策略,分析各方案在嵌入式实时系统中的工程权衡。

February 15, 2026 · 9 min · 1783 words · map[name:DeguiLiu]