Linux 编程: 嵌入式 ARM 平台网络实时性能优化
面向工业传感器平台的 ARM Linux 网络实时优化:先讲应用层收包、poll/select、队列、内存池和零拷贝,再逐项说明 IRQ/NAPI、RPS/RFS、缓冲区、CPU 隔离和 PTP 参数的理由。
面向工业传感器平台的 ARM Linux 网络实时优化:先讲应用层收包、poll/select、队列、内存池和零拷贝,再逐项说明 IRQ/NAPI、RPS/RFS、缓冲区、CPU 隔离和 PTP 参数的理由。
coact 在固定事件池中构造事件和 payload,后续提交、排队、派发和回收只传 Event*;用侵入式引用计数和所有权转移管理多 AO 共享与回收,并对照 lwIP pbuf、libev watcher 说明边界。
从普通 while 循环里重复出现的心跳上报出发,说明如何用 C++17 函数模板把每轮心跳收进循环骨架,并划清 AOP、模板方法与策略组合的边界。
任务记在静态表里、主循环轮询派发的合作式定时调度器: 排序链表加表头判定换来 O(1) 轮询,代价是四条边界。含加固实现(重入守卫、一轮预算、超期计数、句柄校验)与完整 C 清单、演示程序、验证脚本。
从复位到第一个线程执行,启动过程分成四段,每段都有前置条件。本文按段说明每一段在做什么、为什么顺序不能换、这些段和它们的地址从哪里来,并给出启动失败时的判断顺序。
FPGA 采集到的数据由 DMA 写进 DDR,用户态程序用 /dev/mem 映射同一块物理内存把它读出来。这条通路上没有数据拷贝,双方能对上靠的是事先约定的物理地址。无锁则来自另一处设计:环形队列把读写状态拆成两个各自单向递增的计数器,锁就没有存在的必要。
在「一个工作线程 + 多个命令入口 + 共享状态」的 MCU 服务里,偶发缺陷大多来自三处:读改写被别的线程插进来、派发过程被重入、锁散落在各个分支里。本文给出三个低成本的收敛办法,并用两种写法的代码指标做对照。
相机芯片上的 RTSP 服务不建线程,由应用线程反复调用,画面只传地址不复制。全文围绕三件事:定时任务共用一个到期时刻、一帧画面被多个客户端共用时的复用时机、一条连接上控制命令与视频的发送顺序,最后与服务器上的实现逐项对照。
一台嵌入式设备通过同一个 USB 控制器输出两路 UVC 视频:IAD 负责让主机看到两个摄像头,内部视频链负责分别产生两路帧,环形缓冲保证单路稳定,时间戳和上位机逻辑完成最终配对。
主机能够枚举一颗从未见过的芯片,并非因为主机预先识别了该芯片,而是因为设备按 USB 规范用描述符描述自身。描述符说明设备的身份与接口数量,Probe/Commit 协商确定输出格式。
一次写入要经过四层地址翻译:字节偏移、扇区、设备块号、命令。多数人以为数据在这四层里被拷了四遍,实际一次都没有。
以采集模块为例,说明骨架加钩子、策略模板、Traits 注入与函数指针擦除的机制、代价,以及用反汇编和体积对比判断是否真的替代了虚函数。
CRTP 把子类名当模板参数传给基类,让基类在编译期认领自己的子类,从而直接调用并内联,不查虚表、不留 vptr。本文拆解它成立的三条原理、与虚函数的差别、踩坑边界,以及在嵌入式状态机里的落地形态。
对一套已经基于「中断 + 线程 + IPC」自洽的嵌入式模块群,引入 Reactor 事件循环(libev)在大多数模块上是净成本,本质是「第二套并发模型叠第一套」。是否值得,取决于两个先决条件:数据源能否映射成 fd、模块是否已有完整的并发机制。
libev 不碰硬件中断,却为中断驱动的系统提供了完整的「慢事慢办」机制。它的定位可以一句话说清:下半部调度器。