李优秀 发表于 2025-2-22 17:30:10

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

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

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



前言

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

https://i-blog.csdnimg.cn/direct/b03a552b21e74e17a823a123a63ed854.png
任务状态转换的关系
https://i-blog.csdnimg.cn/direct/00e053aaf1c74533b1419be78210a28d.png
任务优先级调度表现图
本章代码的运行流程图

https://i-blog.csdnimg.cn/direct/552e3bddadf3454eb6f12fad49024163.png
任务管理流程
1. 干系头文件介绍

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


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

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

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

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

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

void Task2(void)
{
    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秒钟
    }
}
任务 2 会循环挂起和规复任务 1,并在每次利用后延时 5 秒。
5. 任务属性配置

在创建任务之前,我们必要配置任务的属性。以下是任务属性的定义:
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;// 任务的优先级

6. 任务创建

使用 osThreadNew 函数创建任务:
Task1_ID = osThreadNew((osThreadFunc_t)Task1, NULL, &options);      // 创建任务1
if (Task1_ID != NULL) {
    printf("ID = %d, Create Task1_ID is OK!\n", Task1_ID);
}

同样的方式用于创建任务 2
7. 实验步调

   更改BUILD.gn
https://i-blog.csdnimg.cn/direct/e7ccc86bfd944034860380bbaefd2e57.png
把本章节要编译的文件注释
    build项目:
https://i-blog.csdnimg.cn/direct/b73b7acf2e1d4342a90fe9f273e9611b.png#pic_center
选择烧录文件:
https://i-blog.csdnimg.cn/direct/09486edb620441e6a9fe1516b46112ac.png#pic_center
8. 实验结果

https://i-blog.csdnimg.cn/direct/bc721cb918924266a136afaf3724bccb.png#pic_center
任务 2 会循环挂起和规复任务 1,并在每次利用后延时 5 秒。
9.全部代码

#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
osThreadId_t Task1_ID;   //任务1 IDosThreadId_t Task2_ID;   //任务2 ID#define TASK_STACK_SIZE 1024
#define TASK1_DELAY_TIME 1 // s
#define TASK2_DELAY_TIME 5 // s
void Task1(void)
{
    while (1)
    {
      printf("Task 1 小麦好帅\r\n");
      sleep(TASK1_DELAY_TIME);
    }
}
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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙嵌入式 LiteOS 任务管理【1】