freertos时间片调度
时间: 2023-10-21 21:04:55 浏览: 126
在FreeRTOS中,时间片调度是一种任务调度算法。通过使用时间片,多个任务可以同时拥有一个优先级,任务的执行会按照时间片的长度进行切换。时间片的长度由配置文件中的宏configTICK_RATE_HZ确定,即滴答定时器的中断周期。当一个任务的时间片用完后,会切换到优先级相同的下一个就绪任务继续执行。
在FreeRTOS中,时间片调度发生在滴答定时器的中断服务函数中。中断服务函数会调用函数xPortSysTickHandler(),该函数会增加RTOS的系统滴答计数,并检查是否需要进行任务切换。如果需要进行任务切换,则会触发任务切换。
在时间片调度下,任务的执行顺序如下:
1. 当前任务正在执行。
2. 当前任务的时间片用完,但任务还未执行完。
3. 系统切换到优先级相同的下一个就绪任务。
4. 下一个就绪任务继续执行,直到时间片用完或任务执行完。
5. 如果任务执行完,会调用任务切换函数portYIELD()强制进行任务切换,让下一个就绪任务执行。
相关问题
freertos时间片轮转调度
在FreeRTOS中,时间片轮转调度是一种任务切换方式,它允许多个最高优先级的任务以轮流使用CPU的方式执行。当有高优先级任务就绪时,运行高优先级任务;当最高优先级的任务有多个时,这些任务会以时间片轮转的方式进行调度。
要开启时间片轮转调度,在FreeRTOS中,你可以搜索全工程,看看是否定义了configUSE_TIME_SLICING,如果没有定义的话,你可以添加如下的定义来开启时间片轮转调度:
#define configUSE_TIME_SLICING 1
这样,时间片轮转调度就会生效。
阅读全文