FreeRTOS时间片调度实验:LED灯控制与任务切换

需积分: 32 28 下载量 117 浏览量 更新于2024-08-05 收藏 11.22MB PDF 举报
"这篇实验教程主要讲解了如何在FreeRTOS操作系统中进行时间片调度的实践,目的是让学习者了解并掌握FreeRTOS的时间片轮转机制。实验中涉及到创建任务、设置任务优先级以及通过LED灯闪烁和串口打印来观察任务执行情况。实验使用了STM32F407微控制器,并提供了相关的开发手册和教程链接,适用于嵌入式开发的学习和实践。" 在FreeRTOS中,时间片调度是一种任务调度策略,它允许多个同等优先级的任务在CPU上共享执行时间。在这个实验中,重点是学习如何使用FreeRTOS的时间片调度功能。实验设计了三个任务:start_task、task1_task和task2_task。start_task负责创建其他两个任务,而task1_task和task2_task具有相同的优先级(2),它们分别控制LED0和LED1的闪烁,并通过串口输出各自运行的次数。 首先,实验中设置了系统的时钟节拍频率为20Hz(即configTICK_RATE_HZ定义为20),这意味着滴答定时器的中断周期为50毫秒。因此,时间片的长度被设定为50毫秒。较大的时间片便于观察任务间的切换。任务优先级定义了任务执行的优先顺序,数字越小优先级越高。在这个实验中,task1_task和task2_task的优先级都被设为2,表示它们具有相同的执行权。 在main()函数中,这些任务被创建并启动。每个任务都有其优先级、堆栈大小和任务句柄,如START_TASK_PRIO、TASK1_TASK_PRIO和TASK2_TASK_PRIO定义了任务优先级,START_STK_SIZE、TASK1_STK_SIZE和TASK2_STK_SIZE定义了任务堆栈大小,TaskHandle_t类型的变量用于存储任务句柄,而对应的void函数指针定义了任务的执行函数。 通过这个实验,学习者可以深入了解FreeRTOS中的任务调度机制,包括任务的创建、优先级的设定、时间片的分配和任务之间的切换。这对于理解实时操作系统的工作原理和实际应用非常有帮助。同时,实验也提供了基于STM32F407的FreeRTOS开发环境,这有助于开发者在实际硬件平台上进行实践,增强动手能力和问题解决能力。实验提供的相关教程和手册则为深入学习FreeRTOS提供了丰富的参考资料。