UCOSII 实验 1 - 任务调度

一、实验目的

  1. 学习 UCOSII 的任务调度机制;
  2. 掌握 UCOSII 任务的创建和删除方法;
  3. 学习 UCOSII 任务的优先级和时间片轮转调度算法。

二、实验内容

  1. 建立一个 UCOSII 工程;
  2. 创建两个任务 Task1 和 Task2,使它们在不同的优先级下运行;
  3. 使用时间片轮转调度算法,观察两个任务的运行情况;
  4. 修改任务的优先级,观察两个任务的运行情况。

三、实验步骤

  1. 建立 UCOSII 工程

打开 IAR Embedded Workbench,选择'New Project',选择'uCOS-II',选择'NXP LPC1768',输入工程名称和路径,点击'OK'按钮,创建工程。

  1. 创建任务

在 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.'。

  1. 编译和下载程序

编译程序,将程序下载到 LPC1768 开发板中。

  1. 运行程序

开发板上电后,可以看到 Task1 和 Task2 交替运行,每秒输出一次'Task1 is running.',每两秒输出一次'Task2 is running.'。

  1. 修改任务优先级

在 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实验1-任务调度

五、实验总结

本实验主要是介绍 UCOSII 的任务调度机制,通过实验的过程,我们了解了 UCOSII 的任务创建和删除方法,任务的优先级和时间片轮转调度算法。在任务调度的过程中,我们需要注意任务的优先级,以及时间片的大小,可以通过修改优先级和时间片的大小,来控制任务的运行。在实际应用中,需要根据具体的应用场景,合理设置任务的优先级和时间片大小,以达到最优的任务调度效果。

UCOSII 实验 1 - 任务调度实验报告

原文地址: https://www.cveoy.top/t/topic/lVYJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录