任务进入阻塞态后切换会来会重新执行任务函数吗?
时间: 2023-08-16 13:08:49 浏览: 50
当任务进入阻塞态后,它会被暂时挂起,让其他任务执行。在任务被重新调度执行之前,任务函数不会被重新执行。
当任务处于阻塞态时,它不会占用处理器资源,而是让出 CPU 给其他任务或中断处理函数执行。只有当任务被解除阻塞并重新调度执行时,才会再次进入任务函数并继续执行下去。
任务解除阻塞的条件可以是等待的延时时间到达,也可以是等待的事件发生,例如消息队列中有新消息到达、信号量的计数值满足条件等等。一旦满足了解除阻塞的条件,任务会被重新调度执行,并从上次阻塞的地方继续执行任务函数。
需要注意的是,任务在阻塞态和就绪态之间切换时,可能会发生上下文切换,即保存当前任务的上下文信息并恢复下一个任务的上下文信息。但是,任务函数本身不会被重新执行,只是在适当的时机从上次中断的地方继续执行。
相关问题
在任务调度中使用HAL_Delay函数是否会产生任务的切换
在使用HAL_Delay函数时,当前任务会被阻塞,直到延时时间结束才会继续执行下一条指令。因此,如果在任务调度中使用HAL_Delay函数,会导致当前任务的执行被阻塞,直到延时时间结束。在此期间,其他任务可以继续执行,因此可能会发生任务的切换。
正常任务调度,vTaskSwitchContext函数会在哪些函数中被调用
正常任务调度中,vTaskSwitchContext函数会在以下几个函数中被调用:
1. xTaskCreate函数:该函数用于创建新任务,并将其加入到任务列表中。在任务列表中添加新任务时,调度器会检查新任务的优先级是否高于当前任务的优先级,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。
2. vTaskDelay函数:该函数用于使任务进入延时状态。在任务进入延时状态时,调度器会检查是否存在高优先级任务需要抢占当前任务,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将进入延时状态,并等待定时器超时或者唤醒事件的发生。
3. vTaskSuspend函数:该函数用于暂停任务的执行。在任务暂停时,调度器会检查是否存在高优先级任务需要抢占当前任务,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将进入暂停状态,等待恢复执行的指令。
4. vTaskResume函数:该函数用于恢复被暂停的任务的执行。在任务恢复执行时,调度器会检查新任务的优先级是否高于当前任务的优先级,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将继续执行,直到被阻塞或者时间片轮询定时器超时。
需要注意的是,vTaskSwitchContext函数是FreeRTOS调度器的核心函数之一,对于系统的性能和稳定性有着重要的影响。因此,在使用FreeRTOS时,需要仔细设计任务的优先级和调度算法,避免出现优先级反转、死锁等问题,并且合理使用阻塞和延时函数,以避免任务调度过于频繁,影响系统的实时性能。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)