强制删除一个 RTOS 任务前,如何避免锁、缓冲和外设悬空?
外部强删任务无法自动理解它持有的互斥锁、DMA、堆对象或外设事务,容易留下永久占用。优先使用协作式停止:发取消请求、退出新工作、取消或等待在途操作、释放资源、回报完成,再由所有者回收。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
外部强删任务无法自动理解它持有的互斥锁、DMA、堆对象或外设事务,容易留下永久占用。优先使用协作式停止:发取消请求、退出新工作、取消或等待在途操作、释放资源、回报完成,再由所有者回收。
运行时间统计给出各任务累计执行占比,Trace 能还原切换、ISR、阻塞和唤醒时间线。要用独立高分辨率计数器、足够缓冲和明确采样窗口,并同时观察队列水位、截止期违约与最长连续占用。
抢占式调度可在更高优先级任务就绪时切换,响应快但共享数据同步更复杂;协作式调度依赖任务主动让出,行为直观、切换点少,但一个任务不让出就会拖住全系统。
死锁是参与者永久互等资源;活锁是状态不断变化却没有有效进展;饥饿是某任务长期得不到 CPU 或资源。定位需观察等待关系、锁持有者、任务运行时间和状态随时间的变化。
事件计数表示尚未处理的发生次数,生产者 give、消费者 take;资源计数表示可用相同资源数量,获取后必须在资源归还时 give。两者都不表达对象内容,若要携带数据应使用队列。
递归互斥锁允许同一任务重复获取,并要求对应次数释放,适合不可避免的同线程嵌套调用。它不允许其他任务越权释放,也不能解决锁顺序环路;滥用会隐藏层次不清和过大的临界区。