🥤 售货机多任务调度
实时性优化实战
📚 30章 · 从硬件到多核
⚡ FreeRTOS / STM32
🧩 中小学风格
📅 2025 蓝海资料
01
售货机系统概述
硬件架构
主控·电机·传感器·支付模块 / 软件分层 / 实时性需求分析
02
任务模型建立
优先级
周期性任务(电机控制/支付轮询) & 突发性任务 / 优先级划分
03
FreeRTOS移植与配置
STM32
时钟节拍·堆栈·抢占式/协作式调度策略
04
多任务创建与管理
xTaskCreate
出货/支付/UI刷新任务 · 就绪/阻塞/挂起状态切换
05
任务间同步机制
信号量·队列
Semaphore电机互斥 / Queue传递支付结果与出货指令
06
中断与任务协同
ISR
传感器中断 → xQueueSendFromISR,减少中断服务时间
07
实时性指标定义
Jitter
响应时间(投币→出货) / 吞吐量 / 抖动容忍范围
08
调度延迟分析
Trace
上下文切换开销 / FreeRTOS trace 测量任务执行时间
09
优先级反转问题
继承协议
低优先级持有锁导致高优先级阻塞 · Priority Inheritance
10
死锁预防
锁顺序
任务A等Q1持L2 / 任务B等L2持Q1 · 设计锁顺序规则
11
任务周期调整
CPU优化
电机动作2秒 → 调整周期,避免无效轮询
12
事件驱动设计
Event Group
轮询→事件驱动,等待投币/扫码完成信号
13
内存管理优化
静态分配
Static Task 避免碎片,高频任务预分配堆栈
14
时间片轮转调度
Time Slice
同优先级UI/日志任务时间片,界面不卡顿
15
优先级静态分析
RMS
Rate Monotonic Scheduling 验证截止时间
16
响应时间计算
WCRT
基于WCET+阻塞时间,最坏情况响应时间
17
中断嵌套优化
优先级分组
电机过流保护最高,支付通信次高
18
临界区保护
CRITICAL
taskENTER_CRITICAL 保护PWM寄存器配置
19
软件定时器应用
超时检测
出货超时5秒报警,避免任务阻塞
20
任务通知
轻量同步
替代信号量,减少内存,提升出货响应
21
功耗与实时性平衡
WFI
空闲任务低功耗,中断唤醒处理支付
22
调试与性能分析
SystemView
SEGGER SystemView / FreeRTOS+Trace 定位瓶颈
23
看门狗与容错
7x24h
独立看门狗监控心跳,出货卡死则复位
24
多核调度初探
ESP32
双核MCU支付/电机任务分离,减少调度冲突
25
实时性测试方法
逻辑分析仪
GPIO翻转测量投币→电机启动延迟
26
案例实战:单电机调度
实战
3个任务(支付检测/出货控制/状态上报) · 队列通信
27
案例实战:多货道并发
实战
8货道电机互斥锁,避免电源过载
28
案例实战:支付实时响应
MDB
10ms内响应硬币识别器中断
29
案例实战:远程监控OTA
WiFi
低优先级处理WiFi,不阻塞实时出货
30
课程总结与进阶
RMS vs EDF
调度策略回顾 · 推荐《Hard Real-Time Computing Systems》与Zephyr RTOS