任务进入阻塞态后切换会来会重新执行任务函数吗?
时间: 2023-08-16 17:08:49 浏览: 52
当任务进入阻塞态后,它会被暂时挂起,让其他任务执行。在任务被重新调度执行之前,任务函数不会被重新执行。
当任务处于阻塞态时,它不会占用处理器资源,而是让出 CPU 给其他任务或中断处理函数执行。只有当任务被解除阻塞并重新调度执行时,才会再次进入任务函数并继续执行下去。
任务解除阻塞的条件可以是等待的延时时间到达,也可以是等待的事件发生,例如消息队列中有新消息到达、信号量的计数值满足条件等等。一旦满足了解除阻塞的条件,任务会被重新调度执行,并从上次阻塞的地方继续执行任务函数。
需要注意的是,任务在阻塞态和就绪态之间切换时,可能会发生上下文切换,即保存当前任务的上下文信息并恢复下一个任务的上下文信息。但是,任务函数本身不会被重新执行,只是在适当的时机从上次中断的地方继续执行。
相关问题
在任务调度中使用HAL_Delay函数是否会产生任务的切换
在使用HAL_Delay函数时,当前任务会被阻塞,直到延时时间结束才会继续执行下一条指令。因此,如果在任务调度中使用HAL_Delay函数,会导致当前任务的执行被阻塞,直到延时时间结束。在此期间,其他任务可以继续执行,因此可能会发生任务的切换。
freertos什么时候执行任务函数
FreeRTOS是一个开源的实时操作系统(RTOS),它提供一种任务调度机制来管理多个任务的执行。在FreeRTOS中,任务函数的执行是由调度器来控制的。
FreeRTOS使用优先级抢占式调度算法,即根据任务的优先级来确定任务的执行顺序。当系统启动后,调度器会根据任务的优先级选择一个最高优先级的任务开始执行。任务函数会一直执行,直到发生以下情况之一:
1. 时间片用完:FreeRTOS使用时间片轮转调度算法,每个任务被分配一个时间片,在时间片用完之后,调度器会切换到下一个优先级最高的任务。
2. 高优先级任务就绪:如果有一个优先级更高的任务就绪了,调度器会立即切换到该任务执行。
3. 阻塞状态解除:如果任务在执行过程中发生了阻塞,当阻塞条件解除后,调度器会将该任务重新放入就绪队列,并在适当的时候执行。
总之,FreeRTOS的任务函数在系统启动后会根据任务的优先级和调度算法来确定执行顺序,并且会根据时间片、优先级和阻塞状态等因素进行任务切换。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)