鸿蒙嵌入式 LiteOS 任务管理【1】

打印 上一主题 下一主题

主题 640|帖子 640|积分 1920

第二章:鸿蒙嵌入式 LiteOS 任务管理

本章节开始用Hi3861鸿蒙开发板举行实验


  

前言

在本章中,我们将深入探讨鸿蒙嵌入式 LiteOS 中的任务管理机制。通过示例代码,我们将相识怎样创建、管理和调度任务,以实现多任务处置处罚。关于LiteOS的介绍在前一章有讲解,可以往前看FreeRTOS 与 LiteOS 的区别

任务调度关系图


任务状态转换的关系

任务优先级调度表现图
本章代码的运行流程图


任务管理流程
1. 干系头文件介绍

在使用 LiteOS 举行任务管理时,首先必要包罗一些必要的头文件:
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
复制代码


  • <stdio.h>: 提供尺度输入输出功能。
  • <unistd.h>: 提供 POSIX 尺度库的功能,如 sleep 函数。
  • “ohos_init.h”: 鸿蒙利用系统的初始化头文件。
  • “cmsis_os2.h”: CMSIS-RTOS API 的头文件,提供实时利用系统的接口。
2. 任务 ID 定义

在 LiteOS 中,每个任务都有一个唯一的标识符。我们可以通过以下方式定义任务 ID:
  1. osThreadId_t Task1_ID;   // 任务1 ID
  2. osThreadId_t Task2_ID;   // 任务2 ID
复制代码
3. 常量定义

为了方便管理任务的栈大小和延时,我们定义了一些常量:
  1. #define TASK_STACK_SIZE 1024
  2. #define TASK1_DELAY_TIME 1 // s
  3. #define TASK2_DELAY_TIME 5 // s
复制代码
4. 任务函数实现

接下来,我们定义两个任务函数 Task1 和 Task2。
4.1 任务1

任务 1 的实现如下:
  1. void Task1(void)
  2. {
  3.     while (1)
  4.     {
  5.         printf("Task 1 小麦好帅\r\n");
  6.         sleep(TASK1_DELAY_TIME);
  7.     }
  8. }
复制代码
该任务会循环输出 “Task 1 小麦好帅”,并在每次循环后延时 1 秒
4.2 任务2

  1. void Task2(void)
  2. {
  3.     while (1) {
  4.         printf("Task 2, 开始挂起任务1\r\n");
  5.         osThreadSuspend(Task1_ID);      // 挂起任务1
  6.         sleep(TASK2_DELAY_TIME);        // 延时5秒钟
  7.         printf("Task 2, 开始恢复任务1\r\n");
  8.         osThreadResume(Task1_ID);      // 恢复任务1
  9.         sleep(TASK2_DELAY_TIME);       // 延时5秒钟
  10.     }
  11. }
复制代码
任务 2 会循环挂起和规复任务 1,并在每次利用后延时 5 秒。
5. 任务属性配置

在创建任务之前,我们必要配置任务的属性。以下是任务属性的定义:
  1. osThreadAttr_t options;
  2. options.name = "Task1";       // 任务的名字
  3. options.attr_bits = 0;      // 属性位
  4. options.cb_mem = NULL;      // 堆空间地址
  5. options.cb_size = 0;        // 堆空间大小
  6. options.stack_mem = NULL;   // 栈空间地址
  7. options.stack_size = TASK_STACK_SIZE;  // 栈空间大小 单位:字节
  8. options.priority = osPriorityNormal;  // 任务的优先级
复制代码
6. 任务创建

使用 osThreadNew 函数创建任务:
  1. Task1_ID = osThreadNew((osThreadFunc_t)Task1, NULL, &options);      // 创建任务1
  2. if (Task1_ID != NULL) {
  3.     printf("ID = %d, Create Task1_ID is OK!\n", Task1_ID);
  4. }
复制代码
同样的方式用于创建任务 2
7. 实验步调

   更改BUILD.gn

把本章节要编译的文件注释
    build项目:

选择烧录文件:

  8. 实验结果


任务 2 会循环挂起和规复任务 1,并在每次利用后延时 5 秒。
9.全部代码

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. osThreadId_t Task1_ID;   //  任务1 IDosThreadId_t Task2_ID;   //  任务2 ID#define TASK_STACK_SIZE 1024
  6. #define TASK1_DELAY_TIME 1 // s
  7. #define TASK2_DELAY_TIME 5 // s
  8. void Task1(void)
  9. {
  10.     while (1)
  11.     {
  12.         printf("Task 1 小麦好帅\r\n");
  13.         sleep(TASK1_DELAY_TIME);
  14.     }
  15. }
  16. void Task2(void){    uint8_t num = 0;    while (1) {        printf("Task 2, 开始挂起任务1\r\n");        osThreadSuspend(Task1_ID);      // 挂起任务1        sleep(TASK2_DELAY_TIME);        // 延时5秒钟        printf("Task 2, 开始规复任务1\r\n");        osThreadResume(Task1_ID);      // 规复任务1        sleep(TASK2_DELAY_TIME);       // 延时5秒钟    }}static void template_demo(void){    printf("LiteOS任务管理\r\n");    osThreadAttr_t options;    options.name = "Task1";       // 任务的名字    options.attr_bits = 0;      // 属性位    options.cb_mem = NULL;      // 堆空间地址    options.cb_size = 0;        // 堆空间大小    options.stack_mem = NULL;   // 栈空间地址    options.stack_size = TASK_STACK_SIZE;  // 栈空间大小 单位:字节    options.priority = osPriorityNormal;  // 任务的优先级    Task1_ID = osThreadNew((osThreadFunc_t)Task1, NULL, &options);      // 创建任务1    if (Task1_ID != NULL) {        printf("ID = %d, Create Task1_ID is OK!\n", Task1_ID);    }    options.name = "Task2";    options.priority = osPriorityNormal1;    Task2_ID = osThreadNew((osThreadFunc_t)Task2, NULL, &options);      // 创建任务2    if (Task2_ID != NULL) {        printf("ID = %d, Create Task2_ID is OK!\n", Task2_ID);    }}SYS_RUN(template_demo);
复制代码

总结

本章介绍了鸿蒙嵌入式 LiteOS 中的任务管理机制,包括任务的创建、挂起、规复和属性配置等。通过这些知识点,读者可以明白 LiteOS 中的任务调度机制,并能够有用地使用这些 API 来实现多任务处置处罚,本章节参考了普中的鸿蒙教程!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表