嵌入式复习总结.doc

上传人:飞****2 文档编号:82416720 上传时间:2023-03-25 格式:DOC 页数:8 大小:79KB
返回 下载 相关 举报
嵌入式复习总结.doc_第1页
第1页 / 共8页
嵌入式复习总结.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《嵌入式复习总结.doc》由会员分享,可在线阅读,更多相关《嵌入式复习总结.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、一、嵌入式系统基本知识1、什么是嵌入式系统、分层结构:根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”, 此定义是从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置;一般定义:“以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”;微机学会的定义:嵌入式系统是以嵌入式应用为目的的计算机系统。可分为系统级、板级、片级(系统级:各种类型的工控器、PC104模块;板级:各种类型的带CPU的主板及OEM产品;片级:各种以单片机、DSP、微处理器为核心的产品)。分层结构:

2、嵌入式系统:硬件、驱动、操作系统、中间件、应用。2、嵌入式系统与单片机、PC系统的区别:(单片机与嵌入式系统比较,一般没有操作系统,就没有办法同时运行多个任务,单片机总是运行单个任务) 目前嵌入式系统的主流是以32位嵌入式微处理器为核心的硬件设计和基于实时操作系统(RTOS)的软件设计;单片机系统多为4位、8位、16位机,不适合运行操作系统,难以进行复杂的运算及处理功能;嵌入式系统强调基于平台的设计、软硬件协同设计,单片机大多采用软硬件流水设计;嵌入式系统设计的核心是软件设计(占70%左右的工作量),单片机系统软硬件设计所占比例基本相同;单片机学习一般从硬件入手,从硬件体系结构、汇编语言到硬件

3、设计、软件设计;嵌入式系统学习可以从软件入手,从应用层编程到操作系统移植、硬件平台设计较好,按单片机设计的学习流程较难掌握。嵌入式系统与pc系统区别:嵌入式系统一般是专用系统,而PC是通用计算平台;嵌入式系统的资源比PC少得多;嵌入式系统软件故障带来的后果比PC机大得多;嵌入式系统一般采用实时操作系统;嵌入式系统大都有成本、功耗的要求;嵌入式系统得到多种微处理体系的支持;嵌入式系统需要专用的开发工具。3、常见的嵌入式操作系统有哪些?可分为商用型和免费型。免费型:实时操作系统在价格方面具有优势,目前主要有Linux和C/OS,稳定性与服务性存在挑战。Linux:是开放源码的,不存在黑箱技术,遍布

4、全球的众多Linux爱好者又是Linux开发的强大技术后盾;Linux的内核小、功能强大、运行稳定、系统健壮、效率高,易于定制剪裁,在价格上极具竞争力;Linux不仅支持x86 CPU,还可以支持其他数十种CPU芯片。嵌入式Linux是指对Linux经过小型化裁剪后,能够固化在容量只有几百K字节或几兆字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。主要有RTLinux和CLinux。商用型:实时操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵,如Vxworks、QNX、WinCE、Palm OS等。VxWorks,是一种嵌入式实时操作系统,具有良好的

5、持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域牢牢占据着一席之地。特点是:可靠性、实时性和可裁减性;它支持多种处理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS 、POWER PC等。Windows CE 3.0:一种针对小容量、移动式、智能化、32位、连接设备的模块化实时嵌入式操作系统;针对掌上设备、无线设备的动态应用程序和服务提供了一种功能丰富的操作系统平台, WindowsCE嵌入但不够实时,属于软实时操作系统;由于其Windows背景,界面比较统一认可;操作系统的基本内核需要至少200K的ROM。4、嵌入式系统的特点:

6、(1)系统内核小:由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限;(2)专用性强:嵌入式系统个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植;即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改;针对不同的任务,往往需要对系统进行较大更改,这种修改和通用软件的“升级”是完全不同的概念;(3)系统精简:嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全;(4)高实时性OS:这是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高

