技术笔记

嵌入式系统、C/C++、架构设计与性能优化

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]

C++ 协程调度: 为什么等待密集型任务不必各占一个线程

以 State Threads 和 ISP 流水线为例,解释协程如何接管等待、为何单核等待任务不必各占一个线程,以及如何验证调度收益。

October 17, 2026 · 7 min · 1455 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]

嵌入式 SD 卡上电加载: 从卡检测到文件系统挂载

上电时已插入的 SD 卡不会产生检测跳变,驱动需主动查询 CDETECT,再通过检测线程、识别线程与文件系统完成挂载。

September 20, 2026 · 6 min · 1264 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]

Codex CLI 状态栏配置: 内置字段、试用与持久化

Codex CLI 可直接通过 tui.status_line 配置状态栏,无需外部脚本;本文列出内置字段及交互、单次覆盖和持久化三种调整方式。

September 16, 2026 · 1 min · 106 words · map[name:DeguiLiu]

WezTerm 配置调优: TUI 渲染成本与实测取舍

基于单核 CPU 实测说明 WezTerm 的 TUI 渲染成本,保留有效配置,并记录限帧、标签栏、渲染后端与输入行为的取舍。

September 16, 2026 · 5 min · 1018 words · map[name:DeguiLiu]