其他分享
首页 > 其他分享> > LiteOS设备开发(6)——任务管理

LiteOS设备开发(6)——任务管理

作者:互联网

1、Huawei LiteOS内核简介

2、任务管理简介

3、任务相关概念

4、任务的运作机制

5、操作系统抽象层简介

6、实现任务的创建

7、实验结果与扩展实验
在这里插入图片描述

Huawei LiteOS内核简介

背景介绍

HuaweiLiteOS是轻量级的实时操作系统,是华为IOTOS。HuaweiLiteOSKernel的基本框架图。HuaweiLiteOS基础内核是最精简的HuaweiLiteOS操作系统代码,包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件,可以单独运行。

HuaweiLiteOSKernel的优势

在这里插入图片描述

任务管理简介

基本概念

1、从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。

2、HuaweiLiteOS的任务模块可以给用户提供多个任务,实现了任务之间的切换和通信,帮助用户管理业务程序流程。这样用户可以将更多的精力投入到业务功能的实现中。

3、HuaweiLiteOS是一个支持多任务的操作系统。在HuaweiLiteOS中,一个任务表示一个线程。

4、HuaweiLiteOS中的任务是抢占式调度机制,同时支持时间片轮转调度方式。

5、高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。

6、HuaweiLiteOS的任务一共有32个优先级(0-31),最高优先级为0,最低优先级为31

任务状态

任务状态通常分为以下四种:

在这里插入图片描述
任务状态迁移说明

任务管理简介

运作机制

1、HuaweiLiteOS任务管理模块提供任务创建、任务删除、任务延时、任务挂起和任务恢复、更改任务优先级、锁任务调度和解锁任务调度、根据任务控制块查询任务ID、根据ID查询任务控制块信息功能。

2、在任务模块初始化时,系统会先申请任务控制块需要的内存空间,如果系统可用的内存空间小于其所需要的内存空间,任务模块就会初始化失败。如果任务初始化成功,则系统对任务控制块内容进行初始化。

3、用户创建任务时,系统会将任务栈进行初始化,预置上下文。此外,系统还会将“任务入口函数”地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。

操作系统抽象层简介

概述

为了让SDK能够更广泛的应用,所以提出了OSAL。SDK内部集成的组件以及SDK本身使用的OS功能,都调用的是OSAL接口,因为SDK要运行起来,必须注册相关的OS进OSAL才行。

osal使用说明

osal的api接口声明在<osal.h>中,使用相关的接口需要包含该头文件,关于函数的详细参数请参考该头文件的声明。目前已经适配了LiteOS/LINUX/MACOS等,SDK可以在这些系统下运行。如果你需要在非上述系统下运行SDK,您需要将新系统适配进OSAL,保障SDK需要的OS功能正常。

适配OSAL

您需要在您的系统初始化完毕之后,调用osal_install接口将您的系统注册进SDK即可。使用该接口需要包含<osal_imp.h>,相关的宏定义在<osal_type.h>中。详情参考该头文件。

在这里插入图片描述

创建任务:void*osal_task_create(constchar*name,int(*task_entry)(void*args),void*args,intstack_size,void*stack,intprior);
删除某个任务:intosal_task_kill(void*task);
任务退出:voidosal_task_exit();
任务休眠:voidosal_task_sleep(intms);

创建任务接口详解:void*osal_task_create(constchar*name,int(*task_entry)(void*args),void*args,intstack_size,void*stack,intprior);

在这里插入图片描述

实现任务创建

在这里插入图片描述

实验结果与扩展实验

#include <osal.h>

#define USER_TASK1_PRI  12
#define USER_TASK2_PRI  11

uint32_t user_task1_id = 0;
uint32_t user_task2_id = 0;

static int user_task1_entry()
{
    int n = 0;

    for(n = 0; n < 5; n++)
    {
        printf("task1: my task id is %ld, n = %d!\r\n", user_task1_id, n++);
        osal_task_sleep(2*1000);
    
    }

    printf("user task 1 exit!\r\n");
    return 0;
}
static int user_task2_entry()
{
    while (1)
    {
        printf("task 2: my task id is %ld!\r\n", user_task2_id);
        osal_task_sleep(2*1000);
    }
}

int standard_app_demo_main()
{
    user_task1_id = osal_task_create("user_task1",user_task1_entry,NULL,0x400,NULL,USER_TASK1_PRI);
    user_task2_id = osal_task_create("user_task2",user_task2_entry,NULL,0x400,NULL,USER_TASK2_PRI);

    return 0;
}

系统启动后,串口shell的优先级为10,最先打印shell信息,接下来task1先创建,但是优先级较低,所以后创建的task2抢占执行,task2打印后主动挂起2s,这时task1开始执行,依次执行5次后task1结束,task2一直保持运行

标签:task,优先级,任务,user,LiteOS,就绪,运行,设备
来源: https://blog.csdn.net/qq_46344220/article/details/122321659