7、可靠性、实时性;(5)嵌入式软件开发走向标准化:嵌入式系统的应用程序可以没有操作系统直接在芯片上运行。为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量;(6)嵌入式系统需要开发工具和环境:其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。二、嵌入式系统的设计原则及开发方法:1、软硬件协同设计概念:基于体系结构,对系统的软件、硬件进行详细设计,为了缩短产品开发周期,设计往往是并行的(既是先从逻辑入手,设计出

8、功能模块,最后再区分是由硬件还是软件来实现该功能)。举例:SOC系统:嵌入式片上系统,结合许多功能区块,将功能坐在一个芯片上,微处理器核心是通信接口单元等。SOC是追求产品系统最大包容的集成器件,最大特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块,运用VHDL等硬件描述语言,不需要像传统系统设计一样,绘制庞大复杂的电路板,一点一点的连接焊制,只需使用精确的语言,综合时序设计,直接在器件库中调用各种通用处理器标准,通过仿真后,可交付芯片厂家进行生产。2、项目开发生命周期:(识别需求提出解决方案执行项目结束项目)。系统开发步骤:系统需求分析(规格说明书):确定设计任务和目标

9、,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。体系结构设计:描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。硬件/软件协同设计:基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。系统集成:把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。系统测试:对设计好的系统进行测试

10、,看其是否满足规格说明书中给定的功能要求。三、ARM处理器体系结构:1、冯诺依曼体系结构:程序和数据共用一个存储空间,CPU无法同时访问程序和数据;哈佛体系结构:程序和数据分开存放,CPU可以同时访问程序存储器和数据存储器。(2)CISC:复杂指令集,具有大量的指令和寻址方式;8/2原则:80%的程序只使用20%的指令;大多数程序只使用少量的指令就能够运行。RISC:精简指令集,在通道中只包含最有用的指令;确保数据通道快速执行每一条指令;使CPU硬件结构设计变得更为简单。(3)体系结构与处理器的区别:知识产权核(IP核):电路或核是设计好并经过验证的集成电路功能单元;IP复用意味着设计代价降低

11、(时间,价格);ARM体系结构是知识产权,是IP核的一种,并不是某一具体的芯片,而微处理器一般指与RAM、ROM等硬件固化在一起的某一类芯片。(4)IP核的种类:Soft Cores(“code”)(软核):HDL语言描述;灵活度高,可修改;与工艺独立,可根据具体的加工工艺重新综合;IP很难保护。Firm cores(“code+structure”)(固核):逻辑综合后的描述,与工艺相关。Hard cores(“physical”)(硬核):物理综合后的描述,准备流片,包含工艺相关的布局和时序信息,IP很容易保护,多数的处理器和存储器。2、ARM的七种基本工作模式:User用户模式:非特权模

12、式,大部分任务执行在这种模式*正常程序执行的模式;FIQ快速中断模式:当一个高优先级(fast)中断产生时将会进入这种模式*高速数据传输和通道处理;IRQ外部中断模式:当一个低优先级(normal)中断产生时将会进入这种模式*通常的中断处理;Supervisor管理模式:当复位或软中断指令执行时将会进入这种模式*供操作系统使用的一种保护模式;Abort数据访问中止模式: 当存取异常时将会进入这种模式*虚拟存储及存储保护;Undef未定义指令中止模式: 当执行未定义指令时会进入这种模式*软件仿真硬件协处理器;System系统模式: 使用和User模式相同寄存器集的特权模式,特权级的操作系统任务。

13、注意:模式之间的转换实际上是寄存器组之间的切换,当使用某种寄存器组,就进入了某种相应的工作模式。(1)寄存器组织(37 寄存器):31 个通用32位寄存器,包括未分组寄器R0-R7、分组寄存器R8-R14、程序计数器PC(R15);6 个状态寄存器。15个通用寄存器 (R0 to R14), 以及1或者2个状态寄存器和程序计数器在任何时候都是可以访问的;可访问的寄存器取决于处理器的模式;其它寄存器的状态在支持IRQ, FIQ, 管理员, 中止和未定义模式处理时被切换。*FIR要求速度要快,故其专用的寄存器最多。(2)R0 到 R15 可以直接访问;R0 到 R14 是通用寄存器;R13: 堆栈

