北工大嵌入式系统复习

上传人:无*** 文档编号:179473511 上传时间:2023-01-01 格式:PPT 页数:143 大小:3.10MB
返回 下载 相关 举报
北工大嵌入式系统复习_第1页
第1页 / 共143页
北工大嵌入式系统复习_第2页
第2页 / 共143页
北工大嵌入式系统复习_第3页
第3页 / 共143页
点击查看更多>>
资源描述
2021/7/11体系结构 体系结构:CISC RISC CISC指令集 Intel 及其兼容的处理器 用最少的机器语言指令来完成所需的计算任务 RISC:Reduced Instructions Set Computing 嵌入式系统:RISC 处理器速度比内存快寄存器,流水线 思想:针对流水线化的处理器优化 2021/7/12RISC和CISC之间的区别指标指标RISCCISC指令集指令集一个周期执行一一个周期执行一条,指令长度固条,指令长度固定定指令长度不固定,指令长度不固定,执行需要多个周执行需要多个周期期流水线流水线流水线每周期前流水线每周期前进一步进一步指令的执行需要指令的执行需要调用微代码的一调用微代码的一个微程序个微程序寄存器寄存器更多通用寄存器更多通用寄存器专用寄存器专用寄存器Load/Store结构结构独立独立,完成数据在完成数据在寄存器与外部存寄存器与外部存储器之间传输储器之间传输处理器可直接处处理器可直接处理存储器中的数理存储器中的数据据2021/7/13Samsung S3C44B0XSamsung S3C44B0X微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案,它使用ARM7TDMI核,工作在66MHZ。为了降低系统总成本和减少外围器件,这款芯片中还集成了下列部件:2021/7/14体系结构变化 THUMB指令集(T)uTHUMB 指令集:32位ARM指令集的子集,按16位指令重新编码u代码尺寸小(up to 40%compression)u简化设计2021/7/15ARM体系结构版本 ARM/Thumb体系版本命名格式 ARMv4xM ARMv字符串 体系结构版本号 18 表示变种的字符:M D T E J I S 内核的命名:ARM7 T D M I-S系列号系列号Thumb片上调试片上调试 64位乘法位乘法Embeded ICE可综合软核可综合软核2021/7/16ARM编程模型 1.ARM流水线技术 2.存储模式I/O空间 3.工作模式和寄存器组 4.异常和异常向量表 5.AMBA总线 6.JTAG调试接口2021/7/17指令流水线(Pipeline)指令流水线是RISC结构的共同点 ARM7 3级 ARM9 5级 ARM10 6级 ARM Cortex A8 13级2021/7/18 按照冯诺依曼型计算机执行程序的原理,指令必须是按顺序方式逐条串行执行的。比如加法指令可以分成取指令、指令译码、取操作数、ALU运算、写结果五个步骤,如果有程序中有连续两条这样的指令,在传统的计算机里必须等第一条指令完全结束才能开始执行 流水线的好处是:第一条指令开始译码的时候,第二条就可以开始取指令了。2021/7/19指令流水线(Pipeline)允许多个操作同时处理,比逐条指令执行快 PC指向正被取指的指令,而非正在执行的指令寄存器读(从寄存器寄存器读(从寄存器Bank)移位及移位及ALU操作操作寄存器写(到寄存器寄存器写(到寄存器Bank)FetchDecodeExecute从存储器中读取指令从存储器中读取指令解码指令解码指令PC PCPC-4 PC-2PC-8 PC-4ARM Thumb2021/7/110 三级流水线:FetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecute2021/7/111指令流水线(Pipeline)更多级的PipelineARM10ARM10采用了采用了6 6级流水线,但是处于兼容考虑,直级流水线,但是处于兼容考虑,直接读取接读取PCPC值依然等于值依然等于“当前指令地址当前指令地址+8+8”。2021/7/1122021/7/113 多周期指令:时间片 1 2 3 4 5 6 7 81.取ADD 译码 执行2.取STR 译码 算地址 存数 3.取ADD 译码 执行4.取ADD 译码 执行5.取ADD 译码.冯冯 诺依曼结构:不能同时访问指令和数据存储器诺依曼结构:不能同时访问指令和数据存储器2021/7/114ARM9 5级流水线:哈佛结构数据和指令分别进行独立编址步骤:取指、译码、执行、缓冲、写回缓冲、写回取指:从程序存储器中取指令流水线译码:读取寄存器操作数执行:如果是LDRSTR,则计算地址缓冲:LDRSTR访问数据存储器,否则缓冲写回:结果写到寄存器中2021/7/1152021/7/116指令流水线(Pipeline)流水线的效率也可能低下,两个原因:1.相关性问题:一是如果第一条指令的结果是第二条指令执行所需要的,那么就出现了相关性问题。这就导致流水线必须停下来等前面的运算结束才能够继续后面的指令。解决这个问题的办法有乱序执行乱序执行技术。2021/7/117指令流水线(Pipeline)2.程序转移问题:由于无法事先判断转移指令会走那一边,所以必须等待结果出现。由于这样的指令在程序中数量众多,通常会导致流水线的停顿状况非常严重。解决的方法:一般是通过风险的预测执行风险的预测执行或强行并强行并行执行来解决行执行来解决。2021/7/118ARM编程模型 1.ARM流水线技术 2.存储模式I/O空间 3.工作模式和寄存器组 4.异常和异常向量表 5.AMBA总线 6.JTAG调试接口2021/7/119处理器的工作状态 ARM7TDMI 处理器有两种工作状态:uARM-32-bit,按字排列的ARM指令集uThumb-16-bit,按半字排列的Thumb指令集 ARM7TDMI 核的操作状态可能通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换2021/7/120例:例:从从ARM状态切换到状态切换到Thumb状态:状态:LDR R0,=Label+1 BX R0从从Thumb状态切换到状态切换到ARM状态:状态:LDR R0,=Label BX R02021/7/121存储器模式1.I/O存储空间ARM 32位架构,I/O空间采用统一编址方式 地址从0 x00000000开始以字节为单位的线性组合 地址空间:232,(4GB)0232-1 230个32位的字单元 231个16位的半字单元 地址:32位无符号数,可加减运算 结果232取模 2021/7/122数据和指令类型ARM 32位地址线/数据线,支持如下数据类型:Byte:8 bits Halfword:16 bits(2 byte),必须对齐2字节边界 Word:32 bits(4 byte),必须对齐4字节边界 有符号数,无符号数 共6种数据类型2021/7/123存储器模式2.ARM存储器工作模式 (ENDIAN管脚)(1)Big Endian 大端模式u字数据的高位字节存储在低地址中u字数据的低字节则存放在高地址中3124 23 16158 70字地址字地址840低地址低地址 高地址高地址1234 位位123412340 x12345678785634122021/7/124存储器模式(2)Little Endian 小端模式(默认)u低地址中存放字数据的低字节u高地址中存放字数据的高字节3124 23 16158 70字地址字地址840低地址低地址 高地址高地址4321 位位432143210 x12345678123456782021/7/125存储器模式举例2021/7/126ARM编程模型 1.ARM流水线技术 2.存储模式I/O空间 3.工作模式和寄存器组 4.异常和异常向量表 5.AMBA总线 6.JTAG调试接口2021/7/127工作模式和寄存器 ARM有7个基本工作模式 USR FIQ IRQ SVC ABT UND SYS 1、User:用户模式,一般的非特权任务运行的模式l正常程序执行的模式2、FIQ快中断模式:当一个高优先级(fast)中断产生时将会进入这种模式l高速数据传输和通道处理3、IRQ中断模式:当一个低优先级(normal)中断产生时将会进入这种模式l通常的中断处理2021/7/128工作模式和寄存器4、Supervisor管理员(特权)模式(SVC):当复位或软中断指令执行时将会进入这种模式l供操作系统使用的一种保护模式5、Abort中止模式:当存取异常时将会进入这种模式l虚拟存储及存储保护6、Undef未定义模式:当执行未定义指令时会进入这种模式l软件仿真硬件协处理器7、System系统模式:使用和User模式相同寄存器集,权限比用户模式高l系统级的操作系统任务2021/7/129工作模式 工作模式的类型 用户模式:程序不能访问受操作系统保护的资源,也不能改变模式 特权模式:除User之外的其他6种,处理异常和监控调用,可自由访问系统资源和改变模式 异常模式:除系统模式外其他5中特权模式,处理异常和中断 系统模式:不能通过异常进入,操作系统的任务可以访问所需系统和用户资源,不能访问异常寄存器组。确保异常不会破坏任务状态。2021/7/130工作模式 工作模式的切换:软件切换 外部中断或异常 OS控制系统整个资源2021/7/131寄存器 ARM处理器共有37个寄存器(32位)31个通用寄存器 6个状态寄存器 每种工作模式对应一组寄存器:15个通用寄存器 R0R14 一个或两个状态寄存器 一个程序计数器R15(PC)2021/7/132通用寄存器 R0 到 R15 可以直接访问 R0 到 R14 是通用寄存器 R13:堆栈指针(sp)(通常)u每种处理器模式都有单独的堆栈 R14:链接寄存器(LR)R15 包含程序计数器(PC)2021/7/133程序状态寄存器 CPSR 当前程序状态寄存器,包括代码标志状态和当前模式位 5个SPSRs-(程序状态保存寄存器)当异常发生时保存CPSR状态2021/7/134程序状态寄存器ARM7TDMI 包含当前程序状态寄存器(CPSR),加上5个程序状态保存寄存器SPSR,当异常发生时,用于保存CPSR的状态 这些寄存器的功能是:u保存ALU当前操作信息u控制允许和禁止中断u设置处理器操作模式2021/7/135程序状态寄存器 CPSR格式:NZCVIFQT M4M3M2M1M03130 29 28 2701234567控制位控制位条件标志位条件标志位Q标志位标志位2021/7/136 1.条件标志位 Negative Zero Carry oVerflow N=1 结果为负,0-结果为正或0 Z=1 结果为0,0 结果不为0 C=1-有进位无借位,否则 0 V=1-结果溢出,0结果没溢出NZCVIFQT M4M3M2M1M03130 29 28 2701234567程序状态寄存器2021/7/137 2.Q位:bit(27)仅ARM 5TE/J架构支持 指示增强型DSP指令是否溢出 J位:bit(24)仅ARM 5TE/J架构支持 J=1:处理器处于Jazelle状态NZCVIFQT M4M3M2M1M03130 29 28 2701234567程序状态寄存器2021/7/138 控制位 中断禁止位:I =1:禁止 IRQ.F=1:禁止 FIQ.T Bit 仅ARM xT架构支持 T=0:处理器处于 ARM 状态 T=1:处理器处于 Thumb 状态NZCVIFQT M4M3M2M1M03130 29 28 2701234567程序状态寄存器2021/7/139 M控制位 处理器模式 0b10000 User 0b10001 FIQ 0b10010 IRQ 0b10011 Supervisor 0b10111 Abort 0b11011 Undefined 0b11111 SystemNZCVIFQT M4M3M2M1M03130 29 28 2701234567程序状态寄存器2021/7/140ARM编程模型 1.ARM流水线技术 2.存储模式I/O空间 3.工作模式和寄存器组 4.异常和异常向量表 5.AMBA总线 6.JTAG调试接口2021/7/141异常和异常向量表1.异常(Exceptions)内部或外部中断源产生并引起处理器处理一个事件,如外部中断或试图执行未定义指令都会引起异常。程序流程控制的3种方式:(1).顺序执行(2).跳转指令(3).异常中断处理异常之前必须保留处理处理异常之前必须保留处理器的状态器的状态2021/7/142异常和异常向量表2.异常的产生 直接异常:软件中断,未定义指令(包括所要求的协处理器不存在时的协处理器命令)和预取指令 间接异常:数据中止(在Load和Store数据访问时的存储器故障)外部异常:复位,IRQ和FIQ2021/7/143异常和异常向量表 3.异常类型:7种 RESET 复位UND 未定义的指令 SWI 软件中断 PABT 指令预取中止 DABT 数据访问中止 IRQ 外部中断请求 FIQ 快速中断请求2021/7/144异常和异常向量表 5.异常的优先级 异常同时发生时,处理顺序(1)Reset(highest priority)(2)Data abort(3)FIQ(4)IRQ(5)Prefetch abort(6)未定义指令,Software interrupt(最低优先级)互斥的互斥的2021/7/145异常和异常向量表 6.异常向量表 指定各异常中断及其处理程序的对应关系RESETRESET可以从可以从0 x000000000 x00000000开始或开始或0 xffff00000 xffff0000开始,因此开始,因此异常向量异常向量表可以放在上述地址表可以放在上述地址32Bytes2021/7/146本章内容ARM指令分类与格式指令分类与格式3.1寻址方式寻址方式3.2ARM 指令集介绍指令集介绍3.342021/7/1471.ARM指令分类与格式 Load/Store 结构:在通用寄存器中操作 Load/Store从存储器中读取数据,操作后再放回存储器 把寄存器和存储器分开2021/7/1481.ARM指令分类与格式 指令分类(6类)u数据处理指令 使用和改变寄存器的值u数据传送指令 把存储器的值拷贝到寄存器中(load)or 把寄存器中的值拷贝到存储器中(store)uCPSR与通用寄存器间的传送指令u跳转指令u异常中断指令u协处理器指令2021/7/1491.ARM指令分类与格式 指令格式:u3 地址指令格式 在ARM状态中使用u2 地址指令格式 在 ARM和 THUMB 状态下使用2021/7/150指令执行的条件编码指令执行的条件编码1.ARM指令分类与格式 ARM指令的一般编码格式:cond001opcode sRnRdoperand2 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0指令操作符编码指令操作符编码结果影响结果影响CPSR第第1操作数寄存器编码操作数寄存器编码目的寄存器编码目的寄存器编码第第2操作数寄存器编码操作数寄存器编码S,例:例:ANDENS R0,R1,#0X0F2021/7/151条件码域 ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。在ARM的指令编码表中,统一占用编码的最高四位31:28来表示“条件码”(即“cond”)。2021/7/152条件码域-1(P117)条件码后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大=0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出2021/7/153条件码域-2条件码后缀标 志含 义1001LSC清零Z置位无符号数=1011LTN不等于V带符号数1101LEZ置位或(N不等于V)带符号数=1110AL忽略无条件执行2021/7/154ARM指令中的操作符号 1.立即数符号:“#”2.二进制符号:“2_”or“%”3.十六进制符号:“0 x”#0 xFF#%100101012021/7/155移位操作 移位:作为指令的选项 1.逻辑左移:LSL 低位补零 2.算数左移:ASL 低位补零 MOV R0,R1,LSL#2 MOV R0,R1,ASL#2 3.逻辑右移:LSR 高位补零 4.算数右移:ASR 高位用31位值填充 5.循环右移:ROR 左端用右端移出数据补 5.扩展循环右移:RRX 循环包括C位 2021/7/156 2021/7/157本章内容ARM指令分类与格式指令分类与格式1寻址方式寻址方式2ARM 指令集介绍指令集介绍342021/7/158ARM寻址方式 处理器根据指令中的地址信息寻找物理地址的方式 寻址方式种类:F1 立即寻址F2 寄存器寻址F3 寄存器间接寻址F4 基址加偏址寻址 F5 堆栈寻址 F6 块拷贝寻址 F7 相对寻址2021/7/159ARM寻址方式 立即寻址u操作数直接通过指令给出,数据包含在32位编码中ADD R0,R0,#1AND R8,R7,#OxFF立即数:由一个8位常数循环右移偶数位得到2021/7/160ARM寻址方式 寄存器寻址u操作数为寄存器中的数值,指令中地址码为寄存器编号ADD R0,R1,R2ADD R3,R2,R1,LSR#2ADD R3,R2,R1,LSR R42021/7/161ARM寻址方式 寄存器间接寻址u寄存器的值作为存储器地址 LDR R0,R1 STR R0,R12021/7/162ARM寻址方式 基址加偏址寻址u基址寄存器内容与偏移量相加u前变址模式LDR R0,R1,#4 ;R0=R1+4u自动变址模式LDR R0,R1,#4!;R0=R1+4 ;R1=R1+4 u后变址模式LDR R0,R1,#4 ;R0=R1 ;R1=R1+4 2021/7/163ARM寻址方式 基址加偏址寻址u寄存器用作偏移地址LDR R0,R1,R2LDR R0,R1,R2,LSL#2u传送数据类型LDRB R0,R1LDRH R1,R0,#202021/7/164ARM寻址方式 堆栈寻址F 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作Full StackEmpty StackDecending Stack高高地地址址低低地地址址2021/7/165ARM寻址方式四种类型的堆栈工作方式:满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。2021/7/166ARM寻址方式 堆栈寻址uARM指令中,通过Load/Store指令来实现STMFD SP!R1-R7,LRLDMFD SP!R1-R7,LRuThumb指令中,通过Push/Pop指令来实现PUSH R1-R7,LRPOP R1-R7,PC2021/7/167ARM寻址方式 块拷贝寻址u多寄存器传送指令LDM/STM的寻址方式LDMIA R0!,R2-R9 ;将数据加载到R2-R9,R0为基址STMIA R1!,R2-R9;将数据存入到存储器,R1为基址2021/7/168ARM寻址方式 相对寻址 以PC当前值为基址,以指令中的地址标号为偏移量BL SUBA SUBA MOV PC,R142021/7/169本章内容ARM指令分类与格式指令分类与格式1寻址方式寻址方式2ARM 指令集介绍指令集介绍342021/7/1703.ARM指令集介绍 指令分类(6类)u数据处理指令 uLoad/Store指令u状态寄存器访问指令u跳转指令u异常中断指令u协处理器指令2021/7/1713.1数据处理指令 数据处理指令的类别u(1)算术操作 u(2)按位逻辑操作 u(3)寄存器数据传送操作u(4)比较操作2021/7/1723.1数据处理指令 操作数:32-bits;3种指定操作数方式(寻址)u来自寄存器u第二操作数可以是常数(立即数)u移位寄存器操作数 结果:32-bits 宽,放在寄存器中u长乘法产生64位结果2021/7/1733.1数据处理指令ADD r0,r1,r2 r0:=r1+r2ADC r0,r1,r2 r0:=r1+r2+CSUB r0,r1,r2 r0:=r1-r2SBC r0,r1,r2r0:=r1-r2+C-1RSB r0,r1,r2r0:=r2 r1RSC r0,r1,r2r0:=r2 r1+C-1算术操作算术操作2021/7/1743.1数据处理指令按位逻辑操作按位逻辑操作AND r0,r1,r2 r0:=r1 and r2ORR r0,r1,r2r0:=r1 or r2EOR r0,r1,r2r0:=r1 xor r2BIC r0,r1,r2r0:=r1 and(not)r22021/7/1753.1数据处理指令寄存器数据传送寄存器数据传送MOV r0,r2r0:=r2MVN r0,r2r0:=not r2比较操作比较操作CMP r1,r2set cc on r1-r2CMN r1,r2set cc on r1+r2TST r1,r2set cc on r1 and r2TEQ r1,r2set cc on r1 xor r22021/7/1763.2 Load/Store指令 示例:LDMFD R13!,R0,R4-R12,PC 将堆栈中的内存恢复到寄存器,用于函数返回 LDMIA R13!,R0,R4-R12,PC 读取数据到寄存器同时,进行SPSR到CPSR的数据传输2021/7/1773.2 Load/Store指令 单寄存器交换指令(SWP SWPB)u在寄存器和外部存储器之间交换字节或字u格式:SWP,RnSWP R0,R1,R2 将R2指向的存储器的字送给R0,同时将R1中的字数据传送到R2指向的存储器中SWP R0,R0,R22021/7/178SWPB R1,R2,R0将R0指向的内存字节读到R1低8位,其余24为置0;将R2低8为数据传送到R02021/7/1793.ARM指令集介绍 指令分类(6类)u数据处理指令 uLoad/Store指令u状态寄存器访问指令u跳转指令u异常中断指令u协处理器指令2021/7/1803.3 状态寄存器访问指令程序状态寄存器访问指令(MRS,MSR)MRS 程序状态寄存器到通用寄存器的数据传送指令MRS R0,CPSR MSR 通用寄存器到程序状态寄存器的数据传送指令MSR CPSR,R02021/7/1813.4 跳转指令 流程的转移 ARM中有两种方式实现流程的跳转:1.直接向PC寄存器写入目标地址(4GB)2.跳转指令(前后32MB)2021/7/1823.4 跳转指令 根据完成的功能它可以分为以下4种:B 转移指令 BL 带链接的转移指令 BX 带状态切换的转移指令 BLX 带链接和状态切换的转移指令2021/7/1833.4 跳转指令 B和BL指令u分支指令 BB LabelCMP R1,#0BEQ Labelu分支连接 BLu跳到希望的指令中u保存当前的PC至R14并返回BL FUNCTION12021/7/184本章内容汇编语言的伪操作与伪指令汇编语言的伪操作与伪指令1ARM汇编语言程序格式汇编语言程序格式2汇编语言程序设计汇编语言程序设计3CC+与汇编语言的混合编程与汇编语言的混合编程42021/7/185汇编语言的伪操作与伪指令ARM伪操作(Derective)不像机器指令在计算机运行期间由机器执行,是汇编程序对源程序汇编期间由汇编程序处理的。宏指令展开,指令替换等2021/7/186汇编语言的伪操作与伪指令ARM伪操作(Derective)u符号定义伪操作u数据定义伪操作u汇编控制伪操作u其他常用伪操作2021/7/187u符号定义伪操作 1.GBLA GBLL GBLS 2.LCLA LCLL LCLS 3.SETA SETL SETS 4.RLIST2021/7/188 符号定义伪操作(Symbol definition)1.GBLA GBLL GBLS 作用:用于声明一个全局变量并初始化 格式:GBLA 全局数字变量名()GBLL全局逻辑变量名(F)GBLS全局字符串变量名(空)2021/7/189.LCLA LCAL LCAS 作用:用于声明一个局部变量并初始化 LCLA 声明局部算术变量,初始化为0;LCLL 声明局部逻辑变量,初始化为FALSE;LCLS 声明局部的字符串变量,初始化为空;一般只用于宏代码中2021/7/190 3.SETA SETL SETS 作用:给已定义的全局或局部变量赋值 格式:变量 表达式 例:GBLA inta0inta0 SETA 0 xEFGBLL logica1logica1 SETL TRUE2021/7/191u数据定义伪操作(Data Definition)作用:为特定数据分配存储空间以及初始化 1.SPACE 2.DCD DCB DCDU DCQ DCQU DCW DCWU 3.DCFD DCFDU 4.DCFS DCFSU 5.DCDO 6.MAP FEILD2021/7/192 数据定义伪操作 1.SPACE 用于分配一块连续内存单元,并用0初始化,可用“%”代替格式:Label SPACE expr 例:Data0 SPACE 100 ;分配100个字节的内存单元,并用0初始化2021/7/193 2.DCB 分配一段连续的字节内存单元,并初始化 可用“=”代替格式:label DCB expr,expr ;expr可以为-128255的数值或字符串举例:string0 DCB “university”;构造一个字符串,并以字节为单位分配2021/7/194 3.DCD(DCDU)分配一段连续字内存单元,并初始化 可用“&”代替格式:label DCD expr,expr ;DCD分配的内存是字对齐的 label DCDU expr,expr ;DCDU分配的内存不需要字对齐;expr可以为数字表达式或为程序中的标号2021/7/195 9.MAP-定义一个结构化的内存表的首地址 MAP可以用“”代替 格式:MAP expr,base-register 说明:expr:为程序中的标号或数学表达式 无基址寄存器:表达式的值为内存表首地址,此时内存表的位置计数器VAR 设置成该地址值;有基址寄存器:表达式与基址寄存器值的和 用于定义数据结构,并不分配内存2021/7/196 10.FIELD 定义结构化内存表中的数据域 可用“”代替 格式:label FIELD expr ;expr为本数据域所占的字节数2021/7/197 MAP和FIELD 配合使用来定义结构化的内存表结构 MAP伪操作中的base-register寄存器对其后所有FIELD定义的数据域是默认使用的,直到遇到新的包含base-register的MAP伪操作。注意:MAP和FIELD仅仅定义数据结构,并不实际分配内存单元2021/7/198 MAP和FIELD 配合定义的内存表有3种:基于绝对地址的内存表 基于相对地址的内存表 基于PC的内存表2021/7/199 汇编控制伪操作(Assembly control)uIF ELSE ENDIF (|)uWHILE WENDuMACRO MENDuMEXIT2021/7/1100分支 1.IF ELSE ENDIF (|)u根据条件选择把一段源代码包括或排除u格式:IF 逻辑表达式u 指令或伪操作u ELSEu 指令或伪操作u u ENDIF 2021/7/1101循环 2.WHILE WENDu根据条件重复汇编相同或几乎相同的一段代码u示例:count SETA 1u WHILE count3;OSRdyTblprio3|=OSMapTblprio&0 x07;2021/7/1130在程序中,可以用类似下面的代码把优先级别为prio的任务置为就绪状态:OSRdyGrp|=OSMapTblprio3;OSRdyGrp|=OSMapTblprio3;OSRdyTblprio3|=OSMapTblprio&0 x07;OSRdyTblprio3|=OSMapTblprio&0 x07;如果要使一个优先级别为prio的任务脱离就绪状态则可使用如下类似代码:if(OSRdyTblprio3&=-OSMapTblprio&0 x07)=0)if(OSRdyTblprio3&=-OSMapTblprio&0 x07)=0)OSRdyGrp&=-OSMapTblprio3;OSRdyGrp&=-OSMapTblprio3;就绪表的操作就绪表的操作置位与清零置位与清零2021/7/1131内容 C/OS-IIC/OS-II简介简介1 1内核结构内核结构2 2任务管理任务管理3 3时间管理时间管理4 4任务同步与通信任务同步与通信5 5系统移植系统移植6 62021/7/1132任务间通信手段 C/OS中,采用多种方法保护任务之间的共享数据和提供任务之间的通信。u提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来对临界资源进行保护uOSSchedLock()禁止调度保护任务级的共享资源。u提供了经典操作系统任务间通信方法:信号量、邮箱、消息队列,事件标志。2021/7/1133事件控制块ECB 程序4.5 ECB的结构如下 -typedef struct void *OSEventPtr;/*指向消息或消息队列的指针*/INT8U OSEventTblOS_EVENT_TBL_SIZE;/*等待任务列表*/INT16U OSEventCnt;/*计数器(当事件是信号量时)*/INT8U OSEventType;/*事件类型:信号量、邮箱等*/INT8U OSEventGrp;/*等待任务组*/OS_EVENT;与TCB类似的结构,使用两个链表,空闲链表与使用链表所有的通信信号都被看成是事件所有的通信信号都被看成是事件(event),(event),一个称为事件控制块一个称为事件控制块(ECB,(ECB,Event Control Block)Event Control Block)的数据结构来表征每一个具体事件,的数据结构来表征每一个具体事件,ECBECB的结构如下的结构如下2021/7/1134事件控制块ECB的操作对事件控制块进行的操作包括 初始化一个事件控制块OS_EventWaitListInit();使一个任务进入就绪态OS_EventTaskRdy();使一个任务进入等待某事件的状态OS_EventTaskWait();因为等待超时而使一个任务进入就绪态OS_EventTO()。2021/7/1135信号量semaphore 信号量在多任务系统中用于:控制共享资源的使用权、标志事件的发生、使两个任务的行为同步。uC/OS中信号量由两部分组成:信号量的计数值和等待该信号任务的等待任务表。信号量的计数值可以为二进制,也可以是其他整数。系统通过OSSemPend()和OSSemPost()来支持信号量的两种原子操作P()和V()。P()操作减少信号量的值,如果新的信号量的值不大于0,则操作阻塞;V()操作增加信号量的值。2021/7/1136互斥信号量 优先级反转问题 由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。2021/7/1137 优先级反转是在高优级(假设为A)的任务要访问一个被低优先级任务(假设为C)占有的资源时,被阻塞.而此时又有优先级高于占有资源的任务(C)而低于被阻塞的任务(A)的优先级的任务(假设为B)时,于是,占有资源的任务就被挂起(占有的资源仍为它占有),因为占有资源的任务优先级很低,所以,它可能一直被另外的任务挂起.而它占有的资源也就一直不能释放,这样,引起任务A一直没办法执行.而比它优先低的任务却可以执行.所以,一个解决办法就是提高占有资源任务的优先级,让它正常执行,然后释放资源,以让任务A能正常获取资源而得以执行.2021/7/1138 解决方法:优先级继承(priority inheritance);优先级极限(priority ceilings)2021/7/1139邮 箱 邮箱是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。为了在C/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。使用邮箱之前,必须先建立该邮箱。该操作可以通过调用OSMboxCreate()函数来完成,并且要指定指针的初始值。C/OS-II提供了5种对邮箱的操作:OSMboxCreate(),OSMboxPend(),OSMboxPost(),OSMboxAccept()和OSMboxQuery()函数 2021/7/1140任务、中断服务子程序和邮箱之间的关系 T Ta as sk kI IS SR RT Ta as sk kO OS SM Mb bo ox xP Pe en nd d()O OS SM Mb bo ox xA Ac cc ce ep pt t()O OS SM Mb bo ox xQ Qu ue er ry y()O OS SM Mb bo ox xP Po os st t()O OS SM Mb bo ox xP Po os st t()O OS SM Mb bo ox xA Ac cc ce ep pt t()O OS SM Mb bo ox xC Cr re ea at te e()M Ma ai il lb bo ox xM Me es ss sa ag ge e2021/7/1141消息队列 消息队列是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同。为了使用C/OS-II的消息队列功能,需要在OS_CFG.H 文件中,将OS_Q_EN常数设置为1,并且通过常数OS_MAX_QS来决定C/OS-II支持的最多消息队列数。在使用一个消息队列之前,必须先建立该消息队列。这可以通过调用OSQCreate()函数,并定义消息队列中的单元数(消息数)来完成。C/OS-II提供了7个对消息队列进行操作的函数:OSQCreate(),OSQPend(),OSQPost(),OSQPostFront(),OSQAccept(),OSQFlush()和OSQQuery()函数 2021/7/1142任务、中断服务子程序和消息队列之间的关系 T Ta as sk kI IS SR RT Ta as sk kO OS SQ QP Pe en nd d()O OS SQ QA Ac cc ce ep pt t()O OS SQ QQ Qu ue er ry y()O OS SQ QP Po os st t()O OS SQ QP Po os st tF Fr ro on nt t()O OS SQ QF Fl lu us sh h()O OS SQ QP Po os st t()O OS SQ QP Po os st tF Fr ro on nt t()O OS SQ QF Fl lu us sh h()O OS SQ QA Ac cc ce ep pt t()O OS SQ QC Cr re ea at te e()Q Qu ue eu ue eM Me es ss sa ag ge eN N 若有不当之处,请指正,谢谢!若有不当之处,请指正,谢谢!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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