Linux 编程: 嵌入式 ARM 平台网络实时性能优化

面向工业传感器平台的 ARM Linux 网络实时优化:先讲应用层收包、poll/select、队列、内存池和零拷贝,再逐项说明 IRQ/NAPI、RPS/RFS、缓冲区、CPU 隔离和 PTP 参数的理由。

October 18, 2026 · 7 min · 1365 words · map[name:DeguiLiu]

C++ 零堆零拷贝: 事件只构造一次,全程只传指针

coact 在固定事件池中构造事件和 payload,后续提交、排队、派发和回收只传 Event*;用侵入式引用计数和所有权转移管理多 AO 共享与回收,并对照 lwIP pbuf、libev watcher 说明边界。

October 18, 2026 · 4 min · 727 words · map[name:DeguiLiu]

编译期 AOP: 把横切不变式收进循环骨架

从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。

October 18, 2026 · 4 min · 804 words · map[name:DeguiLiu]

ztask: 不依赖操作系统、无堆无锁的定时任务调度器

任务记在静态表里、主循环轮询派发的合作式定时调度器: 排序链表加表头判定换来 O(1) 轮询,代价是四条边界。含加固实现(重入守卫、一轮预算、超期计数、句柄校验)与完整 C 清单、演示程序、验证脚本。

October 16, 2026 · 13 min · 2645 words · map[name:DeguiLiu]

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

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

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

DMA 物理内存映射与 FPGA 环形缓冲: 零拷贝通路与无锁读写

FPGA 采集到的数据由 DMA 写进 DDR,用户态程序用 /dev/mem 映射同一块物理内存把它读出来。这条通路上没有数据拷贝,双方能对上靠的是事先约定的物理地址。无锁则来自另一处设计:环形队列把读写状态拆成两个各自单向递增的计数器,锁就没有存在的必要。

October 6, 2026 · 4 min · 743 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]

嵌入式双路 USB 视频输出: 一个设备、两个摄像头的同步原理

一台嵌入式设备通过同一个 USB 控制器输出两路 UVC 视频:IAD 负责让主机看到两个摄像头,内部视频链负责分别产生两路帧,环形缓冲保证单路稳定,时间戳和上位机逻辑完成最终配对。

September 20, 2026 · 5 min · 898 words · map[name:DeguiLiu]

USB 视频设备枚举与能力协商: 描述符、Probe 与 Commit

主机能够枚举一颗从未见过的芯片,并非因为主机预先识别了该芯片,而是因为设备按 USB 规范用描述符描述自身。描述符说明设备的身份与接口数量,Probe/Commit 协商确定输出格式。

September 18, 2026 · 4 min · 782 words · map[name:DeguiLiu]

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

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

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

C++ 编译期多态: 用模板替代虚函数的机制与代价

以采集模块为例,说明骨架加钩子、策略模板、Traits 注入与函数指针擦除的机制、代价,以及用反汇编和体积对比判断是否真的替代了虚函数。

September 10, 2026 · 5 min · 865 words · map[name:DeguiLiu]

CRTP 原理: 基类如何在编译期知道子类

CRTP 把子类名当模板参数传给基类,让基类在编译期认领自己的子类,从而直接调用并内联,不查虚表、不留 vptr。本文拆解它成立的三条原理、与虚函数的差别、踩坑边界,以及在嵌入式状态机里的落地形态。

September 10, 2026 · 2 min · 336 words · map[name:DeguiLiu]

Reactor 事件循环引入嵌入式模块: 适配性评估与冗余账

对一套已经基于「中断 + 线程 + IPC」自洽的嵌入式模块群,引入 Reactor 事件循环(libev)在大多数模块上是净成本,本质是「第二套并发模型叠第一套」。是否值得,取决于两个先决条件:数据源能否映射成 fd、模块是否已有完整的并发机制。

September 8, 2026 · 2 min · 409 words · map[name:DeguiLiu]

事件循环库的定位: 中断下半部与事件管家

libev 不碰硬件中断,却为中断驱动的系统提供了完整的「慢事慢办」机制。它的定位可以一句话说清:下半部调度器。

September 8, 2026 · 2 min · 219 words · map[name:DeguiLiu]