14、指针 (sp) (通常);每种处理器模式都有单独的堆栈;R14: 链接寄存器 (lr);R15 包含程序计数器 (PC);CPSR:当前程序状态寄存器,包括代码标志状态和当前模式位;5个SPSRs(程序状态保存寄存器):当异常发生时保存CPSR状态;SPSR和CPSR的功能是:保存ALU当前操作信息、控制允许和禁止中断、设置处理器操作模式。(3)程序状态寄存器:*条件位:N = 1-结果为负,0-结果为正或0;Z = 1-结果为0,0-结果不为0;C =1-进位,0-借位;V =1-结果溢出,0结果没溢出。*中断禁止位:I=1:禁止IRQ;F=1:禁止FIQ。*T Bit:仅ARM xT架构支

15、持;T = 0:处理器处于ARM状态;T=1:处理器处于Thumb状态。*Mode位(处理器模式位):0b10000 User;0b10001 FIQ;0b10010 IRQ;0b10011 Supervisor;0b10111 Abort;0b11011 Undefined;0b11111 System。(4)程序指针PC (r15):当处理器执行在ARM状态:所有指令 32 bits 宽;所有指令必须 word 对齐;所以 pc值由bits 31:2决定, bits 1:0 未定义 (所以指令不能halfword / byte对齐)。当处理器执行在Thumb状态:所有指令 16 bits

16、宽;所有指令必须 halfword 对齐;所以 pc值由bits 31:1决定, bits 0 未定义 (所以指令不能 byte对齐)。3、ARM的异常:(1)异常定义:内部或外部中断源产生并引起处理器处理一个事件,如外部中断或试图执行未定义指令都会引起异常。处理异常之前必须保留处理器的状态。(2)异常的类型:复位RESET:当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常的处理程序处执行;DABT数据中止:若处理器数据访问指令地址不存在或该地址不允许当前指令访问,产生异常;FIQ快速中断请求:当快速中断请求引脚有效,且CPSR中F=0,产生异常;IRQ外部中断请求:当外部中断请求引

17、脚有效,且且CPSR中I=0;PABT指令预取中止:若预取指令地址不存在或该地址不允许当前的指令访问,存储器向处理器发出中止信号,但是只有当取指的指令被执行时,才产生异常;UDEF未定义指令:当处理器或协处理器遇到不能处理的指令时产生该异常,可利用该机制进行软件仿真;SWI软件中断:由执行SWI指令产生,用于用户模式下的程序调用特权操作指令,利用该异常机制实现系统功能调用。(3)异常处理过程(只能在ARM态执行,若进入异常前是Thumb态,进入异常后转为ARM态,返回后自动进入Thumb):当异常产生时,处理器执行以下动作:改变处理器状态进入 ARM 态;改变处理器模式进入相应的异常模式;保存

18、返回地址到 LR_;拷贝 CPSR 到 SPSR_;设置中断禁止位禁止相应中断(如需要);设置PC 为相应的异常向量。异常处理完毕后,微处理器执行下列操作从异常返回:从LR_恢复PC,应减去相应的偏移量;从 SPSR_恢复CPSR;清楚中断禁止位。注意复位异常处理程序不需返回,因为可以认为应用程序总是从复位异常处理程序开始执行。(4)异常响应过程伪代码:R14_=Return LinkSPSR_=CPSRCPSR4:0=Exception Mode NumberCPSR5=0; /当运行于ARM状态时IF=Reset or FIQ then;/当响应FIQ异常时禁止新的FIQ异常CPSR6=1

19、;CPSR7=1;PC=Exception Vector Address. 4、ARM寄存器与操作系统之间的关系:操作系统的设计需要硬件的支持,同时也受其制约,例如在单片机上无法运行windows OS是因为资源不够。同时ARM寄存器组也支持操作系统,更快地在各种模式之间转换,无需进行出、入栈操作,利用寄存器组提高了上下文切换的效率。5、ARM状态和Thumb状态关系:在程序的执行过程中,微处理器可以随时地在两种工作状态之间切换且不影响处理器的工作模式和相应寄存器的内容。Thumb状态是ARM状态的一个映射,最终也要映射成ARM指令来执行,但字长较小,提高空间利用率,低功耗,节省代码空间,用于

20、便捷设备,不能用于异常模式;ARM微处理器在开始执行代码时,应该处于ARM态。进入Thumb态操作:当操作数寄存器的状态位为1时,执行BX指令,从ARM态进入Thumb态。当处于Thumb态时发生异常,则异常返回时,自动切换回到Thumb态。进入ARM态操作:当操作数寄存器的状态位为0时,执行BX指令进入ARM态。此外当进行异常处理时,把PC指针放入异常模式链接寄存器R14中,并从异常向量地址开始执行程序,也能切换到ARM态;Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集。四、ARM指令集:1、ARM编程模型:(1)3级指令流水线技术:几个指令可以并行执行,提高了CPU的运行效率;

