鸿蒙嵌入式系统开发原理与实战 课件 第4章 任务管理系统_第1页
鸿蒙嵌入式系统开发原理与实战 课件 第4章 任务管理系统_第2页
鸿蒙嵌入式系统开发原理与实战 课件 第4章 任务管理系统_第3页
鸿蒙嵌入式系统开发原理与实战 课件 第4章 任务管理系统_第4页
鸿蒙嵌入式系统开发原理与实战 课件 第4章 任务管理系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章任务管理系统

LiteOS-M的任务管理系统是面向轻量级物联网设备的实时多任务调度核心,支持优先级抢占和时间片轮转,具有低至1KB任务栈的极简设计,适用于Cortex-M等资源受限场景。OpenHarmony轻内核嵌入式开发采用基于任务的调度机制作为核心架构。本章介绍LiteOS-M的任务管理机制、任务管理API(ApplicationProgrammingInterface,应用程序编程接口)以及开发示例。本章内容是教程后续内容的开发基础。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试LiteOS任务管理系统的主要特性

LiteOS任务模块支持多任务并发,通过任务切换与通信机制实现业务逻辑的流程化管理。LiteOS采用抢占式调度策略:高优先级任务可随时打断低优先级任务的执行,后者需等待前者阻塞或结束后方能获得调度;同优先级任务间支持时间片轮转调度。LiteOS任务设有32个固定优先级(0-31),其中0级为最高优先级,31级为最低优先级。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试任务核心概念

名称定义和功能任务ID任务创建时由系统生成的唯一标识符,通过输出参数返回给调用者。任务优先级决定任务调度顺序的层级指标,数值越小优先级越高(0为最高优先级)。任务入口函数任务被调度执行时启动的函数,即任务的逻辑入口。任务控制块(TCB)操作系统管理任务的核心数据结构,包含:栈指针(SP)

、任务状态、优先级、任务ID、任务名、任务栈大小等关键信息。任务栈分配给任务的独立内存区域,用于保存局部变量、函数调用链及任务上下文。任务上下文任务上下文指任务运行时占用的核心资源集合(如寄存器、程序计数器等)。当任务被挂起时,LiteOS自动将其上下文压入任务栈;恢复时从栈中还原上下文状态,而继续执行挂起时被打断的代码。任务切换任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试任务状态

任务状态通常分为以下四种:就绪(Ready):该任务在就绪列表中,只等待CPU运行(Running):该任务正在执行。阻塞(Blocked):该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或等待读写事件等。退出(Dead):任务运行结束,等待系统回收资源。任务状态

就绪态->运行态:任务创建后进入就绪态,发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态,但此刻该任务依旧在就绪列表中。运行态->阻塞态:任务运行因挂起、读信号量等待等,在就绪列表中被删除进入阻塞态。阻塞态->就绪态(阻塞态->运行态):阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务就会被加入就绪列表,从而由阻塞态变成就绪态。此时如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务由就绪态变成运行态。任务状态

就绪态->阻塞态:任务在就绪态被挂起,进而进入阻塞态。运行态->就绪态:有更高优先级任务创建或恢复后,发生任务切换而进入就绪列表。运行态->退出态:任务运行结束,内核自动将此任务删除,此时由运行态变为退出态。阻塞态->退出态:阻塞的任务调用删除接口,任务状态由阻塞态变成退出态。任务状态

LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试任务管理API

LiteOS-M内核提供独立的任务管理能力。为兼容CMSIS-RTOS2标准,系统通过适配层将CMSISAPI调用转换为LiteOS-M内核接口,并执行参数转换(如:优先级映射等关键操作)。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试CMSIS-RTOS2接口

Cortex微控制器软件接口标准(CortexMicrocontrollerSoftwareInterfaceStandard,CMSIS)是由ARM主导,联合编译器厂商与半导体供应商共同制定的Cortex-M系列处理器开发规范。该标准通过提供统一的硬件访问API(涵盖内核及专用外设),显著降低跨芯片平台与工具链的移植成本。CMSIS-RTOS2(CMSIS-RTOSAPIVersion2)是ArmCortex-M处理器的通用RTOS接口规范,为软件组件提供标准化的实时操作系统服务API。CMSIS-RTOS2

提供与底层RTOS内核无关的通用API。用户代码调用此API可便捷实现应用程序跨RTOS平台的迁移;基于CMSIS-RTOS2开发的中间件亦可大幅减少移植工作量。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试CMSIS-RTOS2API

