嵌入式系统复习.ppt_第1页
嵌入式系统复习.ppt_第2页
嵌入式系统复习.ppt_第3页
嵌入式系统复习.ppt_第4页
嵌入式系统复习.ppt_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

1 体系结构 体系结构 CISCRISCCISC指令集Intel及其兼容的处理器用最少的机器语言指令来完成所需的计算任务RISC ReducedInstructionsSetComputing嵌入式系统 RISC处理器速度比内存快 寄存器 流水线思想 针对流水线化的处理器优化 RISC和CISC之间的区别 2 3 SamsungS3C44B0X SamsungS3C44B0X微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案 它使用ARM7TDMI核 工作在66MHZ 为了降低系统总成本和减少外围器件 这款芯片中还集成了下列部件 4 体系结构变化 THUMB指令集 T THUMB指令集 32位ARM指令集的子集 按16位指令重新编码代码尺寸小 upto40 compression 简化设计 5 ARM体系结构版本 ARM Thumb体系版本命名格式ARMv4xMARMv字符串体系结构版本号1 8表示变种的字符 MDTEJIS 内核的命名 ARM7TDMI S 6 ARM编程模型 1 ARM流水线技术2 存储模式I O空间3 工作模式和寄存器组4 异常和异常向量表5 AMBA总线6 JTAG调试接口 7 指令流水线 Pipeline 指令流水线是RISC结构的共同点ARM73级ARM95级ARM106级ARMCortexA813级 8 按照冯 诺依曼型计算机执行程序的原理 指令必须是按顺序方式逐条串行执行的 比如加法指令可以分成取指令 指令译码 取操作数 ALU运算 写结果五个步骤 如果有程序中有连续两条这样的指令 在传统的计算机里必须等第一条指令完全结束才能开始执行流水线的好处是 第一条指令开始译码的时候 第二条就可以开始取指令了 9 指令流水线 Pipeline 允许多个操作同时处理 比逐条指令执行快PC指向正被取指的指令 而非正在执行的指令 寄存器读 从寄存器Bank 移位及ALU操作寄存器写 到寄存器Bank Fetch Decode Execute 从存储器中读取指令 解码指令 PCPC PC 4PC 2 PC 8PC 4 ARMThumb 10 三级流水线 Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute 11 指令流水线 Pipeline 更多级的Pipeline ARM10采用了6级流水线 但是处于兼容考虑 直接读取PC值依然等于 当前指令地址 8 12 13 多周期指令 时间片123456781 取ADD译码执行2 取STR译码算地址存数3 取ADD译码执行4 取ADD译码执行5 取ADD译码 冯诺依曼结构 不能同时访问指令和数据存储器 14 ARM95级流水线 哈佛结构数据和指令分别进行独立编址步骤 取指 译码 执行 缓冲 写回取指 从程序存储器中取 指令流水线译码 读取寄存器操作数执行 如果是LDR STR 则计算地址缓冲 LDR STR访问数据存储器 否则缓冲写回 结果写到寄存器中 15 16 指令流水线 Pipeline 流水线的效率也可能低下 两个原因 1 相关性问题 一是如果第一条指令的结果是第二条指令执行所需要的 那么就出现了相关性问题 这就导致流水线必须停下来等前面的运算结束才能够继续后面的指令 解决这个问题的办法有乱序执行技术 17 指令流水线 Pipeline 2 程序转移问题 由于无法事先判断转移指令会走那一边 所以必须等待结果出现 由于这样的指令在程序中数量众多 通常会导致流水线的停顿状况非常严重 解决的方法 一般是通过风险的预测执行或强行并行执行来解决 18 ARM编程模型 1 ARM流水线技术2 存储模式I O空间3 工作模式和寄存器组4 异常和异常向量表5 AMBA总线6 JTAG调试接口 19 处理器的工作状态 ARM7TDMI处理器有两种工作状态 ARM 32 bit 按字排列的ARM指令集Thumb 16 bit 按半字排列的Thumb指令集ARM7TDMI核的操作状态可能通过BX指令 分支和交换指令 在ARM状态和Thumb状态之间切换 20 例 从ARM状态切换到Thumb状态 LDRR0 Label 1BXR0从Thumb状态切换到ARM状态 LDRR0 LabelBXR0 21 存储器模式 1 I O存储空间ARM32位架构 I O空间采用统一编址方式地址从0 x00000000开始以字节为单位的线性组合地址空间 232 4GB 0 232 1230个32位的字单元231个16位的半字单元地址 32位无符号数 可加减运算结果232取模 22 数据和指令类型ARM32位地址线 数据线 支持如下数据类型 Byte 8bitsHalfword 16bits 2byte 必须对齐2字节边界Word 32bits 4byte 必须对齐4字节边界有符号数 无符号数共6种数据类型 23 存储器模式 2 ARM存储器工作模式 ENDIAN管脚 1 BigEndian大端模式字数据的高位字节存储在低地址中字数据的低字节则存放在高地址中 24 存储器模式 2 LittleEndian小端模式 默认 低地址中存放字数据的低字节高地址中存放字数据的高字节 25 存储器模式举例 26 ARM编程模型 1 ARM流水线技术2 存储模式I O空间3 工作模式和寄存器组4 异常和异常向量表5 AMBA总线6 JTAG调试接口 27 工作模式和寄存器 ARM有7个基本工作模式USRFIQIRQSVCABTUNDSYS1 User 用户模式 一般的非特权任务运行的模式正常程序执行的模式2 FIQ快中断模式 当一个高优先级 fast 中断产生时将会进入这种模式高速数据传输和通道处理3 IRQ中断模式 当一个低优先级 normal 中断产生时将会进入这种模式通常的中断处理 28 工作模式和寄存器 4 Supervisor管理员 特权 模式 SVC 当复位或软中断指令执行时将会进入这种模式供操作系统使用的一种保护模式5 Abort中止模式 当存取异常时将会进入这种模式虚拟存储及存储保护6 Undef未定义模式 当执行未定义指令时会进入这种模式软件仿真硬件协处理器7 System系统模式 使用和User模式相同寄存器集 权限比用户模式高系统级的操作系统任务 工作模式 工作模式的类型用户模式 程序不能访问受操作系统保护的资源 也不能改变模式特权模式 除User之外的其他6种 处理异常和监控调用 可自由访问系统资源和改变模式异常模式 除系统模式外其他5中特权模式 处理异常和中断系统模式 不能通过异常进入 操作系统的任务可以访问所需系统和用户资源 不能访问异常寄存器组 确保异常不会破坏任务状态 29 30 工作模式 工作模式的切换 软件切换外部中断或异常OS控制系统整个资源 31 寄存器 ARM处理器共有37个寄存器 32位 31个通用寄存器6个状态寄存器每种工作模式对应一组寄存器 15个通用寄存器R0 R14一个或两个状态寄存器一个程序计数器R15 PC 32 通用寄存器 R0到R15可以直接访问R0到R14是通用寄存器R13 堆栈指针 sp 通常 每种处理器模式都有单独的堆栈R14 链接寄存器 LR R15包含程序计数器 PC 33 程序状态寄存器 CPSR 当前程序状态寄存器 包括代码标志状态和当前模式位5个SPSRs 程序状态保存寄存器 当异常发生时保存CPSR状态 34 程序状态寄存器 ARM7TDMI包含当前程序状态寄存器 CPSR 加上5个程序状态保存寄存器SPSR 当异常发生时 用于保存CPSR的状态这些寄存器的功能是 保存ALU当前操作信息控制允许和禁止中断设置处理器操作模式 35 程序状态寄存器 CPSR格式 36 1 条件标志位NegativeZeroCarryoVerflowN 1结果为负 0 结果为正或0Z 1结果为0 0结果不为0C 1 有进位无借位 否则0V 1 结果溢出 0结果没溢出 程序状态寄存器 37 2 Q位 bit 27 仅ARM5TE J架构支持指示增强型DSP指令是否溢出J位 bit 24 仅ARM5TE J架构支持J 1 处理器处于Jazelle状态 程序状态寄存器 38 控制位中断禁止位 I 1 禁止IRQ F 1 禁止FIQ TBit仅ARMxT架构支持T 0 处理器处于ARM状态T 1 处理器处于Thumb状态 程序状态寄存器 39 M控制位处理器模式0b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System 程序状态寄存器 40 ARM编程模型 1 ARM流水线技术2 存储模式I O空间3 工作模式和寄存器组4 异常和异常向量表5 AMBA总线6 JTAG调试接口 41 异常和异常向量表 1 异常 Exceptions 内部或外部中断源产生并引起处理器处理一个事件 如外部中断或试图执行未定义指令都会引起异常 程序流程控制的3种方式 1 顺序执行 2 跳转指令 3 异常中断 处理异常之前必须保留处理器的状态 42 异常和异常向量表 2 异常的产生直接异常 软件中断 未定义指令 包括所要求的协处理器不存在时的协处理器命令 和预取指令间接异常 数据中止 在Load和Store数据访问时的存储器故障 外部异常 复位 IRQ和FIQ 43 异常和异常向量表 3 异常类型 7种RESET复位UND未定义的指令SWI软件中断PABT指令预取中止DABT数据访问中止IRQ外部中断请求FIQ快速中断请求 44 异常和异常向量表 5 异常的优先级异常同时发生时 处理顺序 1 Reset highestpriority 2 Dataabort 3 FIQ 4 IRQ 5 Prefetchabort 6 未定义指令 Softwareinterrupt 最低优先级 45 异常和异常向量表 6 异常向量表指定各异常中断及其处理程序的对应关系 RESET可以从0 x00000000开始或0 xffff0000开始 因此异常向量表可以放在上述地址 46 本章内容 ARM指令分类与格式 3 1 寻址方式 3 2 ARM指令集介绍 3 3 4 47 1 ARM指令分类与格式 Load Store结构 在通用寄存器中操作Load Store从存储器中读取数据 操作后再放回存储器把寄存器和存储器分开 48 1 ARM指令分类与格式 指令分类 6类 数据处理指令 使用和改变寄存器的值数据传送指令 把存储器的值拷贝到寄存器中 load or把寄存器中的值拷贝到存储器中 store CPSR与通用寄存器间的传送指令跳转指令异常中断指令协处理器指令 49 1 ARM指令分类与格式 指令格式 3地址指令格式在ARM状态中使用2地址指令格式在ARM和THUMB状态下使用 50 1 ARM指令分类与格式 ARM指令的一般编码格式 312827252421201916151211870 S 例 ANDENSR0 R1 0X0F 51 条件码域 ARM指令根据CPSR中的条件位自动判断是否执行指令 在条件满足时 指令执行 否则指令被忽略 在ARM的指令编码表中 统一占用编码的最高四位 31 28 来表示 条件码 即 cond 52 条件码域 1 P117 53 条件码域 2 54 ARM指令中的操作符号 1 立即数符号 2 二进制符号 2 or 3 十六进制符号 0 x 0 xFF 10010101 55 移位操作 移位 作为指令的选项1 逻辑左移 LSL低位补零2 算数左移 ASL低位补零MOVR0 R1 LSL 2MOVR0 R1 ASL 23 逻辑右移 LSR高位补零4 算数右移 ASR高位用31位值填充5 循环右移 ROR左端用右端移出数据补5 扩展循环右移 RRX循环包括C位 56 57 本章内容 ARM指令分类与格式 1 寻址方式 2 ARM指令集介绍 3 4 58 ARM寻址方式 处理器根据指令中的地址信息寻找物理地址的方式寻址方式种类 1立即寻址2寄存器寻址3寄存器间接寻址4基址加偏址寻址5堆栈寻址6块拷贝寻址7相对寻址 59 ARM寻址方式 立即寻址操作数直接通过指令给出 数据包含在32位编码中ADDR0 R0 1ANDR8 R7 OxFF立即数 由一个8位常数循环右移偶数位得到 60 ARM寻址方式 寄存器寻址操作数为寄存器中的数值 指令中地址码为寄存器编号ADDR0 R1 R2ADDR3 R2 R1 LSR 2ADDR3 R2 R1 LSRR4 61 ARM寻址方式 寄存器间接寻址寄存器的值作为存储器地址LDRR0 R1 STRR0 R1 62 ARM寻址方式 基址加偏址寻址基址寄存器内容与偏移量相加前变址模式LDRR0 R1 4 R0 R1 4 自动变址模式LDRR0 R1 4 R0 R1 4 R1 R1 4后变址模式LDRR0 R1 4 R0 R1 R1 R1 4 63 ARM寻址方式 基址加偏址寻址寄存器用作偏移地址LDRR0 R1 R2 LDRR0 R1 R2 LSL 2 传送数据类型LDRBR0 R1 LDRHR1 R0 20 64 ARM寻址方式 堆栈寻址 堆栈是一种数据结构 按先进后出 FirstInLastOut FILO 的方式工作 65 ARM寻址方式 四种类型的堆栈工作方式 满递增堆栈 堆栈指针指向最后压入的数据 且由低地址向高地址生成 满递减堆栈 堆栈指针指向最后压入的数据 且由高地址向低地址生成 空递增堆栈 堆栈指针指向下一个将要放入数据的空位置 且由低地址向高地址生成 空递减堆栈 堆栈指针指向下一个将要放入数据的空位置 且由高地址向低地址生成 66 ARM寻址方式 堆栈寻址ARM指令中 通过Load Store指令来实现STMFDSP R1 R7 LR LDMFDSP R1 R7 LR Thumb指令中 通过Push Pop指令来实现PUSH R1 R7 LR POP R1 R7 PC 67 ARM寻址方式 块拷贝寻址多寄存器传送指令LDM STM的寻址方式LDMIAR0 R2 R9 将数据加载到R2 R9 R0为基址STMIAR1 R2 R9 将数据存入到存储器 R1为基址 68 ARM寻址方式 相对寻址以PC当前值为基址 以指令中的地址标号为偏移量BLSUBA SUBA MOVPC R14 69 本章内容 ARM指令分类与格式 1 寻址方式 2 ARM指令集介绍 3 4 70 3 ARM指令集介绍 指令分类 6类 数据处理指令Load Store指令状态寄存器访问指令跳转指令异常中断指令协处理器指令 71 3 1数据处理指令 数据处理指令的类别 1 算术操作 2 按位逻辑操作 3 寄存器数据传送操作 4 比较操作 72 3 1数据处理指令 操作数 32 bits 3种指定操作数方式 寻址 来自寄存器第二操作数可以是常数 立即数 移位寄存器操作数结果 32 bits宽 放在寄存器中长乘法产生64位结果 73 3 1数据处理指令 算术操作 74 3 1数据处理指令 按位逻辑操作 75 3 1数据处理指令 寄存器数据传送 比较操作 76 3 2Load Store指令 示例 LDMFDR13 R0 R4 R12 PC 将堆栈中的内存恢复到寄存器 用于函数返回LDMIAR13 R0 R4 R12 PC 读取数据到寄存器同时 进行SPSR到CPSR的数据传输 77 3 2Load Store指令 单寄存器交换指令 SWPSWPB 在寄存器和外部存储器之间交换字节或字格式 SWP Rn SWPR0 R1 R2 将R2指向的存储器的字送给R0 同时将R1中的字数据传送到R2指向的存储器中SWPR0 R0 R2 78 SWPBR1 R2 R0 将R0指向的内存字节读到R1低8位 其余24为置0 将R2低8为数据传送到 R0 79 3 ARM指令集介绍 指令分类 6类 数据处理指令Load Store指令状态寄存器访问指令跳转指令异常中断指令协处理器指令 80 3 3状态寄存器访问指令 程序状态寄存器访问指令 MRS MSR MRS程序状态寄存器到通用寄存器的数据传送指令MRSR0 CPSRMSR通用寄存器到程序状态寄存器的数据传送指令MSRCPSR R0 81 3 4跳转指令 流程的转移ARM中有两种方式实现流程的跳转 1 直接向PC寄存器写入目标地址 4GB 2 跳转指令 前后32MB 82 3 4跳转指令 根据完成的功能它可以分为以下4种 B转移指令BL带链接的转移指令BX带状态切换的转移指令BLX带链接和状态切换的转移指令 83 3 4跳转指令 B和BL指令分支指令BBLabelCMPR1 0BEQLabel分支连接BL跳到希望的指令中保存当前的PC至R14并返回BLFUNCTION1 84 本章内容 汇编语言的伪操作与伪指令 1 ARM汇编语言程序格式 2 汇编语言程序设计 3 C C 与汇编语言的混合编程 4 85 汇编语言的伪操作与伪指令 ARM伪操作 Derective 不像机器指令在计算机运行期间由机器执行 是汇编程序对源程序汇编期间由汇编程序处理的 宏指令展开 指令替换等 86 汇编语言的伪操作与伪指令 ARM伪操作 Derective 符号定义伪操作数据定义伪操作汇编控制伪操作其他常用伪操作 87 符号定义伪操作1 GBLAGBLLGBLS2 LCLALCLLLCLS3 SETASETLSETS4 RLIST 88 符号定义伪操作 Symboldefinition 1 GBLAGBLLGBLS作用 用于声明一个全局变量并初始化格式 GBLA全局数字变量名 GBLL全局逻辑变量名 F GBLS全局字符串变量名 空 89 LCLALCALLCAS作用 用于声明一个局部变量并初始化LCLA 声明局部算术变量 初始化为0 LCLL 声明局部逻辑变量 初始化为 FALSE LCLS 声明局部的字符串变量 初始化为空 一般只用于宏代码中 90 3 SETASETLSETS作用 给已定义的全局或局部变量赋值格式 变量表达式例 GBLAinta0inta0SETA0 xEFGBLLlogica1logica1SETL TRUE 91 数据定义伪操作 DataDefinition 作用 为特定数据分配存储空间以及初始化1 SPACE2 DCDDCBDCDUDCQDCQUDCWDCWU3 DCFDDCFDU4 DCFSDCFSU5 DCDO6 MAPFEILD 92 数据定义伪操作1 SPACE用于分配一块连续内存单元 并用0初始化 可用 代替格式 Label SPACEexpr例 Data0SPACE100 分配100个字节的内存单元 并用0初始化 93 2 DCB分配一段连续的字节内存单元 并初始化可用 代替格式 label DCBexpr expr expr可以为 128 255的数值或字符串举例 string0DCB university 构造一个字符串 并以字节为单位分配 94 3 DCD DCDU 分配一段连续字内存单元 并初始化可用 expr可以为数字表达式或为程序中的标号 95 9 MAP 定义一个结构化的内存表的首地址MAP可以用 代替格式 MAPexpr base register 说明 expr 为程序中的标号或数学表达式无基址寄存器 表达式的值为内存表首地址 此时内存表的位置计数器 VAR 设置成该地址值 有基址寄存器 表达式与基址寄存器值的和用于定义数据结构 并不分配内存 96 10 FIELD 定义结构化内存表中的数据域可用 代替格式 label FIELDexpr expr为本数据域所占的字节数 97 MAP和FIELD配合使用来定义结构化的内存表结构MAP伪操作中的base register寄存器对其后所有FIELD定义的数据域是默认使用的 直到遇到新的包含base register的MAP伪操作 注意 MAP和FIELD仅仅定义数据结构 并不实际分配内存单元 98 MAP和FIELD配合定义的内存表有3种 基于绝对地址的内存表基于相对地址的内存表基于PC的内存表 99 汇编控制伪操作 Assemblycontrol IFELSEENDIF WHILEWENDMACROMENDMEXIT 100 分支 1 IFELSEENDIF 根据条件选择把一段源代码包括或排除格式 IF逻辑表达式指令或伪操作 ELSE指令或伪操作 ENDIF 101 循环 2 WHILEWEND根据条件重复汇编相同或几乎相同的一段代码示例 countSETA1WHILEcount 4countSETAcount 1 codesWEND 102 其他常用伪操作CODE16CODE32 ThumborARMAREA 定义一个代码段或数据段EQU 为数字常量 寄存器值和标号定义名称ENTRY 程序的入口点END 源程序结尾 在程序结构中讲 103 ARM伪指令 ARM伪指令 pseudo instruction 伪指令 不是真正指令 编译时替换成对于的指令ADR 小范围地址读取指令ADRL 中等范围地址读取指令LDR 大范围地址读取指令NOP 空操作 104 3 LDR 大范围地址读取伪指令 将一个32位立即数或地址值读取到寄存器中格式 LDR cond register expr label expr expr为32位的常量 编译器将会根据expr取值的情况 做如下处理 当expr地址值未超过MOV或MVN指令中地址 用MOV或MVN指令替代 当expr表示的地址值超过了MOV或MVN指令中地址 用一条基于PC的LDR指令读取该常数 105 LDR cond register expr label expr Label expr为基于PC的地址表达式或是外部表达式 当Label expr为基于PC的地址表达式时 编译器将其表示的数值放在数据缓冲区中 同时用一条基于PC的LDR指令读取该数值 当Label expr为外部表达式 或非当前段的表达式时 汇编器将在目标文件中插入链接重定位的伪操作 这样链接器将在链接时生成该地址 106 LDR伪指令有以下两种用途 当需要读取到寄存器中的数据超过了MOV及MVN指令可以操作的范围时 可以使用LDR伪指令将该数据读取到寄存器中 将一个基于PC的地址值或外部地址值读取到寄存器中 由于这种地址是在链接时确定的 所以这种代码不是位置无关的 同时LDR伪指令处的PC值到数据缓冲区中的目标数据所在的地址的偏移量要小于4KB 内容 C OS II简介 1 内核结构 2 任务管理 3 中断 时间节拍管理 4 任务同步与通信 5 系统移植 6 107 RTOS在嵌入式系统中的位置 嵌入式硬件平台 BSP KERNEL FS TCP IP 设备驱动 设备I O 调试工具 其它组件 应用 RTOS C C 108 RTOS是32位的嵌入式CPU的软件基础 RTOS内核提供CPU的管理硬件初时化 MMU 定时器 中断RTOS内核提供任务 内存管理RTOS提供设备管理 文件和网络的支持RTOS提供C C JAVA 图形模块等编程接口 109 公开源代码可移植性 Portable 绝大部分 C OS II的源码是用移植性很强的ANSIC写的 和微处理器硬件相关的那部分是用汇编语言写的 汇编语言写的部分已经压到最低限度 使得 C OS II便于移植到其他微处理器上 C OS II可以在绝大多数8位 16位 32位以至64位微处理器 微控制器 数字信号处理器 DSP 上运行 可固化 ROMable C OS II是为嵌入式应用而设计的 这就意味着 只要读者有固化手段 C编译 连接 下载和固化 C OS II可以嵌入到读者的产品中成为产品的一部分 可裁剪 Scalable 可以只使用 C OS II中应用程序需要的那些系统服务 也就是说某产品可以只使用很少几个 C OS II调用 而另一个产品则使用了几乎所有 C OS II的功能 这样可以减少产品中的 C OS II所需的存储器空间 RAM和ROM 这种可剪裁性是靠条件编译实现的 C OS的性能特点 一 110 占先式 Preemptive 多任务 C OS II可以管理64个任务 然而 目前这一版本保留8个给系统 应用程序最多可以有56个任务可确定性全部 C OS II的函数调用与服务的执行时间具有可确定性 任务栈每个任务有自己单独的栈 C OS II允许每个任务有不同的栈空间 以便压低应用程序对RAM的需求 系统服务 C OS II提供很多系统服务 例如邮箱 消息队列 信号量 块大小固定的内存的申请与释放 时间相关函数等 中断管理中断可以使正在执行的任务暂时挂起 如果优先级更高的任务被该中断唤醒 则高优先级的任务在中断嵌套全部退出后立即执行 中断嵌套层数可达255层 稳定性与可靠性 C OS的性能特点 二 111 内容 C OS II简介 1 内核结构 2 任务管理 3 4 任务同步与通信 5 6 112 中断 时间节拍管理 系统移植 5 3任务管理 任务管理 113 5 3任务管理 定义 5 3 1什么是任务 完成特定功能的程序实体 线程 解决用户问题的函数及相关数据结构典型的任务 114 voidmytask void pdata for dosomething waiting dosomething 是一个无限循环 voidYourTask void pdata 用户代码 OSTaskDel OS PRIO SELF 5 3任务管理 类型 用户任务 应用程序设计者编写的任务 解决应用问题系统任务 系统提供 为应用程序提供服务 空闲任务OSTaskIdle 运行次数计数 统计任务OSTaskstat 计数CUP利用率 115 5 3任务管理 优先级 C OS II规定 每个任务都必须有一个唯一的优先级 是识别任务的唯一标识符C OS II2 5版本支持64个任务 0 63在OS CFG H中设置常数 OS LOWEST PRIO系统占用了8个任务 保留优先级为0 1 2 3 OS LOWEST PRIO 3 OS LOWEST PRIO 2 OS LOWEST PRIO 1 OS LOWEST PRIO 0 116 5 3任务管理 存储结构 任务的存储结构 任务程序代码 任务堆栈和任务控制块 TCB 117 任务控制块 TCB 任务控制块OS TCB是一个数据结构 保存任务相关参数 118 TCB结构的主要成员typedefstructos tcb OS STK OSTCBStkPtr 任务堆栈指针 INT8UOSTCBStat 任务当前状态标志INT8UOSTCBPrio 优先级structos tcb OSTCBNext 指向后面任务块structos tcb OSTCBNPrev 指向前面任务块 OS TCB 5 3任务管理 TCB链表 119 5 3任务管理 任务的状态 120 没有TCB 具备了运行的充分条件 运行态任务 需要等待一段时间或事件 把CPU的使用权让出 一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序 处于就绪状态的任务如果获得了CPU的使用权 任务的状态转换 121 5 3任务管理 任务管理 122 5 3任务管理 任务调度 调度 通过算法在多任务中确定运行哪个任务调度器 实现调度的函数 123 C OS II调度思想 近似地每时每刻总是让优先级最高的就绪任务处于运行状态依据 任务就绪表 124 5 3任务管理 任务调度 1 任务就绪表的结构一维数组 INT8UOSRdyTbl 8 变量 INT8UOSRdyGrp 125 5 3任务管理 任务就绪表 126 为加快访问任务就绪表的速度 系统定义了一个变量OSRdyGrp来表明就绪表每行中是否存在就绪任务 OSRdyTbl 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 1 01 01 01 01 01 01 01 0 OSRdyGrp D7D6D5D4D3D2D1D0 1 01 01 01 01 01 01 01 0 任务就绪表的示意图 0 1 2 3 4 5 6 7 x y 0 1 2 3 4 5 6 7 127 5 3任务管理 任务就绪表 2 任务就绪表操作 置位 某个优先级的任务进入就绪状态清零 某个优先级的任务脱离就绪状态查询 最高优先级的就绪任务 128 D7D6D5D4D3D2D1D0 1 1 1 1 0 0 0 0 prio 29 把prio为29的任务置为就绪状态 OSRdyGrp OSMapTbl prio 3 OSRdyTbl prio 3 OSMapTbl prio 129 130 在程序中 可以用类似下面的代码把优先级别为prio的任务置为就绪状态 OSRdyGrp OSMapTbl prio 3 OSRdyTbl prio 3 OSMapTbl prio 如果要使一个优先级别为prio的任务脱离就绪状态则可使用如下类似代码 if OSRdyTbl prio 3 就绪表的操作 置位与清零 内容 C OS II简介 1 内核结构 2 任务管理 3 时间管理 4 任务同步与通信 5 系统移植 6 131 任务间通信手段 C OS中 采用多种方法保护任务之间的共享数据和提供任务之间的通信 提供OS ENTER CRITICAL和OS EXIT CRITICAL来对临界资源进行保护OSSchedLock 禁止调度保护任务级的共享资源 提供了经典操作系统任务间通信方法 信号量 邮箱 消息队列 事件标志 132 事件控制块ECB 程序4 5ECB的结构如下 typedefstruct void OSEventPtr 指向消息或消息队列的指针 INT8UOSEventTbl OS EVENT TBL SIZE 等待任务列表 INT16UOSEventCnt 计数器 当事件是信号量时 INT8UOSEventType 事件类型 信号量 邮箱等 INT8UOSEventGrp 等待任务组 OS EVENT 与TCB类似的结构 使用两个链表 空闲链表与使用链表 所有的通信信号都被看成是事件 event 一个称为事件控制块 ECB EventControlBlock 的数据结构来表征每一个具体事件 ECB的结构如下 133 事件控制块ECB的操作 对事件控制块进

温馨提示

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

评论

0/150

提交评论