赞
踩
1、Huawei LiteOS内核简介
2、任务管理简介
3、任务相关概念
4、任务的运作机制
5、操作系统抽象层简介
6、实现任务的创建
7、实验结果与扩展实验
背景介绍
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一直保持运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。