第二批复习总结 · 答案解析
⚠️ 做完 第二批复习总结.md 的全部 26 题后再翻开本文件对照。
每道题给答案 + 一句话解析,解析都指向对应主题页。
判断题(对/错 + 一句话理由)
- 错。vTaskDelay 是主动等延时 → Blocked(自动醒);Suspended 必须 vTaskResume 手动恢复。→
24.任务状态机
- 对。抢占后被踢回 Ready 排队,等调度器选中才回 Running(不插队,保调度一致性)。→
24.任务状态机
- 错。同优先级 tick 到点轮换是时间片;抢占特指更高优先级就绪插入。→
25.抢占-vs-时间片
- 对。8(等待)> 4(插队)> 2(持有)→ 三要素齐 → 反转。→
26.优先级反转
- 错。C(1) 比持有者 B(2) 还低,抢不了持有者 → 不构成反转。→
26.优先级反转
- 错。临界区关中断 → tick 进不来 → 延时不计时 → 卡死。→
27.临界区
- 错。中断也碰的数据必须关中断(临界区);互斥量挡不了 ISR。→
27.临界区
- 错。信号量只传"事件/计数信号",不传数据;传具体值用队列。→
28.IPC选型 / 29.RTOS任务同步方式
- 错。经典任务通知一对一;广播是新版(V11+)特性。→
29.RTOS任务同步方式
- 错。带超时 send 会阻塞 → ISR 禁用;用
xQueueSendFromISR。→ 30.ISR通信
- 错。互斥量靠优先级继承、需要任务上下文,ISR 无身份 → 无 FromISR 版,禁止。→
30.ISR通信
- 错。开大保平安浪费 RAM;栈/堆共用内存此消彼长。正确 = 峰值×余量 + HighWaterMark 验证。→
31.栈估算
- 错。HighWaterMark 返回历史最低剩余,值越大越安全(剩余多);接近 0 才危险。→
31.栈估算
- 对。RTOS 任务跑在 PSP(任务自己的栈),中断异常帧压进当前任务栈——这就是估算要算中断嵌套的原因。→
30.ISR通信 / 31.栈估算
填空题
- Blocked——死等/饥饿,永久阻塞,任务永远轮不到执行。→
24.任务状态机
- vTaskDelayUntil(绝对延时,按固定周期醒)。→
24.任务状态机
- 优先级继承(互斥量默认)/ 优先级天花板。→
26.优先级反转
- 互斥量 / 信号量(二值信号量做事件通知)。→
28.IPC选型
- FromISR(如 xQueueSendFromISR)/ pxHigherPriorityTaskWoken。→
30.ISR通信
- 最坏路径峰值(局部变量+调用帧+库函数+中断嵌套)。→
31.栈估算
- 队列——有具体数据要传。→
28.IPC选型
- 事件组——OR 等待,多条件组合。→
29.RTOS任务同步方式
场景 / 代码判断
- 优先级反转。三要素:高等待(H 等资源)+ 低持有(L 持资源)+ 中插队(M 抢 L)。解决:持有者 L 用互斥量(优先级继承把 L 临时提到 H 水平,M 抢不了 L),别用二值信号量当锁。→
26.优先级反转
- 带超时 10 tick 的 xQueueSend 会阻塞——队列满就等,ISR 里阻塞 = 中断不返回 = 死锁/跑飞。应改
xQueueSendFromISR(&q, &data, &pxHigherPriorityTaskWoken)。→ 30.ISR通信
- 卡死。taskENTER_CRITICAL 关中断 → tick 进不来 → vTaskDelay 的延时永远计不完,且没人唤醒。临界区里禁止一切阻塞 API。→
27.临界区
- 要加大。20/128 ≈ 16% < 20% 余量线,贴着危险区;HighWaterMark 已提示剩余不足,加大到 256 words 更稳。→
31.栈估算
错题 > 3 道:回到对应主题页重学第 5 步变体验证。