FreeRTOS学习笔记(一)
·
一、任务调度简介
任务调度是操作系统和实时系统中的核心机制,用于决定多个任务如何共享CPU资源。常见的调度策略包括:
1. 抢占式调度
主要针对优先级不同的任务。优先级数值越大表示优先级越高。当高优先级任务就绪时,可以抢占低优先级任务的CPU使用权,此时就绪态中优先级最高的任务开始运行。阻塞最高优先级,运行就绪态中优先级最高的任务。
/* 任务一:低优先级任务,打印信息后延时1秒 */
void vLowPriorityTask(void *pvParameters) {
for (;;) {
printf("低优先级任务正在运行\r\n");
vTaskDelay(1000); /* 阻塞1秒,主动让出CPU */
}
}
/* 任务二:高优先级任务,打印信息后延时5秒 */
void vHighPriorityTask(void *pvParameters) {
for (;;) {
printf("高优先级任务抢占CPU成功\r\n");
vTaskDelay(5000); /* 高优先级任务阻塞后,低优先级任务才有机会运行 */
}
}
/* 主函数中创建任务:优先级数值越大优先级越高 */
xTaskCreate(vLowPriorityTask, "Low", 128, NULL, 1, NULL); /* 优先级=1(低) */
xTaskCreate(vHighPriorityTask, "High", 128, NULL, 3, NULL); /* 优先级=3(高) */
/* 调度行为:高优先级就绪后立即抢占低优先级;仅当高优先级阻塞时低优先级任务才能运行。 */
2. 时间片调度——SysTick中断周期(时间片)
主要针对优先级相同的任务。系统为每个任务分配固定的时间片,当时间片用完后,系统时钟节拍触发任务切换,让下一个就绪任务运行。当任务被阻塞会直接执行下一个,没有用完的时间直接舍弃。
3. 协程式调度
协程式调度是一种协作式调度方式,任务主动让出CPU控制权。目前该调度方式已较少使用,无需深入了解。
二、任务状态
- 运行态:正在执行的任务,PS:同一时间内仅有一个运行态。
- 就绪态:该任务已经可以被执行,但还没被执行。
- 阻塞态:因延时或者等待外部事件发生
- 挂起态:类似于暂停,调用vTaskSuspend()进入挂起态,需要调用解挂函数vTaskPesume()才可以进入就绪态。

PS:除去运行态,其他三种任务状态都有任务状态列表(就绪列表,阻塞列表,挂起列表),新创建的任务会直接再就绪列表中,有一个32位变量,置一表示任务存在。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)