首页 > 试题广场 >

在某个任务中,先调用了 `vTaskSuspendAll()

[单选题]
在某个任务中,先调用了 `vTaskSuspendAll()` 挂起调度器,然后进入一段耗时较长的代码。在此期间,一个硬件中断发生,其中断服务程序(ISR)通过调用 `xSemaphoreGiveFromISR()` 唤醒了一个比当前任务优先级更高的任务。当中断服务程序执行完毕后,会发生什么?
  • 系统将立即进行上下文切换,执行被唤醒的更高优先级任务。
  • 系统将返回到被中断的任务继续执行,直到该任务调用 `xTaskResumeAll()` 之后,才可能发生上下文切换。
  • 中断服务程序中的 `xSemaphoreGiveFromISR()` 调用会失败并返回 `pdFALSE`。
  • 系统行为未定义,可能会导致系统崩溃。
任务调度器被挂起后不会执行任务切换,在中断服务程序中即使释放give信号量后导致有更高优先级的任务获取take信号量被唤醒(解除阻塞进入就绪态),由于任务调度器被挂起,该高优先级任务不会立刻执行,只是进入就绪态,会等待调度器被恢复后,系统识别到高优先级任务是就绪态进行任务的上下文切换后才执行。
发表于 2025-10-17 15:34:59 回复(0)