10.6 时间片调度器实验例程说明
10.6.1 STM32F103开发板实验配套例子: V4-405_RTX实验_时间片调度 实验目的: 1. 本实验主要学习RTX的时间片调度 实验内容: 1. K1按键按下,串口打印。 2. 本实验将任务AppTaskLED和AppTaskMsgPro的优先级都设置为2,同优先级的任务才会用到时间片调度。 3. 时间片调度的使能和每个任务时间片的大小在文件RTX_Conf_CM.c文件里面 #define OS_ROBIN 1 //使能时间片调度 #define OS_ROBINTOUT 5 //设置每个同优先级任务的时间片大小。 4. 各个任务实现的功能如下: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,这里用作LED闪烁。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 RTX配置: RTX配置向导详情如下: Task Configuration Number of concurrent running tasks 允许创建4个任务,实际创建了如下四个任务 AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,这里是用作LED闪烁。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的4个任务都是采用自定义堆栈方式。 Round-Robin Task switching 使能时间片调度 Round-Robin Timeout [ticks] 范围1 – 1000。 设置同优先级任务的时间片是5个系统时间节拍。 RTX任务调试信息: 程序设计: 任务栈大小分配: staticuint64_t AppTaskUserIFStk[512/8]; /* 任务栈 */ staticuint64_t AppTaskLEDStk[256/8]; /* 任务栈 */ staticuint64_t AppTaskMsgProStk[512/8]; /* 任务栈 */ staticuint64_t AppTaskStartStk[512/8]; /* 任务栈 */ 将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。 系统栈大小分配:
|