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)第一条指令执行之间的时间。它由三部分组成:
- 硬件延迟:中断信号同步、优先级仲裁、CPU完成当前指令。Cortex-M3/M4通常为12个时钟周期,M7因流水线更深可能略长。
- 软件延迟:中断被屏蔽的时间,包括临界区、高优先级ISR执行时间。这是飞控中最容易失控的部分。
- 调度延迟:如果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 μs | SPI速率、DMA、中断延迟 |
| 姿态控制律 | 1 kHz | 硬实时 | ≤500 μs | FPU、主频、WCET |
| 电机PWM更新 | 1 kHz~8 kHz | 硬实时 | ≤50 μs | 定时器分辨率、死区控制 |
| 遥控接收 | 50 Hz | 硬实时 | ≤20 ms | UART中断、DMA |
| 日志写入 | 100 Hz | 软实时 | ≤100 ms | SDIO、文件系统、缓冲 |
| 地面站遥测 | 10 Hz | 软实时 | ≤500 ms | UART/USB、协议栈 |
五、案例与误区复盘
案例:某飞控使用STM32F405,姿态控制环1 kHz,IMU通过SPI读取。初期设计在SPI中断中直接进行姿态解算,导致中断执行时间长达200 μs,期间其他中断被阻塞,遥控信号偶尔丢失。复盘发现:将解算移出ISR,ISR只负责搬运数据并置位标志,由高优先级任务完成解算,中断延迟从200 μs降至15 μs,遥控丢失问题消失。
常见误区二:把软实时任务放进硬实时中断。日志、通信等任务若在ISR中执行,会直接破坏硬实时任务的截止时间。
常见误区三:忽略优先级反转。低优先级任务持有互斥锁时,高优先级任务可能被阻塞,必须使用优先级继承或临界区最小化。
选型时,建议先列出所有任务的周期、截止时间、实时类型,再估算WCET和中断延迟预算,最后反推MCU主频、内核、中断控制器和RTOS是否满足。硬实时任务的数量和周期密度,往往比单纯的主频更能决定MCU是否合适。