<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>实时系统 on TiJet</title><link>https://www.tainuohc.com/tags/%E5%AE%9E%E6%97%B6%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 实时系统 on TiJet</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 21 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.tainuohc.com/tags/%E5%AE%9E%E6%97%B6%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>驯服 Linux 抖动：PREEMPT_RT + Xenomai 实现 50µs 硬实时闭环控制</title><link>https://www.tainuohc.com/blog/2026-07-21-linux-rt/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/blog/2026-07-21-linux-rt/</guid><description>&lt;h2 id="1-挑战在-30-美元的-soc-上跑软-plc">1. 挑战：在 30 美元的 SoC 上跑软 PLC&lt;/h2>
&lt;p>泰诺下一代运动控制器需要在单颗 SoC 上运行软 PLC 运行时，同时对六个伺服轴执行 20kHz 的闭环 PID 控制。目标硬件：售价约 30 美元的全志 A40i（四核 Cortex-A7）。没有 FPGA，没有专用 DSP——只有普通的 ARM 核跑 Linux。&lt;/p>
&lt;p>问题显而易见：标准 Linux 即使配置了 &lt;code>SCHED_FIFO&lt;/code>，在这类硬件上仍会出现 200~500µs 的调度抖动。对于周期仅 50µs 的 20kHz 控制环来说，这完全不可接受。错过截止时间意味着相位误差累积，最终导致机械系统失稳。&lt;/p>
&lt;h2 id="2-preempt_rt-地基">2. PREEMPT_RT 地基&lt;/h2>
&lt;p>第一步很直接：应用 &lt;code>PREEMPT_RT&lt;/code> 补丁集，配置内核 &lt;code>CONFIG_PREEMPT_RT_FULL=y&lt;/code>。这几乎将所有 Spinlock 临界区转换为可抢占的互斥锁，让内核实现近乎完全可抢占。&lt;/p>
&lt;p>关键内核配置：&lt;/p>
&lt;pre tabindex="0">&lt;code>CONFIG_PREEMPT_RT_FULL=y
CONFIG_HZ=1000
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
CONFIG_NO_HZ_FULL=y
&lt;/code>&lt;/pre>&lt;p>仅凭 &lt;code>PREEMPT_RT&lt;/code>，最差调度延迟从 ~480µs 降至 ~80µs。有改善，但仍达不到 50µs 的预算。&lt;/p>
&lt;h2 id="3-引入-xenomai-4evl-核">3. 引入 Xenomai 4（EVL 核）&lt;/h2>
&lt;p>Xenomai 4 的 EVL 核与 Linux 并行运行一个独立的实时核心，在中断到达 Linux 内核之前就进行拦截。实时线程由 EVL 核直接调度，完全绕过 Linux 调度器。&lt;/p></description></item><item><title>FPGA 加速视觉检测：从 200ms 到 8µs 的延迟优化之路</title><link>https://www.tainuohc.com/blog/2026-07-20-fpga-acceleration/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/blog/2026-07-20-fpga-acceleration/</guid><description>&lt;h2 id="1-问题的原点软件视觉检测撞上性能墙">1. 问题的原点：软件视觉检测撞上性能墙&lt;/h2>
&lt;p>在泰诺的 PCB 印刷产线中，锡膏检测（SPI）是核心品控环节。每一块经过产线的 PCB 仅有不到 50ms 的时间窗口用于缺陷检测——超出这个时间，整条产线就会产生背压。&lt;/p>
&lt;p>多年来，我们一直使用基于 GPU 加速的 OpenCV 流水线运行在 x86 边缘节点上。方案确实能用——但仅限低负载场景。当检测分辨率提升到 8K 级别后，单帧处理延迟偶尔飙升至 180~220ms。这 180ms 的抖动意味着漏检、误放行和产线拥塞。根本原因在于架构：通用 GPU 流水线无论怎样优化，都无法消除调度延迟和 PCIe 传输开销的不确定性。&lt;/p>
&lt;h2 id="2-为什么选择-fpga硬件流水线的不可替代性">2. 为什么选择 FPGA：硬件流水线的不可替代性&lt;/h2>
&lt;p>我们决定将整条检测流水线下沉到 FPGA，让芯片直接对接图像传感器的 MIPI 接口。核心理由有三：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>流式架构&lt;/strong>：像素从 ADC 输出的那一刻就开始逐级流过流水线，不存在帧缓存、DMA 传输和内核上下文切换。&lt;/li>
&lt;li>&lt;strong>确定性延迟&lt;/strong>：精心设计的流水线具有精确的 &lt;code>N&lt;/code> 个时钟周期的像素延迟，&lt;code>N&lt;/code> 即流水线总深度，不存在方差。&lt;/li>
&lt;li>&lt;strong>能效优势&lt;/strong>：FPGA 方案功耗约 4W，而同等工作负载在 GPU 边缘节点上需要 45W。&lt;/li>
&lt;/ul>
&lt;h2 id="3-架构设计">3. 架构设计&lt;/h2>
&lt;p>我们在 Xilinx Kintex-7 上实现了五级流水线：&lt;/p>
&lt;pre tabindex="0">&lt;code>Sensor → Bayer2RGB → 色彩校正 → 二值化/阈值 → 连通域检测 → 判定锁存
 ↓ ↓ ↓ ↓ ↓ ↓
 MIPI 第1级 第2级 第3级 第4级 第5级
 (原始) (3周期) (2周期) (1周期) (8周期) (1周期)
&lt;/code>&lt;/pre>&lt;p>总流水线深度：&lt;strong>15 个时钟周期&lt;/strong>。在 200MHz 时钟下，单个像素从进入到缺陷标志输出的延迟为 &lt;strong>75 纳秒&lt;/strong>。整帧图像以行速率流转，8K × 8K 的帧在传感器输出完成的同时即完成检测——&lt;strong>不引入任何额外延迟&lt;/strong>。&lt;/p></description></item></channel></rss>