第二批复习总结-答案.md 3.7 KB

第二批复习总结 · 答案解析

⚠️ 做完 第二批复习总结.md 的全部 26 题后再翻开本文件对照。 每道题给答案 + 一句话解析,解析都指向对应主题页。


判断题(对/错 + 一句话理由)

  1. 。vTaskDelay 是主动等延时 → Blocked(自动醒);Suspended 必须 vTaskResume 手动恢复。→ 24.任务状态机
  2. 。抢占后被踢回 Ready 排队,等调度器选中才回 Running(不插队,保调度一致性)。→ 24.任务状态机
  3. 。同优先级 tick 到点轮换是时间片;抢占特指更高优先级就绪插入。→ 25.抢占-vs-时间片
  4. 。8(等待)> 4(插队)> 2(持有)→ 三要素齐 → 反转。→ 26.优先级反转
  5. 。C(1) 比持有者 B(2) 还低,抢不了持有者 → 不构成反转。→ 26.优先级反转
  6. 。临界区关中断 → tick 进不来 → 延时不计时 → 卡死。→ 27.临界区
  7. 。中断也碰的数据必须关中断(临界区);互斥量挡不了 ISR。→ 27.临界区
  8. 。信号量只传"事件/计数信号",不传数据;传具体值用队列。→ 28.IPC选型 / 29.RTOS任务同步方式
  9. 。经典任务通知一对一;广播是新版(V11+)特性。→ 29.RTOS任务同步方式
  10. 。带超时 send 会阻塞 → ISR 禁用;用 xQueueSendFromISR。→ 30.ISR通信
  11. 。互斥量靠优先级继承、需要任务上下文,ISR 无身份 → 无 FromISR 版,禁止。→ 30.ISR通信
  12. 。开大保平安浪费 RAM;栈/堆共用内存此消彼长。正确 = 峰值×余量 + HighWaterMark 验证。→ 31.栈估算
  13. 。HighWaterMark 返回历史最低剩余,值越大越安全(剩余多);接近 0 才危险。→ 31.栈估算
  14. 。RTOS 任务跑在 PSP(任务自己的栈),中断异常帧压进当前任务栈——这就是估算要算中断嵌套的原因。→ 30.ISR通信 / 31.栈估算

填空题

  1. Blocked——死等/饥饿,永久阻塞,任务永远轮不到执行。→ 24.任务状态机
  2. vTaskDelayUntil(绝对延时,按固定周期醒)。→ 24.任务状态机
  3. 优先级继承(互斥量默认)/ 优先级天花板。→ 26.优先级反转
  4. 互斥量 / 信号量(二值信号量做事件通知)。→ 28.IPC选型
  5. FromISR(如 xQueueSendFromISR)/ pxHigherPriorityTaskWoken。→ 30.ISR通信
  6. 最坏路径峰值(局部变量+调用帧+库函数+中断嵌套)。→ 31.栈估算
  7. 队列——有具体数据要传。→ 28.IPC选型
  8. 事件组——OR 等待,多条件组合。→ 29.RTOS任务同步方式

场景 / 代码判断

  1. 优先级反转。三要素:高等待(H 等资源)+ 低持有(L 持资源)+ 中插队(M 抢 L)。解决:持有者 L 用互斥量(优先级继承把 L 临时提到 H 水平,M 抢不了 L),别用二值信号量当锁。→ 26.优先级反转
  2. 带超时 10 tick 的 xQueueSend 会阻塞——队列满就等,ISR 里阻塞 = 中断不返回 = 死锁/跑飞。应改 xQueueSendFromISR(&q, &data, &pxHigherPriorityTaskWoken)。→ 30.ISR通信
  3. 卡死。taskENTER_CRITICAL 关中断 → tick 进不来 → vTaskDelay 的延时永远计不完,且没人唤醒。临界区里禁止一切阻塞 API。→ 27.临界区
  4. 要加大。20/128 ≈ 16% < 20% 余量线,贴着危险区;HighWaterMark 已提示剩余不足,加大到 256 words 更稳。→ 31.栈估算

错题 > 3 道:回到对应主题页重学第 5 步变体验证。