




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第七章第七章 中断和时间管理中断和时间管理 27.1 中断管理中断管理 v中断的分类中断的分类 v中断处理的过程中断处理的过程 v实时内核的中断管理实时内核的中断管理 v用户中断服务程序用户中断服务程序 v中断时序中断时序* 37.1.1 概述概述 v从发展过程来看:从发展过程来看: 中断(中断(interrupt)最初被用来替换)最初被用来替换I/O操操作的作的轮询处理轮询处理方式,以提高方式,以提高I/O处理的效处理的效率。率。 随后,中断又包含了随后,中断又包含了自陷自陷(trap,也称为,也称为内部中断内部中断或是或是软件中断软件中断)的功能。)的功能。 后来,中断的概念得到进一步扩
2、大,被后来,中断的概念得到进一步扩大,被定义为定义为导致程序正常执行流程发生改变导致程序正常执行流程发生改变的事件的事件(不包括程序的分支情况)。可(不包括程序的分支情况)。可把概念被扩大的中断称为把概念被扩大的中断称为广义中断广义中断。4概述概述 v在实际应用中,广义的中断通常被分为中断、在实际应用中,广义的中断通常被分为中断、自陷和异常(自陷和异常(exception)等类别。)等类别。 中断中断是由于是由于CPU外部的原因而改变程序执行流外部的原因而改变程序执行流程的过程,属于程的过程,属于异步事件异步事件,又称为,又称为硬件中断硬件中断。自陷和异常则为自陷和异常则为同步事件同步事件;
3、自陷自陷表示通过处理器所拥有的表示通过处理器所拥有的软件指令软件指令、可预可预期期地使处理器正在执行的程序的执行流程发生地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序。自陷是变化,以执行特定的程序。自陷是显式的事件显式的事件,需要无条件地执行;需要无条件地执行; vMotorola 68000系列中的系列中的Trap指令指令 vARM中的中的SWI指令指令 vIntel 80 x86中的中的INT指令指令 5概述概述 异常异常为为CPU自动产生自动产生的自陷,以处理异的自陷,以处理异常事件。常事件。 v如被如被0除、执行非法指令和内存保护故除、执行非法指令和内存保护故障等。障等。
4、 v异常没有对应的处理器指令异常没有对应的处理器指令,当异常,当异常事件发生时,处理器也需要无条件地事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处挂起当前运行的程序,执行特定的处理程序。理程序。 6概述概述 v对实时系统,中断必不可少对实时系统,中断必不可少v实时内核大都提供了管理中断的机制实时内核大都提供了管理中断的机制v方便开发中断处理程序,提高中断处方便开发中断处理程序,提高中断处理的可靠性理的可靠性v使中断处理程序与任务有机结合使中断处理程序与任务有机结合77.1.2 中断的分类中断的分类 v分类方式分类方式 硬件中断是否可以被屏蔽:硬件中断是否可以被屏蔽:v可屏蔽中
5、断可屏蔽中断和和不可屏蔽中断不可屏蔽中断 中断源:中断源:v 硬件中断硬件中断和和软件中断软件中断 中断信号的产生:中断信号的产生:v 边缘触发中断边缘触发中断和和电平触发中断电平触发中断 中断服务程序的调用方式:中断服务程序的调用方式: v向量中断向量中断、直接中断直接中断和和间接中断间接中断8可屏蔽中断和不可屏蔽中断可屏蔽中断和不可屏蔽中断 v由于中断的发生是异步的,程序的正常执行流程随由于中断的发生是异步的,程序的正常执行流程随时有可能被中断服务程序打断。如果程序正在进行时有可能被中断服务程序打断。如果程序正在进行某些重要运算,中断服务程序的插入将有可能改变某些重要运算,中断服务程序的插
6、入将有可能改变某些寄存器的数据,造成程序的运行发生错误。某些寄存器的数据,造成程序的运行发生错误。v可屏蔽中断可屏蔽中断:能够被屏蔽掉的中断。:能够被屏蔽掉的中断。 外部设备的中断请求信号一般需要先通过外部设备的中断请求信号一般需要先通过CPU外部的中断外部的中断控制器,再与控制器,再与CPU相应的引脚相连。相应的引脚相连。 可编程中断控制器可以通过软件进行控制,以禁止或是允可编程中断控制器可以通过软件进行控制,以禁止或是允许中断。许中断。 v不可屏蔽中断不可屏蔽中断:在任何时候都不可屏蔽的。:在任何时候都不可屏蔽的。 一个比较典型的例子是掉电中断,当发生掉电时,无论程一个比较典型的例子是掉电
7、中断,当发生掉电时,无论程序正在进行什么样的运算,它都肯定无法正常运行下去。序正在进行什么样的运算,它都肯定无法正常运行下去。这种情况下,急需进行的是一些掉电保护的操作。对这类这种情况下,急需进行的是一些掉电保护的操作。对这类中断,应随时进行响应。中断,应随时进行响应。 9硬件中断和软件中断硬件中断和软件中断 v硬件中断:由于硬件中断:由于CPU外部的设备所产生的外部的设备所产生的中断。中断。异步事件异步事件:可能在程序执行的任何位置发生,:可能在程序执行的任何位置发生,发生中断的时间通常是不确定的。发生中断的时间通常是不确定的。v软件中断:同步中断或是自陷,通过处理器软件中断:同步中断或是自
8、陷,通过处理器的软件指令来实现。的软件指令来实现。 产生中断的时机是预知的,可根据需要在程序产生中断的时机是预知的,可根据需要在程序中进行设定。中进行设定。 软件中断的处理程序以软件中断的处理程序以同步的方式同步的方式进行执行。进行执行。 其处理方式同硬件中断处理程序类似。其处理方式同硬件中断处理程序类似。10硬件中断和软件中断硬件中断和软件中断 v软件中断是一种非常重要的机制:软件中断是一种非常重要的机制: 系统可通过该机制在系统可通过该机制在用户模式执行特权用户模式执行特权模式下的操作。模式下的操作。 是是软件调试软件调试的一个重要手段,如的一个重要手段,如Intel 80 x86中的中的
9、INT 3,设置断点,调试器可,设置断点,调试器可以用它来形成观察点,并查看随程序执以用它来形成观察点,并查看随程序执行而动态变化的事件情况。行而动态变化的事件情况。 11边缘触发中断和电平触发中断边缘触发中断和电平触发中断 v边缘触发中断:中断线边缘触发中断:中断线从低变到高从低变到高或是或是从高从高变到低变到低时,中断信号就被发送出去,并只有时,中断信号就被发送出去,并只有在下一次的从低变到高或是从高变到低时才在下一次的从低变到高或是从高变到低时才会再度触发中断。会再度触发中断。 事件发生的事件发生的时间非常短时间非常短,有可能出现中断控制,有可能出现中断控制器器丢失中断丢失中断的情况。的
10、情况。 如果多个设备连接到同一个中断线,即使只有如果多个设备连接到同一个中断线,即使只有一个设备产生了中断信号,也必须调用中断线一个设备产生了中断信号,也必须调用中断线对应的所有中断服务程序来进行匹配,否则会对应的所有中断服务程序来进行匹配,否则会出现中断的软件丢失情况。出现中断的软件丢失情况。 12边缘触发中断和电平触发中断边缘触发中断和电平触发中断 v电平触发中断:在硬件中断线的电平触发中断:在硬件中断线的电平发生变电平发生变化化时产生中断信号,并且中断信号的有效性时产生中断信号,并且中断信号的有效性将持续保持下去,直到中断信号被清除。将持续保持下去,直到中断信号被清除。 能够降低中断信号
11、能够降低中断信号传送丢失传送丢失的情况的情况 能通过更有效的方式来服务中断,每个为该中能通过更有效的方式来服务中断,每个为该中断服务后的断服务后的ISR都要向外围设备进行确认,然后都要向外围设备进行确认,然后取消该设备对中断线的操作。取消该设备对中断线的操作。 当中断线的最后一个设备得到中断服务后,中当中断线的最后一个设备得到中断服务后,中断线的电平就会发生变化,不用对连接到同一断线的电平就会发生变化,不用对连接到同一个硬件中断线的所有中断服务程序进行尝试。个硬件中断线的所有中断服务程序进行尝试。13向量中断、直接中断和间接中断向量中断、直接中断和间接中断 v向量中断:通过向量中断:通过中断向
12、量中断向量来调用中断服务程来调用中断服务程序。序。 v直接中断:中断对应的中断服务程序的直接中断:中断对应的中断服务程序的入口入口地址地址是一个固定值,当中断发生的时候,程是一个固定值,当中断发生的时候,程序执行流程将直接跳转到中断服务程序的入序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序。口地址,执行中断服务程序。 v间接中断:中断服务程序的入口地址由间接中断:中断服务程序的入口地址由寄存寄存器器提供。提供。14向量中断向量中断 v中断硬件设备的硬件中断线(也称为中断请中断硬件设备的硬件中断线(也称为中断请求求IRQ)被中断控制器汇集成)被中断控制器汇集成中断向量中断向量(i
13、nterrupt vector);); v每个中断向量对应一个中断服务程序每个中断向量对应一个中断服务程序(interrupt service routine,ISR),用),用来存放来存放中断服务程序的入口地址中断服务程序的入口地址或是或是中断服中断服务程序的第一条指令务程序的第一条指令。 v系统中通常包含多个中断向量,存放这些中系统中通常包含多个中断向量,存放这些中断向量对应中断服务程序入口地址的内存区断向量对应中断服务程序入口地址的内存区域被称为域被称为中断向量表中断向量表。 15向量中断向量中断 v在在Intel 80 x86处理器中,中断向量表处理器中,中断向量表包含包含256个入口
14、,每个中断向量需要四个入口,每个中断向量需要四个字节(存放中断服务程序的首址)。个字节(存放中断服务程序的首址)。v ARM的中断向量表开始于内存地址的中断向量表开始于内存地址0 x00000000或是或是0 xFFFF0000处。处。 16中断控制器中断控制器 v对多个可屏蔽中断源进行管理对多个可屏蔽中断源进行管理,使,使CPU核心能和更多的中断资源相联系。核心能和更多的中断资源相联系。v 能够对中断进行排队能够对中断进行排队: 避免中断信号的丢失避免中断信号的丢失 对不同的中断进行优先级配置,使高优对不同的中断进行优先级配置,使高优先级中断能够中断低优先级中断,满足先级中断能够中断低优先级
15、中断,满足系统中具有更高时间约束特性功能的需系统中具有更高时间约束特性功能的需要要17中断控制器中断控制器 v在基于在基于x86的架构中,的架构中,8259是一个非常通用的中断控制器芯片(称是一个非常通用的中断控制器芯片(称为为PIC,programmable interrupt controller)。)。 v每个每个PIC只能够处理只能够处理8个中断,为支持更多数量的中断,需要组织成个中断,为支持更多数量的中断,需要组织成菊花链(菊花链(daisy chain)的方式,把一个)的方式,把一个PIC的输出连接到另一个的输出连接到另一个PIC的输入上。的输入上。 18中断控制器中断控制器 v在
16、基于在基于x86的架构中,的架构中,8259是一个非常通是一个非常通用的中断控制器芯片(称为用的中断控制器芯片(称为PIC,programmable interrupt controller)。)。 v每个每个PIC只能够处理只能够处理8个中断,为支持更多个中断,为支持更多数量的中断,需要组织成菊花链(数量的中断,需要组织成菊花链(daisy chain)的方式,把一个)的方式,把一个PIC的输出连接到的输出连接到另一个另一个PIC的输入上。的输入上。 19ARM向量中断控制器向量中断控制器 v特特 性性 ARM PrimeCell TM向量中断控制器;向量中断控制器; 32个中断请求输入;个
17、中断请求输入; 16个向量个向量IRQ中断;中断; 16个优先级,可动态分配给中断请求;个优先级,可动态分配给中断请求; 软件中断产生。软件中断产生。20向量中断控制器方框图向量中断控制器方框图 21ARM向量中断控制器向量中断控制器 描描 述述v向量中断控制器向量中断控制器(VIC)具有具有32个中断请求输个中断请求输入,可将其编程分为入,可将其编程分为3类:类:lFIQl向量向量IRQl非向量非向量IRQv可编程分配机制意味着不同外设的中断优可编程分配机制意味着不同外设的中断优先级可以动态分配并调整。先级可以动态分配并调整。 22ARM向量中断控制器向量中断控制器 v 快速中断请求快速中断
18、请求(FIQ)要求具有要求具有最高优先级最高优先级。v如果分配给如果分配给FIQ的请求多于的请求多于1个,个,VIC将中将中断请求相断请求相“或或”后向后向ARM处理器产生处理器产生FIQ信号。信号。v当只有一个中断被分配为当只有一个中断被分配为FIQ时,可实现时,可实现最短的最短的FIQ等待时间等待时间,因为,因为FIQ服务程序只服务程序只要简单地启动器件的处理就可以了。但如要简单地启动器件的处理就可以了。但如果分配给果分配给 FIQ级的中断多于级的中断多于1个,个,FIQ服务服务程序从程序从VIC中读出一个字来识别产生中断中读出一个字来识别产生中断请求的请求的FIQ中断源是哪一个。中断源是
19、哪一个。 23ARM向量中断控制器向量中断控制器 v向量向量IRQ具有具有中等优先级中等优先级。v该级别可分配该级别可分配32个请求中的个请求中的16个个。32个请求中的任意一个请求中的任意一个都可分配到个都可分配到16个向量个向量IRQ Slot中的任意一个,其中中的任意一个,其中Slot0具有最高优先级,而具有最高优先级,而Slotl5则为最低优先级。则为最低优先级。v非向量非向量IRQ的的优先级最低优先级最低。v VIC将所有将所有向量和非向量向量和非向量IRQ相相“或或”向向ARM处理器产处理器产生生IRQ信号。信号。IRQ服务程序可通过读取服务程序可通过读取VIC的一个寄存器的一个寄
20、存器立即启动并跳转到相应地址。如果有任意一个向量立即启动并跳转到相应地址。如果有任意一个向量IRQ发出请求,则发出请求,则VIC提供最高优先级请求提供最高优先级请求IRQ服务程序的地服务程序的地址,否则提供默认程序的地址。该默认程序由所有非向址,否则提供默认程序的地址。该默认程序由所有非向量量IRQ共用。默认程序可读取任何共用。默认程序可读取任何VIC寄存器以确定哪个寄存器以确定哪个IRQ被激活。被激活。 247.1.3 中断处理的过程中断处理的过程 v中断处理的过程分为:中断处理的过程分为: 中断检测中断检测 中断响应中断响应 中断处理中断处理 25中断检测中断检测 v中断检测在中断检测在每
21、条指令结束时每条指令结束时进行,检测进行,检测是否有中断请求或是否满足异常条件。是否有中断请求或是否满足异常条件。 为满足中断处理的需要,在指令周期中使为满足中断处理的需要,在指令周期中使用了用了中断周期中断周期。在中断周期中,处理器检查是否有中断发在中断周期中,处理器检查是否有中断发生,即是否出现中断信号。生,即是否出现中断信号。 v没有中断信号:处理器继续运行,并通过取指没有中断信号:处理器继续运行,并通过取指周期取当前程序的下一条指令;周期取当前程序的下一条指令; v有中断信号:将进入中断响应,对中断进行处有中断信号:将进入中断响应,对中断进行处理。理。 26 中断和指令周期中断和指令周
22、期 27中断响应中断响应 v中断响应是由中断响应是由处理器内部硬件处理器内部硬件完成的中断序完成的中断序列,而不是由程序执行的。列,而不是由程序执行的。v在在Intel 80 x86中,中断响应过程的操作如中,中断响应过程的操作如下:下: 对可屏蔽中断,从对可屏蔽中断,从8259中断控制器芯片读取中中断控制器芯片读取中断向量号;断向量号; 将标志寄存器将标志寄存器EFLAG、CS和和IP压栈;压栈; 对于硬件中断,复位标志寄存器中的对于硬件中断,复位标志寄存器中的IF和和TF位,位,禁止可屏蔽外部中断和单步异常;禁止可屏蔽外部中断和单步异常; 根据中断向量号,查找中断向量表,根据中断根据中断向
23、量号,查找中断向量表,根据中断服务程序的首址转移到中断服务程序执行。服务程序的首址转移到中断服务程序执行。28中断处理中断处理 v中断处理:执行中断服务程序。中断处理:执行中断服务程序。 中断服务程序用来处理自陷、异常或是中断服务程序用来处理自陷、异常或是中断。中断。 尽管导致自陷、异常和中断的事件不同,尽管导致自陷、异常和中断的事件不同,但大都具有相同的中断服务程序结构。但大都具有相同的中断服务程序结构。29中断处理中断处理 v中断服务程序的主要内容:中断服务程序的主要内容: 保存上下文:保存中断服务程序将要使用的保存上下文:保存中断服务程序将要使用的所有所有寄存器的内容寄存器的内容,以便于
24、在退出中断服务程序之前,以便于在退出中断服务程序之前进行恢复;进行恢复; 如果中断向量被多个设备所共享,为了确定产生如果中断向量被多个设备所共享,为了确定产生该中断信号的设备,需要该中断信号的设备,需要轮询轮询这些设备的中断状这些设备的中断状态寄存器;态寄存器; 获取中断相关的其他信息;获取中断相关的其他信息; 对中断进行具体的处理;对中断进行具体的处理; 恢复保存的上下文恢复保存的上下文; 执行执行中断返回指令中断返回指令,使,使CPU的控制返回到被中断的控制返回到被中断的程序继续执行。的程序继续执行。30中断处理中断处理 v如果对一个中断的处理还没有完成,如果对一个中断的处理还没有完成,又
25、发生了另外一个中断,则称系统中又发生了另外一个中断,则称系统中发生了多个中断。发生了多个中断。 非嵌套的中断处理方式非嵌套的中断处理方式:在处理一个中:在处理一个中断的时候,禁止再发生中断。断的时候,禁止再发生中断。 嵌套的中断处理方式嵌套的中断处理方式:定义中断优先级,:定义中断优先级,允许高优先级的中断打断低优先级中断允许高优先级的中断打断低优先级中断的处理过程。的处理过程。31非嵌套的中断处理方式非嵌套的中断处理方式 v处理中断的时候,将处理中断的时候,将屏蔽屏蔽所有其他的中断请求。所有其他的中断请求。 新的中断将被挂起,当处理器再次允许中断时,再新的中断将被挂起,当处理器再次允许中断时
26、,再由处理器进行检查。由处理器进行检查。 如果程序执行过程中发生了中断,在执行中断服务如果程序执行过程中发生了中断,在执行中断服务程序的时候将禁止中断;程序的时候将禁止中断;中断服务程序执行完成后,恢复正常执行流程被中中断服务程序执行完成后,恢复正常执行流程被中断的程序之前再使能中断,并由处理器检查是否还断的程序之前再使能中断,并由处理器检查是否还有中断。有中断。 v非嵌套中断处理方式使中断能够按非嵌套中断处理方式使中断能够按发生顺序发生顺序进进行处理。行处理。 v没有考虑优先级没有考虑优先级,使,使高优先级中断高优先级中断不能得到及不能得到及时的处理,甚至导致时的处理,甚至导致中断丢失中断丢
27、失。32中断的非嵌套顺序处理中断的非嵌套顺序处理 33嵌套的中断处理方式嵌套的中断处理方式 v中断被划分为多个优先级,中断服务程序只中断被划分为多个优先级,中断服务程序只屏蔽屏蔽那些那些比当前中断优先级低或是与当前中比当前中断优先级低或是与当前中断优先级相同断优先级相同的中断,在完成必要的上下文的中断,在完成必要的上下文保存后即使能中断。保存后即使能中断。 v高优先级中断请求高优先级中断请求到达的时候,需要对当前到达的时候,需要对当前中断服务程序的状态进行保存,然后调用高中断服务程序的状态进行保存,然后调用高优先级中断的服务程序。优先级中断的服务程序。 v当高优先级中断的服务程序执行完成后,再
28、当高优先级中断的服务程序执行完成后,再恢复恢复先前的中断服务程序继续执行。先前的中断服务程序继续执行。34 中断的嵌套处理中断的嵌套处理 357.1.4 实时内核的中断管理实时内核的中断管理 v中断服务程序通常包括三个方面的内中断服务程序通常包括三个方面的内容:容:中断前导:中断前导: v保存中断现场,进入中断处理。保存中断现场,进入中断处理。 用户中断服务程序:用户中断服务程序:v 完成对中断的具体处理。完成对中断的具体处理。 中断后续:中断后续: v恢复中断现场,退出中断处理。恢复中断现场,退出中断处理。36实时内核的中断管理实时内核的中断管理 v中断前导和中断后续通常由内核的中断前导和中
29、断后续通常由内核的中断接管程序中断接管程序来实现。来实现。 硬件中断发生后,中断接管程序获得控制权,先由中断接管程硬件中断发生后,中断接管程序获得控制权,先由中断接管程序进行处理,然后才将控制权交给相应的用户中断服务程序。序进行处理,然后才将控制权交给相应的用户中断服务程序。 用户中断服务程序执行完成后,又回到中断接管程序。用户中断服务程序执行完成后,又回到中断接管程序。37实时内核的中断管理实时内核的中断管理 v中断接管程序负责中断处理的前导和后续部分的内中断接管程序负责中断处理的前导和后续部分的内容。容。 中断处理前导中断处理前导:保存必要的寄存器,并根据情况在中断栈:保存必要的寄存器,并
30、根据情况在中断栈或是任务栈中设置堆栈的起始位置,然后调用用户中断服或是任务栈中设置堆栈的起始位置,然后调用用户中断服务程序。务程序。 中断处理后续中断处理后续:实现中断返回前需要处理的工作,主要包:实现中断返回前需要处理的工作,主要包括恢复寄存器和堆栈,并从中断服务程序返回到被中断的括恢复寄存器和堆栈,并从中断服务程序返回到被中断的程序。程序。 v用户中断服务程序被组织为一个表,称为用户中断服务程序被组织为一个表,称为虚拟中断虚拟中断向量表向量表。 v如果需要在用户中断服务程序中使用关于如果需要在用户中断服务程序中使用关于浮点运算浮点运算的操作,中断前导和中断后续中还需要分别对浮点的操作,中断
31、前导和中断后续中还需要分别对浮点上下文进行保存和恢复。上下文进行保存和恢复。38实时内核的中断管理实时内核的中断管理 v如果中断处理导致系统中出现比被中断如果中断处理导致系统中出现比被中断任务具有更任务具有更高优先级的就绪任务高优先级的就绪任务出现:出现: 需要把需要把高优先级高优先级任务放入就绪队列;任务放入就绪队列; 把被中断的任务从执行状态转变为把被中断的任务从执行状态转变为就绪状就绪状态态; 完成用户中断服务程序后,在中断接管程完成用户中断服务程序后,在中断接管程序的中断后续处理中激活序的中断后续处理中激活重调度程序重调度程序,使,使高优先级任务能在中断处理工作完成后得高优先级任务能在
32、中断处理工作完成后得到调度执行。到调度执行。39实时内核的中断管理实时内核的中断管理 v在允许中断嵌套的情况下,在执行中断在允许中断嵌套的情况下,在执行中断服务程序的过程中,如果出现服务程序的过程中,如果出现高优先级高优先级的中断的中断: 当前中断服务程序的执行将被打断,以执当前中断服务程序的执行将被打断,以执行行高优先级中断高优先级中断的中断服务程序;的中断服务程序; 当高优先级中断的处理完成后,被打断的当高优先级中断的处理完成后,被打断的中断服务程序才又得到继续执行;中断服务程序才又得到继续执行; 发生中断嵌套时,如果需要进行任务调度,发生中断嵌套时,如果需要进行任务调度,任务的调度将任务
33、的调度将延迟到最外层中断处理结束延迟到最外层中断处理结束时才能发生。时才能发生。40实时内核的中断管理实时内核的中断管理 v中断服务程序使用被中断任务的任务栈空间。中断服务程序使用被中断任务的任务栈空间。 在允许中断嵌套处理的情况下,如果中断嵌套层次过多,中断服在允许中断嵌套处理的情况下,如果中断嵌套层次过多,中断服务程序所占用的任务的栈空间可能比较大,将导致任务栈溢出。务程序所占用的任务的栈空间可能比较大,将导致任务栈溢出。v使用使用专门的中断栈专门的中断栈来满足中断服务程序的需要,降低任来满足中断服务程序的需要,降低任务栈空间使用的不确定性。务栈空间使用的不确定性。 在系统中开辟一个单独的
34、中断栈,为所有中断服务程序所共享。在系统中开辟一个单独的中断栈,为所有中断服务程序所共享。中断栈必须拥有足够的空间,即使在最坏中断嵌套的情况下,中中断栈必须拥有足够的空间,即使在最坏中断嵌套的情况下,中断栈也不能溢出。断栈也不能溢出。 v如果实时内核没有提供单独的如果实时内核没有提供单独的中断栈中断栈,就需要为任务栈,就需要为任务栈留出足够的空间,不但要考虑通常的留出足够的空间,不但要考虑通常的函数嵌套调用函数嵌套调用,还,还需要满足需要满足中断嵌套中断嵌套的需要。的需要。 使用单独的中断栈还能有效降低整个系统对栈空间的需求,否则使用单独的中断栈还能有效降低整个系统对栈空间的需求,否则需要为每
35、个任务栈都预留处理中断的栈空间。需要为每个任务栈都预留处理中断的栈空间。 41 C/OSII的中断处理的中断处理 42Interrupts Under uC/OS-IIYourISR: Save all CPU registers; (1) Call OSIntEnter() or, increment OSIntNesting directly; (2) if (OSIntNesting = 1) (3) OSTCBCur-OSTCBStkPtr = SP; (4) Clear interrupting device; (5) Re-enable interrupts (optional)
36、(6) Execute user code to service ISR; (7) Call OSIntExit(); (8) Restore all CPU registers; (9) Execute a return from interrupt instruction; (10)void OSIntEnter (void) OS_ENTER_CRITICAL(); OSIntNesting+; OS_EXIT_CRITICAL(); 43Interrupts Under uC/OS-IIvoid OSIntExit (void) OS_ENTER_CRITICAL(); (1) if
37、(-OSIntNesting | OSLockNesting) = 0) (2) OSIntExitY = OSUnMapTblOSRdyGrp; (3) OSPrioHighRdy = (INT8U)(OSIntExitY 0)v /* 0 means no delay! */ v OS_ENTER_CRITICAL(); v if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX) = 0) v /* Delay current task */ v OSRdyGrp &= OSTCBCur-OSTCBBitY; v v OSTCB
38、Cur-OSTCBDly = ticks; v /* Load ticks in TCB */ v OS_EXIT_CRITICAL(); v OS_Sched(); v /* Find next task to run! */ v v73时间管理时间管理 v管理功能是通过管理功能是通过tick处理程序来实现处理程序来实现的。的。 定时器发生中断后,执行系统时钟中断定时器发生中断后,执行系统时钟中断处理程序,并在中断处理程序中调用处理程序,并在中断处理程序中调用tick处理程序,实现系统中与时间和定时相处理程序,实现系统中与时间和定时相关的操作。关的操作。 tick处理程序作为实时内核的一部分
39、,与处理程序作为实时内核的一部分,与具体的定时器具体的定时器/计数器硬件无关,由系统计数器硬件无关,由系统时钟中断处理程序调用,使实时内核具时钟中断处理程序调用,使实时内核具有对不同定时器有对不同定时器/计数器硬件的适应性。计数器硬件的适应性。 74v图图vtick处理程序处理程序 75Tick Under uC/OS-IIvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OST
40、CBStkPtr = SP; v v Call OSTimeTick(); v Clear interrupting device; v Re-enable interrupts (optional); v Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v76vvoid OSTimeTick (void) v v#if OS_CRITICAL_METHOD = 3 v OS_CPU_SR cpu_sr; v#endif v OS_TCB *ptcb;
41、 v OSTimeTickHook(); (1) v#if OS_TIME_GET_SET_EN 0 v OS_ENTER_CRITICAL(); v OSTime+; (2) v OS_EXIT_CRITICAL(); v#endif v if (OSRunning = TRUE) v ptcb = OSTCBList; (3) v while (ptcb-OSTCBPrio != OS_IDLE_PRIO) (4) v OS_ENTER_CRITICAL(); v if (ptcb-OSTCBDly != 0) v if (-ptcb-OSTCBDly = 0) v if (ptcb-OS
42、TCBStat & OS_STAT_SUSPEND) = 0 x00) (5) v OSRdyGrp |= ptcb-OSTCBBitY; (6) v OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; v else v ptcb-OSTCBDly = 1; v v v v ptcb = ptcb-OSTCBNext; v OS_EXIT_CRITICAL(); v v v77Tick Under uC/OS-II based on DSRvvoid TickTask (void *pdata) v v pdata = pdata; v for (;) v O
43、SMboxPend(.); /* Wait for signal from Tick ISR */ v OSTimeTick(); v OS_Sched(); v vvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OSTCBStkPtr = SP; v v Post a dummy message (e.g. (void *)1) to the tick mailbox; v
44、Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v78OSTickISR Under 80 x86 vOSTickISR PROC FAR v PUSHA ; Save interrupted tasks context v PUSH ES v PUSH DS v MOV AX, SEG _OSIntNesting ; Reload DS v MOV DS, AX v INC BYTE PTR _OSIntNesting; Notify uC/OS-I
45、I of ISR v INT 081H ; Chain into DOSs tick ISR v CALL FAR PTR _OSTimeTick ; Process system tick v CALL FAR PTR _OSIntExit ; Notify uC/OS-II of end of ISR v POP DS ; Restore interrupted tasks context v POP ES v POPA v IRET ; Return to interrupted task v_OSTickISR ENDP79时间管理时间管理 v相对时间即系统时间,是指相对于系统启动以来
46、的相对时间即系统时间,是指相对于系统启动以来的时间,以时间,以tick为单位,每发生一个为单位,每发生一个tick,对系统的,对系统的相对时间进行一次加相对时间进行一次加1操作。操作。 v实时内核根据实时内核根据tick对应的时间长度,可以把相对时对应的时间长度,可以把相对时间转换为以秒或是毫秒为单位的其他时间格式,并间转换为以秒或是毫秒为单位的其他时间格式,并可根据实时时钟获得日历时间。可根据实时时钟获得日历时间。 如果对任务设置了时间片处理方式,需要在如果对任务设置了时间片处理方式,需要在tick处理程序处理程序中对当前正在运行的任务的已执行时间进行更新,使任务中对当前正在运行的任务的已执
47、行时间进行更新,使任务的已执行时间数值加的已执行时间数值加1。 执行加执行加1操作后,如果任务的已执行时间同任务的时间片操作后,如果任务的已执行时间同任务的时间片相等,表示任务使用完一个时间片的执行时间,需要结束相等,表示任务使用完一个时间片的执行时间,需要结束当前任务的执行,设置调度标志,把当前任务放置到就绪当前任务的执行,设置调度标志,把当前任务放置到就绪链。链。 80时间管理时间管理 v时间等待链用来存放需要延迟处理的时间等待链用来存放需要延迟处理的对象:对象: 产生产生tick后,需要对时间等待链中的对象后,需要对时间等待链中的对象的剩余等待时间值进行处理。的剩余等待时间值进行处理。
48、对于时间等待的对象,通常都被组织为对于时间等待的对象,通常都被组织为差分链表的方式进行管理,以有效降低差分链表的方式进行管理,以有效降低时间等待对象的管理开销。时间等待对象的管理开销。 在时间差分链中,每个表项所包含的计在时间差分链中,每个表项所包含的计时值并非当前时刻到表项激活时刻的绝时值并非当前时刻到表项激活时刻的绝对计数,而是该表项和先于它的所有表对计数,而是该表项和先于它的所有表项的计数值之和。项的计数值之和。81时间管理时间管理 v图图v差分链差分链 v在当前时刻,在当前时刻,A对象需要等待对象需要等待3个时间单位个时间单位就应被激活,就应被激活,B对象需要等待对象需要等待5(3+2
49、)个时)个时间单位就应被激活,间单位就应被激活,C对象需要等待对象需要等待10(3+2+5)个时间单位就应被激活,)个时间单位就应被激活,D对象对象需要等待需要等待14(3+2+5+4)个时间单位就应被)个时间单位就应被激活。激活。 v在当前时刻,如果有一个等待在当前时刻,如果有一个等待7个时间单位个时间单位的对象的对象E需要插入到队列中,由于需要插入到队列中,由于7-3-2=2,而而7-3-2-5=-3,因此,因此E对象需要插入到差分对象需要插入到差分链中介于对象链中介于对象B和对象和对象C之间的位置。之间的位置。 82时间管理时间管理 v对于差分时间链,系统每接收到一个对于差分时间链,系统
50、每接收到一个tick,就修订链首对象的时间值。如,就修订链首对象的时间值。如果链表对象的时间单位为果链表对象的时间单位为tick,则每,则每发生一个发生一个tick,链首对象的时间值就,链首对象的时间值就减减1,当减到,当减到0时,链首对象就被激活,时,链首对象就被激活,并从差分时间链中取下来,下一个对并从差分时间链中取下来,下一个对象又成为链首对象。象又成为链首对象。 83时间管理时间管理 v为实现定时功能,实时内核需要提供软件定为实现定时功能,实时内核需要提供软件定时器管理功能,应用程序可根据需要创建、时器管理功能,应用程序可根据需要创建、使用软件定时器。使用软件定时器。 软件定时器在创建
51、时,由用户提供定时值,当软件定时器在创建时,由用户提供定时值,当软件定时器的定时值减法计数为软件定时器的定时值减法计数为0时,触发定时时,触发定时器服务例程。器服务例程。 用户可在此例程中完成自己需要的操作。用户可在此例程中完成自己需要的操作。 在在tick处理程序中需要对软件定时器的定时值进处理程序中需要对软件定时器的定时值进行减行减1操作,并在定时值为操作,并在定时值为0时,触发挂接在该时,触发挂接在该定时器上的服务例程。定时器上的服务例程。 84时间管理时间管理 v软件定时器可用于实现软件定时器可用于实现“看门狗看门狗”(watchdog)。)。 在应用的某个地方进行软件定时器的停止计时
52、在应用的某个地方进行软件定时器的停止计时操作,确保定时器在系统正常运行的情况下不操作,确保定时器在系统正常运行的情况下不会到期,即不会触发定时器服务例程;会到期,即不会触发定时器服务例程; v如果某个时候系统进入了定时器服务例程,如果某个时候系统进入了定时器服务例程,就表示使用停止计时操作的地方没有执行到,就表示使用停止计时操作的地方没有执行到,系统出现了错误。系统出现了错误。 v如果需要进行任务的重调度,如果需要进行任务的重调度,tick处理程序处理程序还需要调用调度程序进行任务调度处理,使还需要调用调度程序进行任务调度处理,使需要执行的下一个任务获得对需要执行的下一个任务获得对CPU的控制
53、。的控制。 85时间管理时间管理 v在时间方面,内核通常提供以下功能:在时间方面,内核通常提供以下功能: 设置系统时间。使应用能够设置当前系设置系统时间。使应用能够设置当前系统的日期和时间。统的日期和时间。 获得系统时间。以日历时间、系统启动获得系统时间。以日历时间、系统启动以来所经历的以来所经历的tick数等形式获得当前的系数等形式获得当前的系统时间;统时间; 维护系统时基、处理定时事件。通过时维护系统时基、处理定时事件。通过时钟中断,维持系统日志时间、任务延迟钟中断,维持系统日志时间、任务延迟时间、超时、单调速率周期、实现时间时间、超时、单调速率周期、实现时间片等内容。片等内容。86日历时
54、间数据结构日历时间数据结构 vtypedef struct v v unsigned32 year; /* year*/ v unsigned32 month; /* month,1-12 */ v unsigned32 day; /* day,1-31 */ v unsigned32 hour; /* hour,0-23 */ v unsigned32 minute; /* minute,0-59 */ v unsigned32 second; /* second,0-59 */ v unsigned32 ticks; /* elapsed ticks between secs */ v TOD; /*Time Of Day*/87OSTimeGet and OSTimeSet Under uC/OS-II vINT32U OSTimeGet (void) v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45585-2025大豆茎溃疡病菌检疫鉴定方法
- 材料疲劳裂纹扩展控制重点基础知识点
- 材料疲劳寿命预测数据可视化重点基础知识点
- 行政管理实践案例试题及答案
- 店铺火灾疏散应急预案模板(3篇)
- 幼儿园火灾应急预案反思(3篇)
- 血液透析火灾应急预案(3篇)
- 档案火灾应急演练预案(3篇)
- 宿舍楼火灾应急预案体系(3篇)
- 高考数学成就探讨试题及答案
- 2024年贵州黔东南州能源投资有限公司招聘笔试参考题库含答案解析
- 相邻关系知识讲座
- 毛泽东著作《实践论》
- 人工智能医疗器械注册审查指导原则(2022年第8号)
- 《环境化学》戴树桂(第二版)-课后习题与参考答案
- 系统集成维护方案
- 提香-西方美术史-
- 房屋安全鉴定报告登记表范本
- 社会工作-生态系统理论视角下农村留守儿童问题研究论文
- 2023年08月中国人民解放军海军面向社会公开招考专业技能类文职人员笔试历年难易错点考题荟萃附带答案详解
- 小学道法二 将改革开放进行到底课件
评论
0/150
提交评论