21、内部信息流要求通畅流动(为了增加处理器指令流速度,提高运行效率);允许多个操作同时处理,比逐条指令执行要快;PC指向正被取指的指令,而非正在执行的指令。(2)存储器模式:大端模式(字数据的高位字节存储在低地址中,字数据的低字节则存放在高地址中)和小端模式。(3)数据和指令类型:ARM采用32位架构;ARM约定:字节8位,半字16位,字32位;大部分ARM核提供ARM指令集和Thumb指令集(T变种);Jazelle 核支持Java bytecode(J变种,4TEJ),所有指令8位宽,处理器执行字存取,一次取4条指令。2、指令结构:采用冯诺依曼体系结构,需要把指令从存储器加载到寄存器,没有专门

22、的IO指令,故存在load/store结构从存储器中读某个值,操作完后再将其放回存储器中。指令分类:a.数据处理指令使用和改变寄存器的值;b.数据传送指令把存储器的值拷贝到寄存器中 (load) or 把寄存器中的值拷贝到存储器中(store);c.控制流指令 :分支、分支和链接, 保存返回的地址,以恢复最先的次序、陷入系统代码。3、ARM与Thumb指令的关系:(1)Thumb指令的特点:Thumb 指令的长度为 16 位,是针对代码密度问题而提出的;所有的 Thumb 指令和编程模型与ARM指令和编程模型相对应;Thumb 子程序和 ARM 子程序就可以互相调用;Thumb 指令集中的操作

23、数和指令地址仍为32 位 ;大多数的 Thumb指令是无条件执行的,而几乎所有的 ARM 指令都是有条件执行的;Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令集而不支持ARM指令集。(2)Thumb 指令与ARM 指令的时间效率和空间效率关系 :Thumb 代码所需的存储空间约为ARM 代码的6070;Thumb 代码使用的指令数比ARM 代码多约3040;若使用32 位的存储器,ARM 代码比Thumb 代码快约40;若使用16 位的存储器,Thumb 代码比ARM 代码快约4050;与ARM 代码相比较,使用Thumb 代码,存储器的功耗会降低约30。五、典型的ARM

24、核芯片结构:1、LPC2000系列处理器结构:LPC2000系列微控制器将ARM7TDMI配置为小端模式;内部存储器包括无等待SRAM和Flash;系统功能包括维持芯片工作的一些基本功能,如系统时钟、复位等;向量中断控制器(VIC)可减少中断响应时间,最多可管理32个中断请求;外部存储器控制器(EMC)支持4个BANK的外部SRAM和Flash,每个BANK最大16MB;I2C串行接口为标准I2C总线接口,支持最大速度400KB;具有两个完全独立的SPI控制器;具有两个UART接口,均包含16字节的接受/发送FIFO,内置波特率发生器,UART1具调制解调接口功能;LPC2119/2129/2

25、290/2292包含CAN总线接口;看门狗定时器;通用IO,可受5V电压,每个IO口可独立设置为输入输出模式;PWMO脉宽调制器,可灵活设置,以适应不同的场合,单边沿/双边沿输出方式,频率、占空比可调;实时时钟,具可编程积存时钟分频器,以适应不同的晶振频率。2、LPC处理器的启动过程:一般在32位ARM应用系统中,大多数采用C语言进行软件编程,但是在运行应用代码前需要进行系统初始化,常用一汇编文件做启动代码,它可以实现异常向量表定义、堆栈初始化、系统变量初始化、地址重映射等操作。3、时钟编程方法 4、存储器映射控制原理:用于控制地址范围为0x0000-0x0037存储区域的重新映射,该区域存放