CMSIS-RTOS2的API声明位于kernel/liteos_m/kal/cmsis/cmsis_os2.h中,查看该文件,只有一行:#include"../../../../third_party/cmsis/CMSIS/RTOS2/Include/cmsis_os2.h"所以,API定义实际放在third_party/cmsis/CMSIS/RTOS2/Include/cmsis_os2.h目录,下面对一些常用的API进行介绍。(1)osThreadId_tosThreadNew(osThreadFunc_tfunc,void

*argument,constosThreadAttr_t

*attr)osThreadNew函数的作用是用来创建一个新的任务,该函数拥有三个参数,第一个参数func是任务的运行函数,第二个参数argument是任务运行函数的参数,第三个参数attr是给该任务的属性赋值。osThreadNew函数运行成功后会返回该任务的任务ID,运行失败则返回NULL。CMSIS-RTOS2API

(2)constchar*osThreadGetName(osThreadId_tthread_id)osThreadGetName函数的作用是获取指定任务ID的任务名字,该函数只有一个参数thread_id为要获取任务的ID。osThreadGetName函数运行成功会返回任务的名字,运行失败则返回NULL。(3)osThreadId_tosThreadGetId(void)osThreadGetId函数的作用是获取当前线程的ID,该函数不需要传递参数。osThreadGetId函数运行成功则返回当前任务的任务ID,运行失败则返回NULL。CMSIS-RTOS2API

(4)osStatus_tosThreadSetPriority(osThreadId_tthread_id,osPriority_tpriority)osThreadSetPriority函数的作用是设置任务的优先级,该函数有两个参数,第一个参数thread_id是要设置的任务的任务ID,第二个参数priority为要设置的任务优先级。osThreadSetPriority函数运行结束会返回运行结果,可根据运行结果判断是否设置成功。CMSIS-RTOS2API

注意:此表是CMSIS-RTOS2API的优先级等级,与LiteOS内核的优先级等级不同,LiteOS的优先级为0~31级,其中0级最高,31级最低,按照上表设置priority参数值后,OpenHarmony的CMSIS-RTOS2适配层会将传入的CMSIS优先级值映射为LiteOS-M内核优先级。

枚举值对应数值说明osPriorityNone0无优先级(或优先级未初始化)osPriorityIdle1保留给空闲任务osPriorityLow~osPriorityLow78~15低(low)osPriorityBelowNormal~osPriorityBelowNormal716~23低于正常(belownomal)osPriorityNormal~osPriorityNormal724~31正常(nomal),其中osPriorityNormal为默认优先级osPriorityAboveNormal~osPriorityAboveNormal732~39高于正常(abovenormal)osPriorityHigh~osPriorityHigh740~47高(high)osPriorityRealtime~osPriorityRealtime748~55实时(realtime)osPriorityISR56中断延迟线程保留osPriorityError-1系统无法确定优先级或优先级非法osPriorityReserved0x7FFFFFFF防止枚举类型降尺寸的编译器优化CMSIS-RTOS2API

(5)osPriority_tosThreadGetPriority(osThreadId_tthread_id)osThreadGetPriority函数的作用是获取任务的优先级,该函数只有一个参数thread_id,为要获取任务的任务ID。osThreadGetPriority函数运行成功会返回任务的优先级,运行失败则返回相应的错误代码。CMSIS-RTOS2API

(6)osStatus_tosThreadSuspend(osThreadId_tthread_id)osThreadSuspend函数的作用是挂起指定的任务,该函数只有一个参数thread_id,为要挂起任务的任务ID。osThreadSuspend函数运行结束会返回运行的结果,可根据运行结果判断是否挂起成功。(7)osStatus_tosThreadResume(osThreadId_tthread_id)osThreadResume函数的作用是恢复被挂起的任务,该函数只有一个参数thread_id,为要恢复任务的任务ID。osThreadResume函数运行结束会返回运行的结果,可根据运行结果判断是否恢复成功。CMSIS-RTOS2API

(8)voidosThreadExit(void)osThreadExit函数的作用是终止当前任务的运行。(9)osStatus_tosThreadTerminate(osThreadId_tthread_id)osThreadTerminate函数的作用是终止指定的任务运行,该函数只有一个参数thread_id,为要终止任务的任务ID。osThreadTerminate函数运行结束会返回运行的结果,可根据运行结果判断是否终止成功。LiteOS的任务管理LiteOS任务管理系统的主要特性任务核心概念任务状态任务管理APICMSIS-RTOS2接口CMSIS-RTOS2API3.开发示例——创建两个任务代码设计编译、烧录和调试开发示例——创建两个任务

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论