一、硬实时系统概述
大家好,我是老张。做嵌入式这行快二十年了,今天咱们聊聊硬实时系统。说实话,这个概念刚入行时我也觉得挺虚的,直到第一次在产线上看到电机因为中断响应慢了半拍直接把工件打飞了——嗯,从那以后我再也不敢小看实时性了。
1.1 实时系统的分类
实时系统,说白了就是「在规定时间内必须干完活」的系统。但同样是「规定时间」,差别可大了去了。我个人习惯把实时系统分成三类:
| 类型 | 特点 | 典型场景 |
|---|---|---|
| 硬实时 | 超时 = 系统失败 | 电机伺服控制、安全气囊 |
| 软实时 | 超时 = 性能下降 | 视频播放、网络通信 |
| 固实时 | 超时 = 数据无效 | 传感器采样、数据采集 |
你想想看,电机控制里如果PWM周期超了1微秒,电机可能就抖一下。但视频播放卡了1帧,顶多被人骂两句。这就是本质区别。
1.2 硬实时 vs 软实时
我在项目中遇到过不少工程师把这两个概念搞混。其实区分起来很简单:
- 硬实时:截止时间必须满足,否则后果严重。比如伺服电机的电流环,我做过一个项目,电流环周期要求10μs,超了直接烧MOS管。
- 软实时:偶尔超时还能接受,只是体验变差。比如你手机上的触摸屏响应,偶尔卡一下没人会砸手机。
核心区别一句话:硬实时系统里,时间就是功能的一部分。你延迟了,功能就错了。
为什么会这样?因为硬实时系统通常直接控制物理世界。电机转没转到指定位置,阀门开没开到指定角度,这些都是非黑即白的事。我曾经调试一个六轴机械臂,就因为中断延迟了50μs,末端执行器直接撞上了夹具——那次教训让我记住了:硬实时没有「差不多」这回事。
1.3 运动控制中的实时性要求
运动控制对实时性的要求,我个人觉得是所有嵌入式应用里最苛刻的。咱们来看几个关键指标:
| 控制层级 | 典型周期 | 允许抖动 | 中断优先级 |
|---|---|---|---|
| 电流环 | 10~50 μs | < 1 μs | 最高 |
| 速度环 | 100~500 μs | < 10 μs | 高 |
| 位置环 | 1~10 ms | < 100 μs | 中 |
| 轨迹规划 | 10~100 ms | < 1 ms | 低 |
你看这个表,电流环的周期才10~50微秒,抖动要控制在1微秒以内。这是什么概念?一个普通的RTOS任务切换就要几微秒了。所以运动控制里,中断系统设计是核心中的核心。
避坑指南:我曾经在电流环里用了printf调试,结果中断服务程序执行时间从3μs飙到了50μs。嗯,电机当场就震起来了。记住:中断服务程序里绝对不要做I/O操作,尤其是打印。
运动控制还有个特点:实时性要求是分层的。你想想看,电流环控制的是电磁转矩,必须每几十微秒更新一次。但轨迹规划是毫秒级的,慢一点问题不大。所以设计中断系统时,要按优先级分层处理。
1.4 本章知识体系
为了让大家更直观地理解,我画了张图:
重要提醒:很多新手在设计中断系统时,喜欢把所有中断都设成最高优先级。这是大忌!我见过一个项目,因为ADC中断和PWM中断抢优先级,导致电机控制周期抖动超过50%。记住:中断优先级不是越高越好,而是要合理分配。
好了,这一章咱们把硬实时系统的基本概念理清了。下一章我会详细讲中断系统的硬件架构,包括ARM Cortex-M的中断控制器设计,以及如何用硬件保证实时性。到时候我会拿一个实际的项目案例来拆解,保证干货满满。
公众号:蓝海资料掘金营,微信deep3321