3. 实时系统概念

在飞控MCU选型中,“实时”并不是“跑得快”的同义词,而是指系统能否在确定的时间边界内完成规定动作。飞控系统同时包含姿态解算、传感器采样、PWM输出、遥控接收、日志存储、地面站通信等任务,它们对时间的要求差异极大。理解硬实时与软实时的区别,是判断MCU主频、内核架构、中断控制器和调度机制是否够用的第一步。

一、硬实时与软实时:截止时间的刚性差异

硬实时(Hard Real-Time)要求任务必须在截止时间(Deadline)之前完成,一旦超时,后果是系统失效甚至安全事故。飞控中的典型硬实时任务包括:IMU采样与姿态控制律计算、电机PWM更新、失效保护触发。以四旋翼为例,若姿态控制环周期为1 kHz,则每1 ms必须完成一次采样、解算和输出;错过几个周期就可能导致姿态发散、炸机。

软实时(Soft Real-Time)允许偶尔超时,超时只导致服务质量下降,不会造成灾难性后果。例如飞行日志写入SD卡、地面站遥测数据上传、电池电量统计显示。这些任务延迟几十毫秒甚至几百毫秒,通常只影响用户体验或数据分析,不影响飞行安全。

判断标准:问一句“如果这个任务晚完成,飞机会不会失控或伤人?”如果答案是“会”,就是硬实时;如果只是“数据不好看”或“响应变慢”,就是软实时。

二、任务调度:谁先运行、何时切换

实时系统的核心是调度器。常见调度策略包括:

  • 时间触发调度(Time-Triggered):按固定时间表执行任务,确定性最强,适合硬实时控制环。例如将1 ms周期划分为多个时间片,分别执行IMU读取、姿态解算、PWM更新。
  • 优先级抢占调度(Preemptive Priority):高优先级任务可打断低优先级任务。飞控中通常将姿态控制设为最高优先级,日志和通信设为低优先级。
  • 轮询调度(Round-Robin):任务轮流执行,公平但确定性差,不适合硬实时控制。
  • 速率单调调度(Rate-Monotonic):周期越短的任务优先级越高,是经典实时调度理论,适合周期性控制任务。

在MCU选型时,需要关注调度器带来的开销:上下文切换时间、调度器自身执行时间、优先级反转风险。对于Cortex-M系列,若使用RTOS(如FreeRTOS、RT-Thread),上下文切换通常在几微秒量级;若使用裸机前后台架构,则没有调度器开销,但任务响应依赖主循环设计。

三、中断延迟:从事件到响应的最短路径

中断延迟是指从中断请求产生到中断服务程序(ISR)第一条指令执行之间的时间。它由三部分组成:

  1. 硬件延迟:中断信号同步、优先级仲裁、CPU完成当前指令。Cortex-M3/M4通常为12个时钟周期,M7因流水线更深可能略长。
  2. 软件延迟:中断被屏蔽的时间,包括临界区、高优先级ISR执行时间。这是飞控中最容易失控的部分。
  3. 调度延迟:如果ISR只是置位标志,实际处理由任务完成,则还要加上任务被调度器唤醒的时间。

以STM32F4(168 MHz)为例,若中断延迟为12周期,则约71 ns;但若在临界区关闭中断长达10 μs,则实际延迟可能超过10 μs。对于1 kHz控制环,10 μs尚可接受;但对于20 kHz电流环,10 μs已占周期的20%,必须严格限制临界区长度。

// 典型中断延迟测量思路(伪代码)
GPIO_SetHigh(DEBUG_PIN);        // 进入ISR立即拉高
timestamp = DWT->CYCCNT;        // 读取周期计数
GPIO_SetLow(DEBUG_PIN);         // 退出ISR拉低
// 用示波器测量DEBUG_PIN高电平宽度,即为ISR执行时间
// 从外部事件到DEBUG_PIN上升沿的时间,即为中断延迟

四、确定性响应与截止时间:选型的量化依据

确定性响应意味着最坏情况执行时间(WCET)可预测、可测量、可保证。飞控选型不能只看平均性能,必须看最坏情况。例如:姿态控制任务平均执行20 μs,但最坏情况可能因缓存未命中、总线冲突、DMA抢占而达到80 μs。如果控制周期为1 ms,80 μs仍可接受;但如果周期为100 μs,则直接超时。

截止时间分析常用方法:

  • 利用率测试:所有任务执行时间之和除以周期,若小于1且满足速率单调边界,则理论上可调度。
  • 响应时间分析:计算每个任务从释放到完成的最坏时间,必须小于其截止时间。
  • 实测法:用GPIO翻转+示波器、DWT周期计数器、逻辑分析仪测量真实抖动。

下表给出飞控中典型任务的实时性要求与选型关注点:

任务典型周期实时类型截止时间选型关注点
IMU采样1 kHz硬实时≤100 μsSPI速率、DMA、中断延迟
姿态控制律1 kHz硬实时≤500 μsFPU、主频、WCET
电机PWM更新1 kHz~8 kHz硬实时≤50 μs定时器分辨率、死区控制
遥控接收50 Hz硬实时≤20 msUART中断、DMA
日志写入100 Hz软实时≤100 msSDIO、文件系统、缓冲
地面站遥测10 Hz软实时≤500 msUART/USB、协议栈
飞控实时任务时间轴:周期、执行与截止时间 时间 0 1 ms 2 ms 3 ms 4 ms IMU采样 80μs 80μs 80μs 80μs 姿态控制 300μs 300μs 300μs 300μs PWM更新 20μs 20μs 20μs 20μs 截止 截止 截止 截止 日志写入 可延迟,不阻塞控制 遥测上传 软实时,允许抖动 中断延迟 = 硬件响应 + 临界区屏蔽 + 调度唤醒 硬实时任务必须保证:执行时间 + 中断延迟 + 抖动 ≤ 截止时间

五、案例与误区复盘

案例:某飞控使用STM32F405,姿态控制环1 kHz,IMU通过SPI读取。初期设计在SPI中断中直接进行姿态解算,导致中断执行时间长达200 μs,期间其他中断被阻塞,遥控信号偶尔丢失。复盘发现:将解算移出ISR,ISR只负责搬运数据并置位标志,由高优先级任务完成解算,中断延迟从200 μs降至15 μs,遥控丢失问题消失。

常见误区一:只看主频,不看WCET。主频高不代表最坏情况响应快,缓存、总线仲裁、DMA冲突都会拉长WCET。
常见误区二:把软实时任务放进硬实时中断。日志、通信等任务若在ISR中执行,会直接破坏硬实时任务的截止时间。
常见误区三:忽略优先级反转。低优先级任务持有互斥锁时,高优先级任务可能被阻塞,必须使用优先级继承或临界区最小化。

选型时,建议先列出所有任务的周期、截止时间、实时类型,再估算WCET和中断延迟预算,最后反推MCU主频、内核、中断控制器和RTOS是否满足。硬实时任务的数量和周期密度,往往比单纯的主频更能决定MCU是否合适。