ucos-ii的中断_1.ppt_第1页
ucos-ii的中断_1.ppt_第2页
ucos-ii的中断_1.ppt_第3页
ucos-ii的中断_1.ppt_第4页
ucos-ii的中断_1.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第3章 C OS 的中断和时钟 本章主要内容 概述 从发展过程来看 中断 interrupt 最初被用来替换I O操作的轮询处理方式 以提高I O处理的效率 随后 中断又包含了自陷 trap 也称为内部中断或是软件中断 的功能 后来 中断的概念得到进一步扩大 被定义为导致程序正常执行流程发生改变的事件 不包括程序的分支情况 可把概念被扩大的中断称为广义中断 概述 在实际应用中 广义的中断通常被分为中断 自陷和异常 exception 等类别 中断是由于CPU外部的原因而改变程序执行流程的过程 属于异步事件 又称为硬件中断 自陷和异常则为同步事件 自陷表示通过处理器所拥有的软件指令 可预期地使处理器正在执行的程序的执行流程发生变化 以执行特定的程序 自陷是显式的事件 需要无条件地执行 Motorola68000系列中的Trap指令ARM中的SWI指令Intel80 x86中的INT指令 概述 异常为CPU自动产生的自陷 以处理异常事件 如被0除 执行非法指令和内存保护故障等 异常没有对应的处理器指令 当异常事件发生时 处理器也需要无条件地挂起当前运行的程序 执行特定的处理程序 中断的分类 分类方式硬件中断是否可以被屏蔽 可屏蔽中断和不可屏蔽中断中断源 硬件中断和软件中断中断信号的产生 边缘触发中断和电平触发中断中断服务程序的调用方式 向量中断 直接中断和间接中断 可屏蔽中断和不可屏蔽中断 由于中断的发生是异步的 程序的正常执行流程随时有可能被中断服务程序打断 如果程序正在进行某些重要运算 中断服务程序的插入将有可能改变某些寄存器的数据 造成程序的运行发生错误 可屏蔽中断 能够被屏蔽掉的中断 外部设备的中断请求信号一般需要先通过CPU外部的中断控制器 再与CPU相应的引脚相连 可编程中断控制器可以通过软件进行控制 以禁止或是允许中断 不可屏蔽中断 在任何时候都不可屏蔽的 一个比较典型的例子是掉电中断 当发生掉电时 无论程序正在进行什么样的运算 它都肯定无法正常运行下去 这种情况下 急需进行的是一些掉电保护的操作 对这类中断 应随时进行响应 硬件中断和软件中断 硬件中断 由于CPU外部的设备所产生的中断 异步事件 可能在程序执行的任何位置发生 发生中断的时间通常是不确定的 软件中断 同步中断或是自陷 通过处理器的软件指令来实现 产生中断的时机是预知的 可根据需要在程序中进行设定 软件中断的处理程序以同步的方式进行执行 其处理方式同硬件中断处理程序类似 硬件中断和软件中断 软件中断是一种非常重要的机制 系统可通过该机制在用户模式执行特权模式下的操作 是软件调试的一个重要手段 如Intel80 x86中的INT3 使指令进行单步执行 调试器可以用它来形成观察点 并查看随程序执行而动态变化的事件情况 边缘触发中断和电平触发中断 边缘触发中断 中断线从低变到高或是从高变到低时 中断信号就被发送出去 并只有在下一次的从低变到高或是从高变到低时才会再度触发中断 事件发生的时间非常短 有可能出现中断控制器丢失中断的情况 如果多个设备连接到同一个中断线 即使只有一个设备产生了中断信号 也必须调用中断线对应的所有中断服务程序来进行匹配 否则会出现中断的软件丢失情况 边缘触发中断和电平触发中断 电平触发中断 在硬件中断线的电平发生变化时产生中断信号 并且中断信号的有效性将持续保持下去 直到中断信号被清除 能够降低中断信号传送丢失的情况能通过更有效的方式来服务中断 每个为该中断服务后的ISR都要向外围设备进行确认 然后取消该设备对中断线的操作 当中断线的最后一个设备得到中断服务后 中断线的电平就会发生变化 不用对连接到同一个硬件中断线的所有中断服务程序进行尝试 向量中断 直接中断和间接中断 向量中断 通过中断向量来调用中断服务程序 直接中断 中断对应的中断服务程序的入口地址是一个固定值 当中断发生的时候 程序执行流程将直接跳转到中断服务程序的入口地址 执行中断服务程序 间接中断 中断服务程序的入口地址由寄存器提供 向量中断 中断硬件设备的硬件中断线 也称为中断请求IRQ 被中断控制器汇集成中断向量 interruptvector 每个中断向量对应一个中断服务程序 interruptserviceroutine ISR 用来存放中断服务程序的入口地址或是中断服务程序的第一条指令 系统中通常包含多个中断向量 存放这些中断向量对应中断服务程序入口地址的内存区域被称为中断向量表 向量中断 在Intel80 x86处理器中 中断向量表包含256个入口 每个中断向量需要四个字节 存放中断服务程序的首址 ARM的中断向量表开始于内存地址0 x00000000或是0 xFFFF0000处 中断控制器 对多个可屏蔽中断源进行管理 使CPU核心能和更多的中断资源相联系 能够对中断进行排队 避免中断信号的丢失对不同的中断进行优先级配置 使高优先级中断能够中断低优先级中断 满足系统中具有更高时间约束特性功能的需要 中断控制器 在基于x86的架构中 8259是一个非常通用的中断控制器芯片 称为PIC programmableinterruptcontroller 每个PIC只能够处理8个中断 为支持更多数量的中断 需要组织成菊花链 daisychain 的方式 把一个PIC的输出连接到另一个PIC的输入上 C OS II系统响应中断的过程 C OS II系统响应中断的过程为 系统接收到中断请求后 这时如果CPU处于中断允许状态 即中断是开放的 系统就会中止正在运行的当前任务 而按照中断向量的指向转而去运行中断服务子程序 当中断服务子程序的运行结束后 系统将会根据情况返回到被中止的任务继续运行或者转向运行另一个具有更高优先级别的就绪任务 注意 中断服务子程序运行结束之后 系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务 而并不是一定要接续运行被中断的任务的 中断请求 关闭中断 转到中断向量 保存CPU寄存器 通知内核退出ISR ISR给任务发信号 中断返回 恢复CPU寄存器 中断响应 中断恢复 中断恢复 任务响应时间 任务响应时间 无新高级任务则返回原任务 通知内核进入ISR 任务响应时间 中断响应时间 ISR运行时间 中断恢复时间 voidOSIntEnter void if OSRunning TRUE if OSIntNesting 255 OSIntNesting 中断嵌套层数计数器加一 voidOSIntExit void ifOS CRITICAL METHOD 3OS CPU SRcpu sr endifif OSRunning TRUE OS ENTER CRITICAL if OSIntNesting 0 OSIntNesting 中断嵌套层数计数器减一 if OSIntNesting 0 OSRunning不受中断的影响 哪个大 在中断服务程序中调用的负责任务切换工作的函数OSIntCtxSw 叫做中断级任务切换函数 OSIntCtxSw OSTCBCur OSTCBHighRdy 任务控制块的切换OSPrioCur OSPrioHighRdy SP OSTCBHighRdy OSTCBStkPtr SP指向待运行任务堆栈用出栈指令把R1 R2 弹入CPU的通用寄存器 RETI 中断返回 使PC指向待运行任务 汇编语言编写 应用程序中的临界段 在应用程序中经常有一些代码段必须不受任何干扰地连续运行 这样的代码段叫做临界段 因此 为了使临界段在运行时不受中断所打断 在临界段代码前必须用关中断指令使CPU屏蔽中断请求 而在临界段代码后必须用开中断指令解除屏蔽使得CPU可以响应中断请求 由于各厂商生产的CPU和C编译器的关中断和开中断的方法和指令不尽相同 为增强 C OS II的可移植性 即在 C OS II的各个C函数中尽可能地不出现汇编语言代码 C OS II用两个宏来实现中断的开放和关闭 而把与系统的硬件相关的关中断和开中断的指令分别封装在这两个宏中 OS ENTER CRITICAL OS EXIT CRITICAL 第一种方法最简单 即直接使用处理器的开中断和关中断指令来实现宏 这时需要令常数OS CRITICAL METHOD 1 defineOS ENTER CRITICAL asm DI 关中断 defineOS EXIT CRITICAL asm EI 开中断 第二种方法稍微复杂一些 但可以使CPU中断允许标志的状态 在临界段前和临界段后不发生改变 在宏OS ENTER CRITICAL 中 把CPU的允许中断标志保持到堆栈中 然后再关闭中断 这样在临界段结束时 即在调用宏OS EXIT CRITICAL 时只要把堆栈中保存的CPU允许中断状态恢复就可以了 defineOS ENTER CRITICAL asm PUSHPSW 通过保存程序状态字来保存中断允许标志 asm DI 关中断 defineOS EXIT CRITICAL asm POPPSW 恢复中断允许标志 第三种方法的前提是 用户使用的编译器可获得程序状态字的值 可以把该值保存到C语言函数的局部变量中 而不必压到堆栈里 defineOS ENTER CRITICAL cpu sr get processor psw disable interrupts defineOS EXIT CRITICAL set processor psw cpu sr C OS II的系统时钟 C OS II与大多数计算机系统一样 用硬件定时器产生一个周期为ms级的周期性中断来实现系统时钟 最小的时钟单位就是两次中断之间相间隔的时间 这个最小时钟单位叫做时钟节拍 TimeTick 硬件定时器以时钟节拍为周期定时地产生中断 该中断的中断服务程序叫做OSTickISR 中断服务程序通过调用函数OSTimeTick 来完成系统在每个时钟节拍时需要做的工作 voidOSTickISR void 保存CPU寄存器 调用OSIntEnter 记录中断嵌套层数if OSIntNesting 1 OSTCBCur OSTCBStkPtr SP 保存堆栈指针 调用OSTimeTick 节拍处理清除中断 开中断 调用OSIntExit 中断嵌套层数减一恢复CPU寄存器 中断返回 这是系统时钟中断服务程序 voidOSTimeTick void OSTimeTickHook OSTime 记录节拍数 if OSRunning TRUE ptcb OSTCBList while ptcb OSTCBPrio OS IDLE PRIO OS ENTER CRITICAL if ptcb OSTCBDly 0 if ptcb OSTCBDly 0 任务的延时时间减一 if ptcb OSTCBStat 时钟节拍服务函数 函数OSTimeTick 的任务 就是在每个时钟节拍了解每个任务的延时状态 使其中已经到了延时时限的非挂起任务进入就绪状态 voidOSTimeTick void if OSRunning TRUE ptcb OSTCBList while ptcb OSTCBPrio OS IDLE PRIO OS ENTER CRITICAL if ptcb OSTCBDly 0 if ptcb OSTCBDly 0 任务的延时时间减一 if ptcb OSTCBStat 函数OSTimeTick 的任务 就是在每个时钟节拍了解每个任务的延时状态 使其中已经到了延时时限的非挂起任务进入就绪状态 例 3 1 INT16Ud 0 d1 0 voidOSTimeTickHook void char s0 500 char s1 每 char s2 中断的调度次数 chars 8 if d 500 PC DispStr 14 4 s1 DISP BGND BLACK DISP FGND WHITE PC DispStr 18 4 s0 DISP BGND BLACK DISP FGND WHITE PC DispStr 24 4 s2 DISP BGND BLACK DISP FGND WHITE sprintf s d OSCtxSwCtr PC DispStr 20 d1 5 s DISP BGND BLACK DISP FGND WHITE d 0 d1 1 d d 1 例3 2 voidInterTask void pdata for if InterKey InterKey FALSE OSInteNesting OSTimeDlyHMSM 0 0 1 0 任务的延时 由于嵌入式系统的任务是一个无限循环 并且 C OS II还是一个抢占式内核 所以为了使高优先级别的任务不至于独占CPU 可以给其他任务优先级别较低的任务获得CPU使用权的机会 C OS II规定 除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly 使当前任务的运行延时 暂停 一段时间并进行一次任务调度 以让出CPU的使用权 voidOSTimeDly INT16Uticks ifOS CRITICAL METHOD 3OS CPU SRcpu sr endifif ticks 0 OS ENTER CRITICAL if OSRdyTbl OSTCBCur OSTCBY 调用调度函数 这是系统提供的延时函数 调度时机 INT8UOSTimeDlyResume INT8Uprio OS TCB ptcb OS ENTER CRITICAL ptcb OS TCB OSTCBPrioTbl prio i

温馨提示

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

评论

0/150

提交评论