UCOSII 实验 1 - 任务调度实验报告
UCOSII 实验 1 - 任务调度
一、实验目的
- 学习 UCOSII 的任务调度机制;
- 掌握 UCOSII 任务的创建和删除方法;
- 学习 UCOSII 任务的优先级和时间片轮转调度算法。
二、实验内容
- 建立一个 UCOSII 工程;
- 创建两个任务 Task1 和 Task2,使它们在不同的优先级下运行;
- 使用时间片轮转调度算法,观察两个任务的运行情况;
- 修改任务的优先级,观察两个任务的运行情况。
三、实验步骤
- 建立 UCOSII 工程
打开 IAR Embedded Workbench,选择'New Project',选择'uCOS-II',选择'NXP LPC1768',输入工程名称和路径,点击'OK'按钮,创建工程。
- 创建任务
在 main.c 文件中,添加以下代码:
#include <includes.h>
OS_STK Task1Stk[100];
OS_STK Task2Stk[100];
void Task1(void *pdata) {
while (1) {
printf('Task1 is running.\n');
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
void Task2(void *pdata) {
while (1) {
printf('Task2 is running.\n');
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
int main(void) {
OSInit();
OSTaskCreate(Task1, NULL, &Task1Stk[99], 1);
OSTaskCreate(Task2, NULL, &Task2Stk[99], 2);
OSStart();
return 0;
}
在这段代码中,我们创建了两个任务 Task1 和 Task2,Task1 的优先级为 1,Task2 的优先级为 2。Task1 每秒输出一次'Task1 is running.',Task2 每两秒输出一次'Task2 is running.'。
- 编译和下载程序
编译程序,将程序下载到 LPC1768 开发板中。
- 运行程序
开发板上电后,可以看到 Task1 和 Task2 交替运行,每秒输出一次'Task1 is running.',每两秒输出一次'Task2 is running.'。
- 修改任务优先级
在 main.c 文件中,将 Task1 的优先级修改为 3,在 Task2 的优先级不变。修改后的代码如下:
#include <includes.h>
OS_STK Task1Stk[100];
OS_STK Task2Stk[100];
void Task1(void *pdata) {
while (1) {
printf('Task1 is running.\n');
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
void Task2(void *pdata) {
while (1) {
printf('Task2 is running.\n');
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
int main(void) {
OSInit();
OSTaskCreate(Task1, NULL, &Task1Stk[99], 3);
OSTaskCreate(Task2, NULL, &Task2Stk[99], 2);
OSStart();
return 0;
}
编译程序,将程序下载到 LPC1768 开发板中。
开发板上电后,可以看到 Task2 运行一次后,Task1 接管了 CPU,Task2 暂停了。修改后的程序中,Task1 的优先级比 Task2 高,因此 Task1 会先运行。当 Task1 运行完一次后,Task2 会接管 CPU,Task1 暂停。这样就实现了任务的优先级调度。
四、实验结果
通过该实验,我们成功了解了 UCOSII 的任务调度机制,掌握了 UCOSII 任务的创建和删除方法,学习了 UCOSII 任务的优先级和时间片轮转调度算法。实验结果如下:

五、实验总结
本实验主要是介绍 UCOSII 的任务调度机制,通过实验的过程,我们了解了 UCOSII 的任务创建和删除方法,任务的优先级和时间片轮转调度算法。在任务调度的过程中,我们需要注意任务的优先级,以及时间片的大小,可以通过修改优先级和时间片的大小,来控制任务的运行。在实际应用中,需要根据具体的应用场景,合理设置任务的优先级和时间片大小,以达到最优的任务调度效果。
原文地址: https://www.cveoy.top/t/topic/lVYJ 著作权归作者所有。请勿转载和采集!