版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章嵌入式系统概论嵌入式系统是指带有微处理器的专用软硬件系统。以应用为中心,以微处理器为基础,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。本章主要介绍嵌入式系统的定位和定义,设计需求,分类及基本结构。学习完本课程后,您将能够:掌握嵌入式系统定位和定义;掌握嵌入式系统的设计需求;了解嵌入式系统的基本结构。嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的分类嵌入式系统的基本组成嵌入式系统应用场景嵌入式系统则已经成为人们生活中必不可少的组成部分。主要应用领域家用电器工业仪器仪表导航控制交通运输医疗商业和金融业通信设备建筑办公设备采样控制系统自动控制系统是工业控制领域中最典型的嵌入式系统。智能机器人智能机器人有相当发达的“大脑”,在脑中起作用的是中央处理器。它至少要具备以下三个要素:一是感觉要素,用来认识周围环境状态;二是运动要素,对外界做出反应性动作;三是思考要素,根据感觉要素所得到的信息,思考出采用什么样的动作。主要技术包括:多传感器信息融合、导航与定位、机器人视觉、智能控制和人机接口技术等。物联网系统通过射频识别(RFID)等信息传感设备,按约定的协议,将任何物品与互联网相连接,进行信息交换和通讯,以实现智能化识别、定位、追踪、监控和管理的一种网络技术。万物感知万物互联万物智能将数据变成Online,使能智能化基于大数据和人工智能的应用感知物理世界,变成数字信号数字孪生数字化生存温度、空间、触觉嗅觉、听觉、视觉宽联接、广联接多联接、深联接嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的分类嵌入式系统的基本组成嵌入式系统定义嵌入式系统(Embeddedsystem),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”。其核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是暂时不变的;所以经常称为“固件”。嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的分类嵌入式系统的基本组成嵌入式软件的设计需求嵌入式系统是面向用户、面向产品、面向应用手机PadPC设备数操作系统内核小,资源少专用性强系统稳定持久软硬件结合紧密专门的开发环境和开发工具软件固态化存储实时性要求高特点嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的分类嵌入式系统的基本组成万物互联的智能设备时代,百家争鸣较强处理器,复杂功能操作系统简单嵌入式微处理器,简单操作系统工业可编程控制器、硬件简单,无系统第一阶段第二阶段嵌入式系统的发展历程第三阶段第四阶段嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的基本组成嵌入式系统的分类嵌入式系统的基本组成嵌入式系统硬件软件硬件组成
硬件中断控制器定时器外设器件图形控制器串口输入输出接口/驱动电路系统电路存储器软件组成软件应用软件驱动软件开发/调试软件嵌入式操作系统嵌入式系统的应用场景嵌入式系统的定义嵌入式系统的设计需求嵌入式系统的发展历程嵌入式系统的基本组成嵌入式系统的分类嵌入式系统软件分类软件μC/OS-Ⅱ,VxWorksFreeRTOS、μCLinux、RTXAndroid、iOS、OpenHarmony按响应快慢分类按实时性实时系统非实时系统谢谢大家第二章嵌入式微处理器及外围电路嵌入式硬件系统是以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和外围设备组成。嵌入式微处理器拥有丰富的片内资源,同时提供了扩展接口,还可以根据应用的需要,进一步扩展外部接口,实现硬件的剪裁。本章主要介绍嵌入式微处理器的分类,RISC-V处理器架构特性、指令集及外围电路。学习完本课程后,您将能够:掌握嵌入式微处理器的特点和分类;掌握RSIC-V嵌入式微处理器架构和指令集;了解Hi3861芯片架构及组成。嵌入式微处理器概述几种典型的嵌入式微处理器架构RISC-V嵌入式微处理器架构RISC-V指令系统基于RISC-V的Hi3861芯片嵌入式微处理器概述嵌入式微处理器是各种面向用户、面向产品、面向应用的嵌入式系统的核心部件,是控制系统运行的硬件单元。嵌入式微处理器种类非常繁多,从4位、8位、16位到32位、64位都有;内存寻址空间也从几KB发展到上GB;处理速度从几MHz到上GHz;芯片引脚数目从几十上升到几百。嵌入式微处理器一般具备下述特点:体积小、集成度高、低功耗、价格较低。对实时多任务有很强的支持能力。能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。具有很强的功能保护功能。由于嵌入式系统的软件结构己模块化,为避免在软件模块之间出现错误后的交叉影响,需要设计强大的存储区保护功能,同时也有利于软件诊断。可扩展的微处理器结构。能迅速地开发出满足各种应用的高性能的嵌入式系统。嵌入式微处理器体系架构目前,嵌入式微处理器体系结构采用冯·诺依曼结构或哈佛结构;指令系统采用精简指令集系统(RISC)或复杂指令集系统(CISC)。此外,嵌入式微处理器也采用了通用微处理器的先进技术来提高性能。哈佛结构的计算机由CPU、程序存储器和数据存储器组成,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽,使数据的移动和交换更加方便,尤其提供了较高的数字信号处理性能。DSP处理器采用哈佛结构,适合于执行DSP算法,编译效率较高,指令执行速度高。嵌入式微处理器架构嵌入式系统的分类嵌入式微处理器(MPU)-PowerPC、MIPS、ARM、RISC嵌入式微控制器(MCU)-8051嵌入式DSP处理器(DSP)-TMS320C2000/C5000嵌入式片上系统(SystemOnChip)-Hi3861硬件嵌入式微处理器
嵌入式微处理器的基础是通用计算机中的CPU。在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。但在电路板上必须配备ROM、RAM、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。嵌入式处理器目前主要有PowerPC、MIPS、ARM系列等。嵌入式微控制器
嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A、FlashRAM、E2PROM等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流,占整个嵌入式市场份额的70%。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。典型产品是80C51。
DSP处理器采用哈佛结构,适合于执行DSP算法,编译效率较高,指令执行速度高。在数字滤波、FFT、谱分析等方面DSP算法正在大量进入嵌入式领域,DSP应用正在从通用单片机中以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。嵌入式DSP处理器两个发展来源一是DSP处理器经过单片化、EMC改造、增加片上外设成为嵌入式DSP处理器,TI的TMS320C2000/C5000等属于此范畴;二是在通用单片机或嵌入式片上系(SystemOnChip)SOC中增加DSP协处理器,例如达芬奇是一款基于高性能TMS320C64x™系列器件的SoC。
数字信号处理器嵌入式片上系统(SystemOnChip)随着EDI的推广和VLSI设计的普及化,及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是SystemOnChip(SOC)。各种通用处理器内核将作为SOC设计公司的标准库,和许多其它嵌入式系统外设一样,成为VLSI设计中一种标准的器件。用标准的VHDL等语言描述,存储在器件库中。用户只需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。嵌入式微处理器概述几种典型的嵌入式微处理器架构RISC-V嵌入式微处理器架构RISC-V指令系统基于RISC-V的Hi3861芯片几种典型的微处理器架构-PowerPCPowerPC(Performance
Optimization
With
Enhanced
RISC–
Performance
Computing)是一种精简指令集(RISC)架构的中央处理器(CPU),它是Apple、IBM、Motorola组成的AIM联盟所发展出的微处理器架构。PowerPC处理器有广泛的实现范围,包括从诸如Power4那样的高端服务器CPU到嵌入式CPU市场。PowerPC处理器有非常强的嵌入式表现,因为它具有优异的性能、较低的能量损耗以及较低的散热量。PowerPC处理器有32个(32位或64位)GPR(通用寄存器)以及诸如PC(程序计数器,)、LR(链接寄存器)、CR(条件寄存器)等各种其它寄存器。所有PowerPC(包括64位实现)都使用定长的32位指令。MIPS架构MIPS架构(Microprocessorwithoutinterlockedpipedstagesarchitecture),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。MIPS32架构基于一种固定长度的定期编码指令集,并采用导入/存储(load/store)数据模型。经改进,这种架构可支持高级语言的优化执行。其算术和逻辑运算采用三个操作数的形式,允许编译器优化复杂的表达式。此外,它还带有32个通用寄存器,让编译器能够通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。ARM架构ARM架构,曾称进阶精简指令集机器(Advanced
RISC
Machine),是一个32位精简指令集(RISC)处理器架构。ARM家族占比所有32位嵌入式处理器的75%,成为占全世界最多数的32位架构。ARM处理器广泛使用在嵌入式系统设计,低耗电节能,非常适用移动通讯领域。消费性电子产品,电脑外设,等军用设施。支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;大量使用寄存器,指令执行速度更快;大多数数据操作都在寄存器中完成;寻址方式灵活简单,执行效率高;指令长度固定。嵌入式微处理器概述几种典型的嵌入式微处理器架构RISC-V嵌入式微处理器架构RISC-V指令系统基于RISC-V的Hi3861芯片选择合适的嵌入式处理器选择处理器必须考虑的因素指令集操作数的最大宽度处理速度和时钟频率对时间要求严格的复杂算法的解决能力选择合适的嵌入式处理器目前,许多嵌入式系统都采用32位的RISC-V嵌入式微处理器,因为它与传统的基于单片机的控制系统和基于PC的控制方式相比,有以下优点。1)处理能力方面主频从30MHz到200MHz以上,处理能力大大超过单片机系统,接近PC机的水平,但体积更小。2)实时性方面可内嵌实时操作系统(RTOS),能保证控制系统的实时性。3)人机交互方面支持大屏幕的液晶显示器,提供功能强大的图形用户界面。4)系统升级方面可为控制系统专门设计,其功能专一,成本较低,而且开放的用户程序接口(API)保证了系统能够快速升级和更新。Hi3861体系结构ITCM(InstructionTightlyCoupledMemory,指令紧耦合存储器)和DTCM(DataTightlyCoupledMemory,数据紧耦合存储器)为紧耦合存储器,可以存放指令和数据。设计一个最简单的嵌入式系统主要器件:一个单片机、一个ROM和一个RAM。器件主要性能指标:3个元件都有8条数据信号线(D0-D7);微处理器有16条地址线(A0-A15);ROM和RAM都是32K的。总线的种类总线可分为片外总线(如ISA总线、PCI总线等)和片内总线(如AMBA、AVALON等)我们主要关心的是片外总线。片外总线的功能:主要实现模块之间、设备之间、系统之间的互连。常用的片外总线在嵌入式系统中,常用的片外总线有:CPCI总线PC104总线CAN总线SPI总线I2C总线微处理器的总线地址总线数据总线控制总线总线上的其它硬件设备在嵌入式系统中,CPU可能还要控制和管理外部设备或与外部设备进行信息交换,为解决这类问题,通常是给每个硬件设备分配一个地址空间,而所分配的地址空间是内存所没有用到的。这种方案称为内存映射。Hi3861指令流水线Hi3861内存映射
中断中断程序:微处理器的特点之一是可以被中断,所谓中断是指CPU可以停止它正在执行的程序转而去执行其它程序,即中断程序。中断请求:通知微处理器去运行中断程序的信号称为中断请求(IRQ)。输入可以是边沿触发,也可以是电平触发。中断通用异步收发器和RS-232通用异步收发器(UART)是最常用的设备之一,其目的是通过串行接口转换数据。常用的串行接口标准是RS-232接口,该接口在计算机中的应用也是非常广泛的。通用异步收发器和RS-232右图是一个典型的UART,图的左边是地址线、数据线中断线、读写线和片选线。从微处理器的角度来看,UART等效于一个内存,只要在总线上设置符合时序的信号顺序,微处理器就可以与UART发送或接收数据了。UART接口芯片需要一个时钟,这个时钟电路可以与微处理器的时钟分开,也可以共用,但必须是通用的位速率的整数倍,如14.7456MHz,它是28800bit/s的偶数倍。通用异步收发器和RS-232图的右边分别是位发送线(TXD)、位接收线(RXD)和一些控制线,这些控制线是RS-232中规定的标准控制线,如:发送请求(RTS)、发送终止(CTS)等。驱动器/接收器的作用:电平转换。因为UART与RS-232不一致,所以,需要有一个电平转换电路,通常是一个芯片,如MAX232。看门狗定时器看门狗定时器是一个定时器电路,一般有一个输入,叫喂狗(kickingthedog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机。ADCADC,其全称是Analog-to-DigitalConverter,模拟数字转换器。它是连接模拟世界与数字世界的桥梁。通常来说,自然界产生的信号,其实都是模拟信号,像我们说话的声音,我们看到的图像,我们感受到的温度等等。但是这些模拟信号在电子产品中最终都得以数字信号的方式进行处理,存储或者传输,那如何把模拟信号转换成数字信号呢?就需要一个转换器,也就是这里的ADC。ADC芯片主要看两个基本指标,一个是速度(Speed),一个是精度(Resolution)。速度代表着ADC可以转换多大带宽—Bandwidth的模拟信号,带宽对应的就是模拟信号频谱中的最大频率。精度就是衡量转换出来的数字信号与原来的模拟信号之前的差距。与微处理器集成的元器件I/O引脚:微处理器提供有很多I/O引脚,可以通过软件编程直接把这些引脚设置为高电位(1)或低电位(0),用于数据输出或写入寄存器;也可以设置为输入脚以便软件可以读取寄存器或其它设备输出的数据。I/O引脚有很多应用。与微处理器集成的元器件I/O引脚的应用
驱动发光二极管;重置看门狗定时器;读取一个或两个引脚EEROM;如果有多个RAM,超过了处理器能够分配地址的范围,支持从一个RAM切换到另一个RAM。嵌入式微处理器概述几种典型的嵌入式微处理器架构RISC-V嵌入式微处理器架构RISC-V指令系统基于RISC-V的Hi3861芯片RISC-V指令集架构BerkeleyWorld20102011201220132014201520162017201820192020诞生于加州大学伯克利,由RISC指令集鼻祖DavidPatterson主导开发RISC-V基金会成立,发展至今有来自全球33个国家超过435个成员关键标准定稿:RV32IMFDQCRV64IMFDQC特权架构MSU1.11在学校内进行初期开发投片试验,不断推动生态发展,包括开发测试工具、OS商业公司积极参与,密集推出发布RISC-VCPUIP核和SoC芯片应用到AI、IoT等多个场景领域,发展势头强劲RISC-V特权架构特权模式:RISC-V定义了3个特权等级,特权等级从低到高分别是User、Supervisor、Machine,简称U/S/Mmode;特权等级越高则有更多的资源访问权限,以及执行系统控制指令的能力。CSR寄存器:ControlandStatusRegister,即控制与状态寄存器,用于对CPU本身进行功能配置以及状态获取;通过特殊的CSR指令进行访问和修改,具有单独的内部地址区间。PMP物理内存保护:通过CSR配置将访存地址区间划分为最多64个区域,并设置每个区域的访问权限,保障关键敏感数据的隐秘和正确性。中断控制:提供PLIC的中断管理平台架构,规范出常用的4类标准中断(定时器、软件、外部、不可屏蔽);支持中断向量表和统一入口两种中断处理函数调用方式;提供WFI(WaitForInterrupt)低功耗指令。调试方案:支持外部接入式和自调试方式两种调试方案。RISC-V指令集分组基本指令集:RV32I/RV64I,32bit/64bit整型指令集,所有RISC-VCPU必须实现基本指令集中的一个,在此基础上定制化集成不同的扩展指令集。扩展指令集:M:整型乘除法指令集A:原子操作指令集F:单精度浮点指令集D:双精度浮点指令集Q:四精度浮点指令集C:压缩指令集B:位运算指令集P:SIMD指令集V:向量指令集…RISC-VRV32I编程模型RegisterNameUseSaverx0zeroTheconstantvalue0无x1raReturnaddressCallerx2spStackpointerCalleex3gpGlobalpointer--x4tpThreadpointer--x5-x7t0-t2TemporariesCallerx8s0/fpSavedregister/framepointerCalleex9s1SavedregisterCalleex10-x11a0-a1Functionarguments/returnvalueCallerx12-x17a2-a7FunctionargumentsCallerx18-x27s2-s11SavedregistersCalleex28-x31t3-t6TemporariesCallerPC--ProgramCounter--RISC-VRV32I介绍整型运算指令:ADDI:rs1加有符号立即数SLTI/SLTIU:判断rs1是否小于立即数ANDI/ORI/XORI:rs1与立即数进行逻辑与、或、异或运算SLLI/SRLI/SRAI:以立即数为偏移对rs1进行逻辑左移,逻辑右移和算术右移操作LUI:将立即数高位赋值给rdLUIPC:将立即数高位与PC值相加赋值给rdADD:rs1加rs2SUB:rs1减rs2SLT/SLTU:判断rs1是否小于rs2AND/OR/XOR:rs1与rs2的逻辑与、或、异或操作SLL/SRL/SRA:以rs2值为偏移对rs1进行逻辑左移,逻辑右移和算术右移操作跳转指令:JAL:跳转到相对PC偏移一个立即数值的地址,并将下一条指令的地址(PC+4)保存到rdJALR:跳转到相对rs1偏移一个立即数值的地址,并将下一条指令的地址(PC+4)保存到rdBEQ/BNE/BLT/BLTU/BGE/BGEU:比较rs1和rs2,如果比较结果满足要求则跳转到相对PC偏移一个立即数值的地址加载存储指令:LB/LH/LW:从相对rs1偏移一个立即数值的地址加载一个Byte、halfword、word有符号数据到rdLBU/LHU:从相对rs1偏移一个立即数值的地址加载一个Byte、halfword、word无符号数据到rdSB/SH/SW:将rs2中一个Byte、halfword、word的数据存储到从相对rs1偏移一个立即数值的地址示例示例示例示例示例示例嵌入式微处理器概述几种典型的嵌入式微处理器架构RISC-V嵌入式微处理器架构RISC-V指令系统基于RISC-V的Hi3861芯片PMU:
电源管理单元,给内部各个子系统提供电源,同时包括上电检测、上电复位、过流过压保护等功能。CMU:时钟管理单元,给内部各个子系统提供时钟。AlwaysOnSystem:低功耗管理,系统控制等。WLANSoCsystem:完成WLANFirmware软件和硬件处理。Hi3861芯片主要包括4个模块:PMU、CMU、AlwaysOnSystem和WLANSoCsystemHi3861芯片功能框图SDIO:SDIO是SD型的扩展接口,除了可以接SD卡外,还可以接支持SDIO接口的设备。UART:
UART是一种通用串行数据总线,用于异步通信,把并行输入信号转成串行输出信号。该总线双向通信,可以实现全双工传输和接收。SPI:
SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。I2C:
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。GPIO:
GPIO,通用输入输出简称,在嵌入式系统中,用于控制许多结构简单的外部设备或者电路。天线SDIOUARTWiFiSoC芯片CPUWiFiRAMFLASHSPIGPIOIC2Hi3861芯片外设接口UART接口Hi3861芯片提供3个UART单元,支持2线模式。UART具有以下功能特点:支持64×8bit的发送FIFO和64×12bit的接收FIFO(FirstInFirstOut)。支持数据位和停止位的位宽可编程:支持奇、偶校验方式或无校验。支持传输速率可编程、支持整数小数分频。支持4种类型的FIFO中断,分别是接收中断、发送中断、错误中断和接收超时中断。支持通过编程禁止UART模块或UART发送/接收功能以降低功耗。UART0不支持硬件流控;UART1、UART2支持硬件流控。UART寄存器地址UART寄存器地址如表2-13所示。在表中显示的是UART关键控制寄存器如数据、状态和发送接收速率寄存器(UART0基址是0x4000_8000、UART1基址是0x4000_9000、UATR2基址是0x4000_A000)。偏移地址名称描述0x000UART_DRUART数据寄存器0x004UART_RSR接收状态/错误清除寄存器0x018UART_FRUART标志寄存器0x024UART_IBRD整数波特率寄存器0x028UART_FBRD小数波特率寄存器0x02CUART_LCR_H传输模式控制寄存器0x030UART_CRUART控制寄存器UART接口访问hi_voidusr_uart_io_config(){/*如下IO复用配置,也可集中在SDK中的app_io_init函数中进行配置*/hi_io_set_func(HI_IO_NAME_GPIO_11,HI_IO_FUNC_GPIO_11_UART2_TXD);/*uart2tx*/hi_io_set_func(HI_IO_NAME_GPIO_12,HI_IO_FUNC_GPIO_12_UART2_RXD);/*uart2rx*/}hi_u32usr_uart_io_config(){hi_u32ret;statichi_uart_attributeg_demo_uart_cfg={115200,8,1,2,0};ret=hi_uart_init(HI_UART_IDX_2,&g_demo_uart_cfg,HI_NULL);if(ret!=HI_ERR_SUCCESS){printf("uartinitfail\r\n");}returnret;}hi_voidusr_uart_read_data(){hi_s32len;hi_u8ch[64]={0};len=hi_uart_read(HI_UART_IDX_2,ch,64);if(len>0){/*processdata*/}}hi_u32usr_uart_write_data(hi_u8*data,hi_u32data_len){hi_u32offset=0;hi_s32len=0;while(offset<data_len){len=hi_uart_write(HI_UART_IDX_2,data+offset(hi_u32)(data_len-offset));if((len<0)||(0==len)){return-1;}offset+=(hi_32)len;if(offset>=data_len){break;}}returnHI_ERR_SUCCESS}WiFi模组介绍模组器件介绍:1、WiFi芯片:Hi3861L、Hi3861、Hi38812、40M晶振:主时钟,提供芯片工作的时钟信号3、天线:电信号和无线信号的转换,将传输线上的导行波变换成电磁波,或者反之4、电感:降压,稳定电流5、32K晶振:仅Hi3861L需要,用于待机时,低功耗场景使用模组两侧的邮票孔为与外部的物理接口,包括电源、地、SDIO、UART、GPIO等。1)Hi3861L模组2)Hi3861模组3)Hi3881模组感谢大家的聆听第三章嵌入式软件体系结构在决定嵌入式系统结构的众多因素中,最重要的是对系统响应的控制程度。而获得良好响应的困难程度,不仅取决于对绝对响应时间的要求,而且取决于所使用的微处理器的速度和其它的处理需求。本章主要介绍影响嵌入式系统响应时间的嵌入式体系结构的特性。学习完本课程后,您将能够:掌握嵌入式软件体系结构及分类嵌入式软件体系结构基本概念软件体系结构的作用轮询系统前后台系统实时多任务系统嵌入式软件体系结构概念IEEE软件工程标准词汇中定义:体系结构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。一般来说,对于一个功能有限、响应时间要求很低的系统,可以用一种很简单的结构来实现;而对于一个能对多种不同的事件做出快速响应、并且对截止时间和优先级具有各种不同的处理要求的系统,则要采用一种更加复杂的结构。常见的软件体系结构常见嵌入式软件体系结构带有中断的轮转结构(round-robinwithinterruptsarchitecture)实时操作系统结构(real-timeoperatingsystemarchitecture)轮转结构(round-robinarchitecture)嵌入式软件体系结构基本概念软件体系结构的作用轮询系统前后台系统实时多任务系统软件体系结构的作用从软件开发过程看,所有被实现的软件系统都有一个软件结构。软件体系结构在软件开发中发挥着重要作用。在软件开发中,软件工程对软件体系结构设计支持的需求越来越迫切。第一,通过认识和理解体系结构可以使系统的高层次关系得到全面表达和深刻理解;第二,获得正确的体系结构常常是软件系统设计成功的关键,否则可能导致灾难性的结果;第三,全面深入地理解软件体系结构,才可以使设计者在复杂的问题面前出正确的抉择;第四,系统体系结构对于复杂系统的高层次性能的分析是至关重要的。如果原始的设计结构能够得到清楚和明确的表达,特别是高层次的表达,可大大减少软件维护相关的开销。嵌入式软件体系结构基本概念软件体系结构的作用轮转结构前后台结构实时多任务系统结构轮转结构轮转系统也称为简单循环控制系统,是一种最简单的嵌入式实时软件体系结构模型。在单个微处理器的情况下,系统功能由多个函数(子程序)完成,每个函数负责该系统的软件或硬件的一部分;这些函数被循环调用执行,即它们按照一定的执行顺序构成一定单向的有序环(称为轮询环),依次占用CPU:每个函数访问完成之后,才将CPU移交给下一个函数使用。对于某个函数而言,当它提出执行请求后,必须等到它被CPU接管后才能执行。轮转工作原理按照程序结构说明,基本轮询系统具有下述工作特点:系统完成一个轮询的时间取决于轮询环中需要执行的函数个数(即满足执行条件的函数个数)。此外,轮询的次序是静态固定的,在运行时是不能进行动态调整的。轮转结构的实例intmain(){while(true){If(I/O设备A需要服务)
处理I/O设备A的数据;If(I/O设备B需要服务)
处理I/O设备B的数据;…If(I/O设备Z需要服务)
处理I/O设备Z的数据;}return0;}轮转结构的特点1、优点程序简单执行效率高2、缺点安全性较差不能及时处理紧急事务3、最坏响应时间
除该设备本身外,一次循环的最大时间正因为此,这种结构应用非常普遍,主要应用在一些简单的系统中,如数字万用表。为此,它不能胜任实时性要求的系统。轮转结构示例-显示器调节voidvDigitalController(){enumchoice{Mode,Brightness,Menu,Exit}eControleItem;while(true){eControllerItem=someChoice;switch(eControllerItem){caseMode:
显示器显示显示模式选项;
使用对应按键选择一个模式;
根据所选模式改变显示器的显示模式;break;caseBrightness:
显示器显示亮度和对比度控制选项;
使用对应按键调整亮度和对比度值;
根据所选亮度和对比度值来改变显示器显示亮度;Break;…}}}嵌入式软件体系结构基本概念软件体系结构的作用轮转结构前后台结构实时多任务系统结构前后台结构(带中断的轮转系统)结构特性示例带中断的轮转系统前后台系统(Foreground-Background)也称为中断驱动的轮询系统,其软件结构的显著特点是运行的任务有前台和后台之分。在后台,一组任务按照轮询方式访问CPU;在前台,当有实时任务到达时首先提出中断,然后将该任务转交给后台(被插入到轮询环中的某个位置),按照后台的运行模式工作。因此,前台处理的是中断级别的事务,而后台处理的是实时任务。前后台系统的中断事务是外部事件触发,通过中断服务程序(ISR)实现。结构示意图实例booliDeviceA=false;booliDeviceB=false;…BooliDeviceZ=false;voidinterruptServiceA()//中断服务程序{iDeviceA=true;}voidinterruptServiceB(){iDeviceB=true;}…voidinterruptServiceZ(){iDeviceZ=true;}intmain(){while(true){If(iDeviceA)//任务1
处理I/O设备A输入或输出的数据;If(iDeviceB)
处理I/O设备B输入或输出的数据;…If(iDeviceZ)
处理I/O设备Z输入或输出的数据;}return0;}特点1、优点可以获得快速响应可以通过设置优先级实现更多的控制2、缺点可能存在潜在的数据共享问题实例分析功能要求:接收中断发送中断能正确处理队列中的共享数据问题带有中断的轮转结构微波炉带有中断的轮转结构boolisOn=false;inttimer=0;inttimeofWave=0;voidinterrupMinute()//中断服务程序{timeofWave+=60;}voidinterruptSecond(){timeofWave+=1;}voidinterruptStart(){isOn=true;}voidinterruptCancel(){isOn=false;}voidinterruptTimer(){if(isOn&&timeofWave)timeofWave=timeofWave-1;timer+=1;}intmain(){while(true){if(timeofWave)print(“%d”,timeofWave);//屏幕显示timeofWaveelse{开放分秒按键中断isOn=false;print(“%d”,timer);//屏幕显示目前时间}If(timeofWave&&isOn){
屏蔽分秒按键中断wavethefood();//微波食物
}}return0;}带有中断的轮转结构优先级问题及最坏响应时间1、为解决某一个设备的优先级问题,可以将该设备的任务代码放到它的中断程序中去。2、还可以让主循环按一定的顺序检测设备标志。如:A,C,B,C,D,C,E,C,……3、最坏响应时间是除去该设备本身后,循环的最长时间。嵌入式软件体系结构基本概念软件体系结构的作用轮转结构前后台结构实时多任务系统结构实时操作系统结构特性对比结构特点实例特性中断程序与任务代码之间的必要信号发送是由实时操作系统处理的,而不需要使用共享变量。在代码中没有用循环来决定下一步要做什么。实时操作系统内部的代码可以决定什么任务代码函数可以运行,它也知道各种任务的子程序,并且可以在任何时刻运行它们中相对比较紧急的子程序。实时操作系统可以在一个任务代码子程序运行期间将其挂起,以便运行另一个子程序。结构实时操作系统的优先级实时操作系统不仅能控制任务代码的响应时间,还可以控制中断程序的响应时间。特点优点:实时操作系统不仅能够解决响应时间问题,而且还能提供调试工具。系统的响应时间相对稳定。缺点:需要一定的费用(付费使用)。操作系统本身需要一定的处理时间。实例booliDeviceA=false;booliDeviceB=false;…BOOLiDeviceZ=false;voidinterruptServiceA()//中断服务程序{iDeviceA=true;}voidinterruptServiceB(){iDeviceB=true;}…voidtask1(){while(true){if(iDeviceA)
处理设备A的数据;}}voidtask2(){while(true){if(iDeviceB)
处理设备B的数据};}…软件结构的选择软件结构的选择可参考以下原则:选择可以满足响应时间的最简单的结构。对于响应时间要求很高而必须选用实时操作系统的,可以考虑选用实时操作系统。若有必要,则可以将三种结构结合起来应用。第四章嵌入式实时操作系统嵌入式软件的日益复杂,在客观上使得软件的编写需要多人分工合作完成。从嵌入式软件体系结构的角度考虑,就是将一个软件划分成多个任务,采用实时多任务体系实现。本章从嵌入式实时操作系统的概念出发,以典型的嵌入式实时操作系统为例,较为详细地探讨了嵌入式操作系统的特点、体系结构和重要组成部分。学习完本课程后,您将能够:掌握RTOS的定位和体系结构;掌握LiteOS启动流程;掌握LiteOS系统核心功能组成并进行调用。嵌入式操作系统作用RTOS设计需求RTOS体系结构LiteOS内核启动流程LiteOS内核分析嵌入式系统操作系统作用由于嵌入式操作系统及其应用软件往往被嵌入到特定的控制设备或者仪器中,用于实时响应并处理外部事件,所以嵌入式操作系统又可称为嵌入式实时操作系统(ERTOS)。可以简单认为,RTOS是功能强大的主控程序,它嵌入在目标设备中,系统复位后首先执行;它负责在硬件基础上为应用软件建立一个功能强大的运行环境,用户的应用程序都建立在RTOS之上。作用
RTOS内含一个实时内核,将CPU时间、中断、I/O、定时器等资源都包装起来,为用户提供一套标准API;并可根据各个任务的优先级,合理地在不同任务间分配资源。在此意义上,RTOS的作用可看成系统资源管理器。嵌入式操作系统定义RTOS设计需求RTOS体系结构LiteOS内核启动流程LiteOS内核分析RTOS设计需求及时性可确定性高可信性可裁剪性可扩展性嵌入式操作系统定义RTOS设计需求RTOS体系结构LiteOS内核启动流程LiteOS内核分析结构分类宏内核结构微内核结构内核定义与通用操作系统一样,嵌入式操作系统也都有一个内核。操作系统是由内核、服务程序、用户界面和实用程序等组件组成的,其中内核起着最重要的作用。内核是操作系统中的一组核心程序模块,最基本的工作是进程管理,此外,还提供了定时器管理和中断管理等功能,通常驻留在内存起始空间,具有访问硬件设备和核心数据的权限,是系统中唯一能够执行特权指令的程序。宏内核结构宏内核包含了一个非常完整的内核所要具备的所有功能,包括进程管理、文件管理、设备管理等这些功能统统被集成在宏内核中。微内核结构
微内核包含了内核所需要的最基本的功能,由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,这些原语仅仅包括了建立一个系统必需的几个部分,如任务调度,中断处理等。微内核特性按最初的定义,微内核中只提供几种基本服务:任务调度、任务间通信、底层的网络通信、中断处理接口以及实时时钟。整个内核非常小(可能只有几十K),内核任务在独立的地址空间运行,速度极快。传统操作系统提供的其他服务,如存储管理、文件管理、中断处理、网络通信等,都以内核上协作任务的形式出现。每个协作任务可以看成一个功能服务器。用户应用任务(客户任务)执行中若需要得到某种服务,则透过内核向服务器任务发出申请,由服务器任务完成相应的处理并将结果返还给客户任务(称为应答)。优点在这种体系结构下,任务执行需要增加一定的开销(服务器与客户之间),与整体系统相比有一定的性能下降。但是,这种改变的好处也是十分明显的:除基本内核外,RTOS的其他服务模块可以根据应用需求随意剪裁,十分符合RTOS的发展要求。RTOS可以更方便地扩展功能,包括动态扩展。可以更容易做到上层应用与下层系统的分离,便于系统移植。可以大大加强服务模块的可重用性。LiteOS-M体系结构LiteOS-M体系结构硬件相关层按不同编译工具链、芯片架构分类,提供统一的HAL(HardwareAbstractionLayer)接口,提升了硬件易适配性,满足AIoT类型丰富的硬件和编译工具链的拓展;其他模块属于硬件无关层,其中基础内核模块提供操作系统基础能力。扩展模块提供网络、文件系统等组件能力,还提供错误处理、调测等能力。KAL(KernelAbstractionLayer)模块向上层应用提供统一的标准调用接口。嵌入式操作系统定义RTOS设计需求RTOS体系结构LiteOS内核启动流程LiteOS内核分析LiteOS-M内核结构OpenHarmonyLiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点。其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等。支持驱动框架HDF(HardwareDriverFoundation),统一驱动标准,为设备厂商提供了更统一的接入方式,使驱动更加容易移植,力求做到一次开发,多系统部署。CPU体系架构支持
CPU体系架构分为通用架构定义和特定架构定义两层,通用架构定义层为所有体系架构都需要支持和实现的接口,特定架构定义层为特定体系架构所特有的部分。在新增一个体系架构的时候,必须需要实现通用架构定义层,如果该体系架构还有特有的功能,可以在特定架构定义层来实现。规则通用体系架构层特定体系架构层头文件位置arch/includearch/<arch>/<arch>/<toolchain>/头文件命名los_<function>.hlos_arch_<function>.h函数命名HalxxxxHalxxxx操作系统启动流程Hi3861_wifiiot_app.asmLOS_KernelInit(void)7.LOSCFG_BASE_IPC_SEM==18.LOSCFG_BASE_IPC_MUX==19.LOSCFG_BASE_IPC_QUEUE==110.LOSCFG_BASE_IPC_SWTMR==111.LOSCFG_BASE_IPC_TIMESLICE==112.LOSCFG_TEST==11.OsResiter()2.ret=OsMemSystemInit()3.LOSCFGPLATFORM_HMI==14.ret=OsTaskInit()5.LOSCFG_BASE_CORE_TSK_MONITOR==16.LOSCFG_BASE_CORE_CPUP==1信号量初始化互斥锁初始化消息队列初始化软件定时器初始化该宏未使用测试配置宏未使用管理寄存器管理内存模块中断授块初始化初始化任务模块任务监视器初始化该宏未使用内核初始化应用程序初始化当内核初始化后,就开始调用AppInit进行应用初始化。从AppInit函数开始脱离了硬件sdk环节,可以看到源代码了。AppInit函数位于libwifiiot_app.a(app_main.o)中,源代码为app_main.c,其中调用的函数包括获取sdk版本号,外设初始化,ipc初始化,flash分区,Wi-Fi初始化,tcp/ip初始化,然后跳转到了OpenHarmony特有的函数OHOS_Main。应用程序初始化从运行角度看启动中调用到了应用程序app_demo_iot,所在位置为.zinitcall.run2.init,但在应用程序中的关联函数是SYS_RUN(LedExampleEntry),SYS_RUN运行用户程序的过程如下图所示,这段代码处于los_init.h文件中。操作系统启动流程操作系统启动在LOS_Start函数中,该函数在los_init.c中定义,该函数启动HalStartSchedule函数,该函数与不同架构CPU有关,在不同硬件平台下实现有所差别。LITE_OS_SEC_TEXT_INITUINT32HalStartSchedule(OS_TICK_HANDLERhandler){UINT32ret;/*判断是否使用专用定时器*/#if(LOSCFG_BASE_CORE_TICK_HW_TIME==NO)//不使用专门的定时器
ret=HalTickStart(handler);//开启定时器if(ret!=LOS_OK){returnret;}HalStartToRun();//启动调度,汇编returnLOS_OK;/*neverreturn*/}嵌入式操作系统定义RTOS设计需求RTOS体系结构LiteOS内核启动流程LiteOS内核分析LiteOS内核分析时钟管理任务管理进程通信中断管理内存管理时钟管理硬件时钟管理软件定时器管理时钟管理时间管理以系统时钟为基础,给应用程序提供所有和时间有关的服务。系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者Tick。用户以秒、毫秒为单位计时,而操作系统以Tick为单位计时,当用户需要对系统进行操作时,例如任务挂起、延时等,此时需要时间管理模块对Tick和秒/毫秒进行转换。OpenHarmonyLiteOS-M内核时间管理模块提供时间转换、统计功能。该模块非常重要,因为操作系统的所有功能都是通过周期性的轮询处理来实现的。时间单位Cycle系统最小的计时单位。Cycle的时长由系统主时钟频率决定,系统主时钟频率就是每秒钟的Cycle数。TickTick是操作系统的基本时间单位,由用户配置的每秒Tick数决定。基本函数losconfig.hLOSCFG_BASE_CORE_TICK_PER_SECOND定义每秒系统触发的Tick中断的数量。开发流程根据实际需求,完成板级配置适配,并配置系统主时钟频率OS_SYS_CLOCK(单位Hz)和LOSCFG_BASE_CORE_TICK_PER_SECOND。OS_SYS_CLOCK的默认值基于硬件平台配置。调用时钟转换/统计接口。示例代码使用每秒的Tick数LOSCFG_BASE_CORE_TICK_PER_SECOND的默认值100。配好OS_SYS_CLOCK系统主时钟频率。VOIDExample_TransformTime(VOID){UINT32ms;UINT32tick;tick=LOS_MS2Tick(10000);//10000ms转换为tickdprintf("tick=%d\n",tick);ms=LOS_Tick2MS(100);//100tick转换为msdprintf("ms=%d\n",ms);}软件定时器基本概念运行机制接口说明开发流程编程示例基本概念软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,OpenHarmonyLiteOS-M内核提供软件定时器功能。软件定时器扩展了定时器的数量,允许创建更多的定时业务。软件定时器功能上支持:静态裁剪:能通过宏关闭软件定时器功能。软件定时器创建、启动、停止、删除和剩余Tick数获取。运行机制
软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置。软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmonyLiteOS-M内核会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。运行机制当Tick中断到来时,在Tick中断处理函数中扫描软件定时器的计时全局链表,看是否有定时器超时,若有则将超时的定时器记录下来。Tick中断处理函数结束后,软件定时器任务(优先级为最高)被唤醒,在该任务中调用之前记录下来的定时器的超时回调函数。定时器状态
OS_SWTMR_STATUS_UNUSED(未使用)系统在定时器模块初始化的时候将系统中所有定时器资源初始化成该状态。OS_SWTMR_STATUS_CREATED(创建未启动/停止)在未使用状态下调用LOS_SwtmrCreate接口或者启动后调用LOS_SwtmrStop接口后,定时器将变成该状态。OS_SWTMR_STATUS_TICKING(计数)在定时器创建后调用LOS_SwtmrStart接口,定时器将变成该状态,表示定时器运行时的状态。定时器模式
OpenHarmonyLiteOS-M内核的软件定时器提供三类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动删除。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动地停止定时器,否则将永远持续执行下去。第三类也是单次触发定时器,但与第一类不同之处在于这类定时器超时后不会自动删除,需要调用定时器删除接口删除定时器。接口说明
功能分类接口名描述创建、删除定时器LOS_SwtmrCreate创建定时器LOS_SwtmrDelete删除定时器启动、停止定时器LOS_SwtmrStart启动定时器LOS_SwtmrStop停止定时器获得软件定时器剩余Tick数LOS_SwtmrTimeGet获得软件定时器剩余Tick数开发流程
配置软件定时器。确认配置项LOSCFG_BASE_CORE_SWTMR和LOSCFG_BASE_IPC_QUEUE为1打开状态;配置LOSCFG_BASE_CORE_SWTMR_LIMIT最大支持的软件定时器数;配置OS_SWTMR_HANDLE_QUEUE_SIZE软件定时器队列最大长度;创建定时器LOS_SwtmrCreate。创建一个指定计时时长、指定超时处理函数、指定触发模式的软件定时器;返回函数运行结果,成功或失败;启动定时器LOS_SwtmrStart。获得软件定时器剩余Tick数LOS_SwtmrTimeGet。停止定时器LOS_SwtmrStop。删除定时器LOS_SwtmrDelete。示例代码前提条件:在los_config.h中,将LOSCFG_BASE_CORE_SWTMR配置项打开。在los_config.h中,将LOSCFG_BASE_CORE_SWTMR_ALIGN配置项关闭,示例代码中演示代码不涉及定时器对齐。配置好LOSCFG_BASE_CORE_SWTMR_LIMIT最大支持的软件定时器数。配置好OS_SWTMR_HANDLE_QUEUE_SIZE软件定时器队列最大长度。示例代码#include"los_swtmr.h"/*Timercount*/UINT32g_timerCount1=0;UINT32g_timerCount2=0;/*任务ID*/UINT32g_testTaskId01;voidTimer1_Callback(UINT32arg)//回调函数1{UINT32tick_last1;g_timerCount1++;tick_last1=(UINT32)LOS_TickCountGet();//获取当前Tick数printf("g_timerCount1=%d,tick_last1=%d\n",g_timerCount1,tick_last1);}voidTimer2_Callback(UINT32arg)//回调函数2{UINT32tick_last2;tick_last2=(UINT32)LOS_TickCountGet();g_timerCount2++;printf("g_timerCount2=%dtick_last2=%d\n",g_timerCount2,tick_last2);}示例代码voidTimer_example(void){UINT32ret;UINT32id1;//timerid1UINT32id2;//timerid2UINT32tickCount;/*创建单次软件定时器,Tick数为1000,启动到1000Tick数时执行回调函数1*/LOS_SwtmrCreate(1000,LOS_SWTMR_MODE_ONCE,Timer1_Callback,&id1,1);/*创建周期性软件定时器,每100Tick数执行回调函数2*/LOS_SwtmrCreate(100,LOS_SWTMR_MODE_PERIOD,Timer2_Callback,&id2,1);printf("createTimer1success\n");LOS_SwtmrStart(id1);//启动单次软件定时器printf("startTimer1success\n");LOS_TaskDelay(200);//延时200Tick数LOS_SwtmrTimeGet(id1,&tickCount);//获得单次软件
定时器剩余Tick数printf("tickCount=%d\n",tickCount);LOS_SwtmrStop(id1);//停止软件定时器printf("stopTimer1success\n");LOS_SwtmrStart(id1);LOS_TaskDelay(1000);LOS_SwtmrStart(id2);//启动周期性软件定时器printf("startTimer2\n");LOS_TaskDelay(1000);LOS_SwtmrStop(id2);ret=LOS_SwtmrDelete(id2);//删除软件定时器if(ret==LOS_OK){printf("deleteTimer2success\n");}}示例代码UINT32Example_TaskEntry(VOID){UINT32ret;TSK_INIT_PARAM_Stask1;/*锁任务调度*/LOS_TaskLock();/*创建任务1*/(VOID)memset(&task1,0,sizeof(TSK_INIT_PARAM_S));task1.pfnTaskEntry=(TSK_ENTRY_FUNC)Timer_example;task1.pcName="TimerTsk";task1.uwStackSize=LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;task1.usTaskPrio=5;ret=LOS_TaskCreate(&g_testTaskId01,&task1);if(ret!=LOS_OK){printf("TimerTskcreatefailed.\n");returnLOS_NOK;}/*解锁任务调度*/LOS_TaskUnlock();returnLOS_OK;}LiteOS内核分析时钟管理任务管理进程通信中断管理内存管理任务管理基本概念任务状态和变迁重要概念PCB使用示例基本概念从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。OpenHarmonyLiteOS-M的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。任务模块具有如下特性:支持多任务。一个任务表示一个线程。抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。相同优先级任务支持时间片轮转调度方式。共有32个优先级[0-31],最高优先级为0,最低优先级为31。任务状态及变迁任务有多种运行状态。系统初始化完成后,创建的任务就可以在系统中竞争一定的资源,由内核进行调度。任务状态通常分为以下四种:就绪(Ready):该任务在就绪队列中,只等待CPU。运行(Running):该任务正在执行。阻塞(Blocked):该任务不在就绪队列中。包含任务被挂起(suspend状态)、任务被延时(delay状态)、任务正在等待信号量、读写队列或者等待事件等。退出态(Dead):该任务运行结束,等待系统回收资源。状态变迁状态变迁说明就绪态→运行态任务创建后进入就绪态,发生任务切换时,就绪队列中最高优先级的任务被执行,从而进入运行态,同时该任务从就绪队列中移出。运行态→阻塞态正在运行的任务发生阻塞(挂起、延时、读信号量等)时,将该任务插入到对应的阻塞队列中,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪队列中最高优先级任务。阻塞态→就绪态(阻塞态→运行态)阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪队列,从而由阻塞态变成就绪态;此时如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,该任务由就绪态变成运行态。状态变迁说明就绪态→阻塞态任务也有可能在就绪态时被阻塞(挂起),此时任务状态由就绪态变为阻塞态,该任务从就绪队列中删除,不会参与任务调度,直到该任务被恢复。运行态→就绪态有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪队列中最高优先级任务变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪队列中。运行态→退出态运行中的任务运行结束,任务状态由运行态变为退出态。退出态包含任务运行结束的正常退出状态以及Invalid状态。例如,任务运行结束但是没有自删除,对外呈现的就是Invalid状态,即退出态。阻塞态→退出态阻塞的任务调用删除接口,任务状态由阻塞态变为退出态。重要概念任务ID:任务ID,在任务创建时通过参数返回给用户,是任务的重要标识。系统中的ID号是唯一的。用户可以通过任务ID对指定任务进行任务挂起、任务恢复、查询任务名等操作。任务优先级:优先级表示任务执行的优先顺序。任务的优先级决定了在发生任务切换时即将要执行的任务,就绪队列中最高优先级的任务将得到执行。任务入口函数:新任务得到调度后将执行的函数。该函数由用户实现,在任务创建时,通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《高速电气化铁路接触网》课件4.11接触网防雷
- 污水处理工岗位班组协作考核试卷含答案
- 酿酒师基础验收知识考核试卷含答案
- 膨胀烟丝设备操作工核心管理强化考核试卷含答案
- 液氯工岗中实操知识能力考核试卷含答案
- 2025年职业技能大赛真题解析试卷含答案
- 2025年质量知识竞赛多选题库及答案(共70题)
- 2025年中国质量协会质量月竞赛答题题库(附答案)
- 2025年重性精神患者试题及答案
- 2025年中医优才试题及答案
- 2026年新版预防未成年人犯罪法知识竞赛题库及参考答案
- 2026年水务集团招聘考试笔试试题及答案
- 2026年甘肃省酒泉市金塔县招聘社区工作者考试参考题库及答案解析
- 2026年云南云上云大数据产业发展有限公司及下属子公司第一次社会招聘(32人)笔试模拟试题及答案详解
- 冠状动脉粥样硬化性心脏病患者药物治疗管理路径专家共识
- 纺织厂安全生产管理制度
- 2026粒径分析考试题及答案
- 2026中国新能源电池技术研发行业市场现状趋势分析投资策略规划报告
- 2026秋沪教牛津版五年级上英语单词默写(默写)
- 苏教版六年级上册数学《比的意义》教学设计
- 医疗器械质量保证控制程序
评论
0/150
提交评论