26、着异常向量表,发生异常时,程序总是跳转到地址为0x0000-0x0037的对应入口处,而实际异常向量表可能存在内部Flash、SRAM、Boot Block,为了让运行在不同存储器空间的程序对异常进行控制,可通过存储器映射控制,将位于不同存储空间的异常向量表重新映射到固定地址0x0000-0x0037处,以实现异常向量表的来源控制,通过设置存储器映射控制寄存器的值来实现。流程:内核产生的地址0x0000-0x0037,经过地址转换器后,映射到物理存储器的地址空间(0x-0x(外部存储器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x-0x(内部SRAM)/0x-0x

27、(内部Flash)。5、存储器加速模块MAM 6、外部存储器控制器(EMC):EMC模块为AHB系统总线和外部存储器件之间提供了一个接口;EMC支持4个独立配置的存储器组,每个最大支持16MB,支持字节定位读取。7、GPIO:特性:可独立控制每个GPIO的方向(输入、输出模式);可独立设置每个GPIO的输出状态;所有GPIO复位后,默认为输入态。IOxPIN0-31: GPIO引脚值;IOxDIR0-31:方向控制位,写入1输出,0输入; IOxSET0-31: 输出置位,写入1高电平,0无效;IOxCLR0-31:写入1清零,0无效。示例:设置P0.0输出高电平代码:PINSEL0 &=0x

28、FFFFFFFC;/设置引脚连接模块,P0.0为GPIO IO0DIR |=0x; IO0SET=0x;8、UART0 六、实时操作系统概念及操作系统原理:1、概念:(1)实时系统:(指任务要求在限定时间内完成)如果逻辑和时序出现偏差将会引起严重后果的系统。(2)软实时系统:系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成。(3)硬实时系统:各任务不仅要执行无误而且要做到准时。(4)前后台系统:或超循环系统,应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。中断服务程序处理异步事件,这部分可以看成前台行为。后台也可以叫做任务级。

29、前台也叫中断级。时间相关性很强的关键操作一定是靠中断服务来保证的。(5)代码的临界段:也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。(6)资源:任何为任务所占用的实体都可称为资源。资源可以是输入输出设备或一个变量,结构,数组等。(7)共享资源:可以被一个以上任务使用的资源叫做共享资源。为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥。(8)多任务:多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。CPU只有一个,轮番服务

30、于一系列任务中的某一个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。(9)任务状态:典型地、每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下,这5种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态。休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。运行态的任务是指该任务掌握了CPU的控制权,正在运行中。挂起状态也可以叫

31、做等待事件态WAITING,指该任务在等待,等待某一事件的发生,(例如等待某外设的I/O操作,等待某共享资源由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)。最后,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。(10)任务切换:当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。这些内容保存在任务的当前状况保存区,也就是任务自己的栈区之中。入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行。(11)内核:多任

32、务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。(12)调度:是内核的主要职责之一,就是要决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行。(13)不可剥夺型内核:要求每个任务自我放弃CPU的所有权。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得C

33、PU的使用权。优点是响应中断快;几乎不需要使用信号量保护共享数据。缺陷在于其响应时间,高优先级的任务已经进入就绪态,但还不能运行,要等,也许要等很长时间,直到当前运行着的任务释放CPU。无法保证系统的实时性。(14) 可剥夺型内核:最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。保证了系统的实时性。(15)可重入型函数:可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以

34、被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要予以保护。(16)时间片轮番调度法:当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间,叫做时间额度,然后切换给另一个任务。(17)任务优先级:是表示任务被调度的优先程度。每个任务都有其优先级。任务越重要,赋予的优先级应越高。(18)静态优先级:应用程序执行过程中诸任务优先级不变,在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。(19)动态优先级:应用程序执行过程中,任务的优先级是可变的,实时内核应当避免出现优先级

35、反转问题。(20)优先级反转:优先级高和优先级低的任务在运行时,由于共享资源的占用问题,而出现的优先级反转问题,即在执行过程中,优先级高的任务反而要等优先级低的任务先运行完后,释放共享资源,才能运行。纠正的方法:提高正在使用共享资源的任务的优先级,但耗费CPU时间;内核能自动变换任务的优先级,称优先级继承,但是UCOSII不支持。(21)任务优先级分配:单调执行率调度法RMS:基于哪个任务执行的次数最频繁,执行最频繁的任务优先级最高(22)任务互斥:实现任务间通讯最简便到办法是使用共享数据结构,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互

36、斥条件最一般的方法有:关中断;使用测试并置位指令TAS;禁止做任务切换;利用信号量。(23)信号量:信号量实际上是一种约定机制,用于:控制共享资源的使用权(满足互斥条件);标志某事件的发生;使两个任务的行为同步。注意:信号,只取两个值0和1的信号量;计数器型,值有多种形式。对信号量只能实施三种操作:初始化(INITIALIZE),也可称作建立(CREATE);等信号(WAIT)也可称作挂起(PEND);给信号(SIGNAL)或发信号(POST)。信号量初始化时要给信号量赋初值,等待信号量的任务表(Waiting list)应清为空。P/V操作:P操作既是减1操作,任务执行等待(WAIT)操作,

37、有可能执行P操作;V操作既是加1操作,任务以发信号操作(SIGNAL)释放信号量。(24)死锁:也称作抱死,指两个任务无限期地互相等待对方控制着的资源。最简单的防止发生死锁的方法是让每个任务都:先得到全部需要的资源再做下一步的工作;用同样的顺序去申请多个资源;释放资源时使用相反的顺序。(25)同步:可以利用信号量使某任务与中断服务同步(或者是与另一个任务同步,这两个任务间没有数据交换)。单向同步:任务与中断服务之间/两任务之间;双向同步:两任务之间可以用信号量同步它们的行为,两个任务需要互相等待对方执行,等待自身所需的事件发生(信号量),同步执行。(26)任务间的通讯:有时很需要任务间的或中断

38、服务与任务间的通讯。任务间信息的传递有两个途径:通过全程变量或发消息给另一个任务。用全程变量时,必须保证每个任务或中断服务程序独享该变量。中断服务中保证独享的唯一办法是关中断。如果两个任务共享某变量,各任务实现独享该变量的办法可以是关中断再开中断,或使用信号量(如前面提到的那样)。(27)消息邮箱:通过内核服务可以给任务发送消息。典型的消息邮箱也称作交换消息,是用一个指针型变量,通过内核服务,一个任务或一个中断服务程序可以把一则消息(即一个指针)放到邮箱里去。同样,一个或多个任务可以通过内核服务接收这则消息。发送消息的任务和接收消息的任务约定,该指针指向的内容就是那则消息。内核一般提供以下邮箱

39、服务:邮箱内消息的内容初始化,邮箱里最初可以有,也可以没有消息;将消息放入邮箱(POST);等待有消息进入邮箱(PEND);如果邮箱内有消息,就接受这则消息。如果邮箱里没有消息,则任务并不被挂起(ACCEPT),用返回代码表示调用结果,是收到了消息还是没有收到消息。消息邮箱也可以当作只取两个值的信号量来用。邮箱里有消息,表示资源可以使用,而空邮箱表示资源已被其它任务占用。(28)消息队列:消息队列用于给任务发消息。消息队列实际上是邮箱阵列。通常,先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO)。然而C/OS-也允许使用后进先出方式(LI

40、FO)。内核提供的消息队列服务如下:消息队列初始化。队列初始化时总是清为空;放一则消息到队列中去(Post);等待一则消息的到来(Pend);如果队列中有消息则任务可以得到消息,但如果此时队列为空,内核并不将该任务挂起(Accept)。如果有消息,则消息从队列中取走。没有消息则用特别的返回代码通知调用者,队列中没有消息。2、任务的组成:代码、TCB、私有堆栈。一个任务通常是一个无限的循环,绝不会返回的,但可通过调用函数自我删除,也可建立新任务。3、OS的内核原理:(1)任务状态图(任务状态的切换过程):睡眠态(DORMANT)指任务驻留在程序空间之中,还没有交给C/OS-管理,把任务交给C/O

41、S-是通过调用下述两个函数之一:OSTaskCreate()或OSTaskCreateExt()。当任务一旦建立,这个任务就进入就绪态准备运行。任务的建立可以是在多任务运行开始之前,也可以是动态地被一个运行着的任务建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。调用OSStart()可以启动多任务。OSStart()函数运行进入就绪态的优先级最高的任务。就绪的任务只有当所有优先级高于这个任务的任务转为等待状态,或者是被删除

42、了,才能进入运行态。 正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。这个任务于是进入等待状态,等待这段时间过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了CPU的控制权。等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。正在运行的任务期待某一事件的发生时也要等待,手段是调用以下3个函数之一:OSSemPend(),OSMboxPend(),或OSQPend()。调用后任务进入了等待状态(WAITING)。当任务因等待事件被挂起(Pend),下一个优先级最高的任务立即得到了C

43、PU的控制权。当事件发生了,被挂起的任务进入就绪态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。正在运行的任务是可以被中断的,除非该任务将中断关了,或者C/OS-将中断关了。被中断了的任务就进入了中断服务态(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,C/OS-要判定,被中断的任务是否还是就绪态任务中优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行,否则原来被中断

44、了的任务才能继续运行。当所有的任务都在等待事件发生或等待延迟时间结束,C/OS-执行空闲任务(idle task),执行OSTaskIdle()函数。(2)局部结构任务控制块TCB:一旦任务建立了,任务控制块OS_TCBs将被赋值。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,C/OS-用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。实际上,任务状态的改变就是修改TCB的过程,OS_TCBs全部驻留在RAM中。任务建立的时候,OS_TCBs就被初始化了。 应用程序中可以有的最多任务数(OS_MAX_TASKS)是在文件

45、OS_CFG.H中定义的。这个最多任务数也是C/OS-分配给用户程序的最多任务控制块OS_TCBs的数目。将OS_MAX_TASKS的数目设置为用户应用程序实际需要的任务数可以减小RAM的需求量。所有的任务控制块OS_TCBs都是放在任务控制块列表数组OSTCBTbl中的。C/OS-分配给系统任务OS_N_SYS_TASKS若干个任务控制块,供其内部使用。目前,一个用于空闲任务,另一个用于任务统计。在C/OS-初始化的时候,所有任务控制块OS_TCBs被链接成单向空任务链表。当任务一旦建立,空任务控制块指针OSTCBFreeList指向的任务控制块便赋给了该任务,然后OSTCBFreeList

46、的值调整为指向下链表中下一个空的任务控制块。一旦任务被删除,任务控制块就还给空任务链表。(3)全局结构就绪表:将任务放入就绪表程序清单:OSRdyGrp |= OSMapTblprio 3;OSRdyTblprio 3 |= OSMapTblprio & 0x07; 任务优先级的低三位用于确定任务在总就绪表OSRdyTbl中的所在位。接下去的三位用于确定是在OSRdyTbl数组的第几个元素。OSMapTbl是在ROM中的屏蔽字,用于限制OSRdyTbl数组的元素下标在0到7之间。程序清单:从就绪表中删除一个任务if (OSRdyTblprio 3 &= OSMapTblprio & 0x07)

47、 = 0) OSRdyGrp &= OSMapTblprio 3; 程序清单:找出进入就绪态的优先级最高的任务y = OSUnMapTblOSRdyGrp; x = OSUnMapTblOSRdyTbly;prio = (y 3) + x; 以上代码将就绪任务表数组OSRdyTbl中相应元素的相应位清零,而对于OSRdyGrp,只有当被删除任务所在任务组中全组任务一个都没有进入就绪态时,才将相应位清零。算法理解:预先根据结构,先算好屏蔽字,做好准备,再利用二进制的特点,将优先级与查表得出的屏蔽字进行逻辑操作,得出xy值,再对就绪表的相应位进行置位或清零操作,完成对就绪表的修改。利用屏蔽字是为了

48、提高查找就绪表的速度。4)任务调度算法void OSSched (void) INT8U y;OS_ENTER_CRITICAL(); if (OSLockNesting | OSIntNesting) = 0)y = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(y 3) + OSUnMapTblOSRdyTbly);if (OSPrioHighRdy != OSPrioCur) OSTCBHighRdy= TCBPrioTblOSPrioHighRdy;OSCtxSwCtr+; OS_TASK_SW(); OS_EXIT_CRITICAL(); C/OS-任务调度所花的时间是常数,与应用程序中建立的任务数无关。4、空闲任务 (Idle Task) :C/OS-总是建立一个空闲任务,这个任务在没有其它任务进入就绪态时投入运行。空闲任务OSTaskIdle()永远设为最低优先级。空闲任务OSTaskIdle()什么也不做,只是在不停地给一个32位的名叫OSIdleCtr的计数器加1,统计任务使用这个计数器以确定现行应用软件实际消耗的CPU时间。空闲任务不可能被应用软件删除,但可以通过时间中断唤醒其他任务进

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com