正常任务调度,vTaskSwitchContext函数会在哪些函数中被调用
时间: 2024-04-03 14:34:43 浏览: 55
正常任务调度中,vTaskSwitchContext函数会在以下几个函数中被调用:
1. xTaskCreate函数:该函数用于创建新任务,并将其加入到任务列表中。在任务列表中添加新任务时,调度器会检查新任务的优先级是否高于当前任务的优先级,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。
2. vTaskDelay函数:该函数用于使任务进入延时状态。在任务进入延时状态时,调度器会检查是否存在高优先级任务需要抢占当前任务,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将进入延时状态,并等待定时器超时或者唤醒事件的发生。
3. vTaskSuspend函数:该函数用于暂停任务的执行。在任务暂停时,调度器会检查是否存在高优先级任务需要抢占当前任务,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将进入暂停状态,等待恢复执行的指令。
4. vTaskResume函数:该函数用于恢复被暂停的任务的执行。在任务恢复执行时,调度器会检查新任务的优先级是否高于当前任务的优先级,如果是,则立即进行任务切换,将当前任务的上下文保存到堆栈中,并将新任务的上下文从堆栈中恢复。否则,当前任务将继续执行,直到被阻塞或者时间片轮询定时器超时。
需要注意的是,vTaskSwitchContext函数是FreeRTOS调度器的核心函数之一,对于系统的性能和稳定性有着重要的影响。因此,在使用FreeRTOS时,需要仔细设计任务的优先级和调度算法,避免出现优先级反转、死锁等问题,并且合理使用阻塞和延时函数,以避免任务调度过于频繁,影响系统的实时性能。
阅读全文