版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、page西安邮电学院 计算机系12022-4-14嵌入式实时操作系统嵌入式实时操作系统 C/OS-II西安邮电学院-计算机系Tel: 85383409 (ZQL)Email: page2022-4-14西安邮电学院 计算机系2第3章 uC/OS-II的中断和时钟page西安邮电学院 计算机系32022-4-14第3章 目录n1、 uC/OS-II的中断n2、 uC/OS-II的时钟n3、时间管理page西安邮电学院 计算机系42022-4-14第3章 目录n1、 uC/OS-II的中断n2、 uC/OS-II的时钟n3、时间管理page西安邮电学院 计算机系52022-4-143.1 uC/O
2、S-II 的中断n基本概念基本概念n中断中断 - 任务正在执行过程中被某紧要事件打断运任务正在执行过程中被某紧要事件打断运行,行,而去处理该紧迫事件的过程;而去处理该紧迫事件的过程;n中断源中断源 - 中断信号的申请者;中断信号的申请者;n中断响应中断响应 - CPU对中断信号相应处理的机制;对中断信号相应处理的机制;n中断嵌套中断嵌套 - 优先级高的中断可以再中断低级的优先级高的中断可以再中断低级的ISR;nISR - (某紧要事件的)中断服务处理程序;(某紧要事件的)中断服务处理程序;n中断向量中断向量 - ISR 的入口地址。的入口地址。page西安邮电学院 计算机系62022-4-14
3、ARM 处理器中断控制原理:VICIntSelect -中断选择寄存器,配置32个中断源的F/I属性。1-FIQ; VICIntEnable -中断使能寄存器,控制相应通道中断申请屏蔽否。 1-使能;page西安邮电学院 计算机系72022-4-14;异常向量表Reset LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0 xb9205f80 LDR PC, PC, #-0 xff0 LDR PC, FIQ_AddrResetAddrD
4、CD ResetInitUndefinedAddr DCD UndefinedSWI_AddrDCD SoftwareInterruptPrefetchAddrDCD PrefetchAbortDataAbortAddr DCD DataAbortNouseDCD 0IRQ_AddrDCD 0FIQ_AddrDCD FIQ_Handler8个字单元,每单元存放一条转移指令;8个字单元,每单元存放一条目标地址;0 x00 -0 x04 -0 x08 -0 x0c -0 x10 -0 x14 -0 x18 -0 x1c -page西安邮电学院 计算机系82022-4-14u FIQ 中断的响应:u
5、 IRQ 中断的响应:在存储器 0 x1c 单元 安排有指令:LDR PC, FIQ_Addr在存储器 0 x18 单元 安排有指令:LDR PC, PC, #-0 xff0备注:执行本指令时,PC = 0 x0000,0020;0 x0000,0020 0 x0000,0ff0 = 0 x0000,0020 + 0 xffff,f010 = 0 xffff,f030(即VICVectAddr寄存器) page西安邮电学院 计算机系92022-4-14IRQ_ISR地址映射关系图 备注VIC涉及到43个相关寄存器 page西安邮电学院 计算机系102022-4-141、硬件自动过程;2、ISR
6、过程;无高级任务激活返回有高级任务激活返回page西安邮电学院 计算机系112022-4-143.1 uC/OS-II 的中断nuC/OS-II 的中断过程的中断过程n在应用系统设计中编写在应用系统设计中编写uC/OS-II的中断服务程序的中断服务程序(ISR)时,要用到两个重要的系统函数。)时,要用到两个重要的系统函数。nOSIntEnter()、OSIntExit()nuC/OS-II 允许中断嵌套,最多可嵌套允许中断嵌套,最多可嵌套 255 层;系统层;系统全局变量全局变量 OSIntNesting 记录中断嵌套层数。记录中断嵌套层数。page西安邮电学院 计算机系122022-4-14
7、3.1 uC/OS-II 的中断n系统函数系统函数 OSIntEnter( )、OSIntExit( )nOSIntEnter( ) nOSIntExit( )函数原型:函数原型:void OSIntEnter( void ) 主要功能:系统变量主要功能:系统变量 OSIntNesting 自加自加1,目的告诉,目的告诉uC/OS-II系统记录中断的嵌套层数。系统记录中断的嵌套层数。函数原型:函数原型:void OSIntExit( void ) 主要功能:系统变量主要功能:系统变量 OSIntNesting 自减自减1,目的告诉,目的告诉uC/OS-II系统中断的嵌套层数,系统中断的嵌套层数
8、,OSIntNesting=0时,则进行一次中断级的任务调度时,则进行一次中断级的任务调度 OSIntCtxSw()。page西安邮电学院 计算机系132022-4-143.1 uC/OS-II 的中断n应用程序中的临界段应用程序中的临界段n临界段的基本概念及实现原理临界段的基本概念及实现原理nuC/OS-II 提供了两个宏操作用于临界段提供了两个宏操作用于临界段工程应用中有工程应用中有 “代码段必须被连续执行代码段必须被连续执行” 的需求,的需求,这种不允许被打断执行的代码段称为这种不允许被打断执行的代码段称为 “临界代码段临界代码段” 或或 “原子操作原子操作” 。通过开关。通过开关CPU
9、中断来实现。中断来实现。OS_ENTER_CRITICAL( ) - 进入临界段进入临界段OS_EXIT_CRITICAL( ) - 退出临界段退出临界段注意事项:用户原子操作尽量的少且小,因为它会影响系注意事项:用户原子操作尽量的少且小,因为它会影响系统的实时性。统的实时性。page西安邮电学院 计算机系142022-4-143.1 uC/OS-II 的中断n应用程序中的临界段举例应用程序中的临界段举例n在在uC/OS-II系统文件中很多地方都要用到。系统文件中很多地方都要用到。n在用户程序中也可能用到,如进行在用户程序中也可能用到,如进行PLL重置。重置。PLLCON = V_PLLCON
10、_DATA;PLLCFG = V_PLLCFG_DATA;OS_ENTER_CRITICAL( ) ;/ 进入临界段进入临界段PLLFEED = 0 xaa;PLLFEED = 0 x55;OS_EXIT_CRITICAL( );/ 退出临界段退出临界段page西安邮电学院 计算机系152022-4-143.1 uC/OS-II 的中断n正常情况下,正常情况下,ISR 应该受应该受 RTOS 的管理。的管理。n实际工程中,确实存在两种情况实际工程中,确实存在两种情况ISR不受不受RTOS管理。管理。uC/OS-II 未对未对ARM 的的 FIQ 进行管理进行管理没有管理必要的中断。没有管理必要
11、的中断。使用使用 FIQ 时应注意它时应注意它与与uC/OS-II 的的无关无关性,性,它它的的ISR只能只能物理缓冲区方式与物理缓冲区方式与uC/OS-II 的其它任务数据通信。的其它任务数据通信。例如掉电处理例如掉电处理,它它的的ISR的主要工作就是保护的主要工作就是保护CPU现场到现场到Flash,然后即,然后即PowerDown,之后不再执行任何的其他,之后不再执行任何的其他 uC/OS-II 任务。任务。page西安邮电学院 计算机系162022-4-14补充:ARM中的中断优先级资源nARM 中的中断优先级资源就是中的中断优先级资源就是 ARM CPU 的中断控制系统。的中断控制系
12、统。ARM7 中最多可以拥有中最多可以拥有32个中断源。个中断源。n每个中断源可配置为每个中断源可配置为 FIQ 或或 IRQ 中断。中断。IRQ 中断又可分为中断又可分为向量向量 IRQ 和和非向量非向量 IRQ,向量,向量 IRQ 最多可安排最多可安排16个中断源,个中断源,按槽位号(按槽位号(#slot)确定其优先级,非向量)确定其优先级,非向量 IRQ中断源则通中断源则通过程序查询方式确定具体的中断源。过程序查询方式确定具体的中断源。page西安邮电学院 计算机系172022-4-14补充:ARM中的中断优先级资源n异常向量表(ARM的7种异常)地址地址异常异常进入时的模式进入时的模式
13、进入时进入时I的状态的状态进入时进入时F的状态的状态0 x00000000复位管理禁止禁止0 x00000004未定义指令未定义IF0 x00000008软件中断异常管理禁止F0 x0000000C中止(预取)中止IF0 x00000010中止(数据)中止IF0 x00000014保留保留0 x00000018IRQ中断禁止F0 x0000001CFIQ快速中断禁止禁止注:表中的I和F表示不对该位有影响,保留原来的值。 page西安邮电学院 计算机系182022-4-14ARM状态各模式下可以访问的寄存器寄存器寄存器类别类别寄存器在汇寄存器在汇编中的名称编中的名称各模式下实际访问的寄存器各模式
14、下实际访问的寄存器用户用户系统系统管理管理中止中止未定义未定义中断中断快中断快中断通通用用寄寄存存器器和和程程序序计计数数器器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR1
15、4_fiqR15(PC)R15状态状态寄存器寄存器CPSRCPSRSPSRSPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqpage西安邮电学院 计算机系192022-4-143.1 uC/OS-II 的中断n在 ARM 中不受 uC/OS-II 管理的 ISR 程序系统结构Startup.s中关于中关于FIQ的处理:的处理:;中断向量表中断向量表Reset LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD
16、0 xb9205f80 LDR PC, PC, #-0 xff0 LDR PC, FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbortNouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handlerpage西安邮电学院 计算机系202022-4-143.1 uC/OS-II 的中断n在在 ARM 中不受中不受 uC/OS-II
17、 管理的管理的 ISR 程序系统结构程序系统结构Startup.s中关于中关于FIQ的处理:的处理:;快速中断快速中断FIQ_Handler STMFD SP!, R0-R3, LR BL FIQ_Exception LDMFD SP!, R0-R3, LR SUBS PC, LR, #4;用户用户FIQ_ISRvoid FIQ_Exception( void ) . . ; / C 语言编码实例参考嵌入式实时操作系统的编程技术周航慈 Page 46page西安邮电学院 计算机系212022-4-143.1 uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序( ISR )
18、的编写的编写uC/OS-II 对对 ARM7TDMI 的的 IRQ 进行了管理,用户的使用方进行了管理,用户的使用方式与不受管理的式与不受管理的 FIQ 有较大的区别。有较大的区别。uC/OS-II 在对在对 ARM7TDMI 移植时已作了处理(移植时已作了处理(ARM IRQ.inc 文件),用户可以直接使用文件),用户可以直接使用C语言编程语言编程 ISR,此之前用户要编,此之前用户要编写写VIC配置及配置及ISR 句柄关联代码。句柄关联代码。void xxx_Eception( void ) OS_ENTER_CRITICAL( ); 清除中断源标志; VICVectAddr = 0;
19、/ 通知 VIC 中断已响应 ISR 业务代码; OS_EXIT_CRITICAL( );page西安邮电学院 计算机系222022-4-143.1 uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序( ISR )的编写的编写- 中断句柄中断句柄uC/OS-II 约定:每个受控的约定:每个受控的 ISR 都必须按照都必须按照ADS汇编宏汇编宏的格式要求,在的格式要求,在 IRQ.s 的尾部添加中断句柄:的尾部添加中断句柄:xxx_Handler HANDLER xxx_Exception备注:备注:nxxx_Handeler 句柄是在句柄是在 target.c 文件文件
20、void VICInit(void) 函数中约定的;函数中约定的;n中断源用中断源用 “中断源通道号中断源通道号” 对应指派;对应指派;nHANDLER 是语言关键词(是语言关键词(keyword););nxxx_Exception 是是 ISR 的函数名;的函数名;n在中断源正式工作前,首先要进行在中断源正式工作前,首先要进行 “中断源初始中断源初始化化” (VIC初始化初始化),这部分的代码一般编放在一个,这部分的代码一般编放在一个硬件系统初始化函数中(该函数一般是编写在硬件系统初始化函数中(该函数一般是编写在 target.c 文件中),(代码少的话)也可以放在文件中),(代码少的话)也
21、可以放在main()函数中。函数中。page西安邮电学院 计算机系232022-4-143.1 uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序( ISR )的编写的编写- VIC 配置配置VIC初始化部分主要是:用初始化部分主要是:用 “中断通道号中断通道号” 指定中断源和指定中断源和对应的中断句柄。例如:指定对应的中断句柄。例如:指定Timer1 的的 ISR 句柄为:句柄为:Timer1_Handler,并将其配置到硬件优先级,并将其配置到硬件优先级 10 代码如下:代码如下:void VICInit(void) extern void Timer1_Handle
22、r(void); VICVectAddr10 = (uint32)Timer1_Handler; VICVectCntl10 = (0 x20 | 0 x05); VICIntEnable = 1 5; / 允许 Timer1 中断 在在 IRQ.s 文件的尾部添加中断句柄指定:文件的尾部添加中断句柄指定: Timer1_Handler HANDLER Timer1_Exception 编写编写 Timer1_ISR (Timer1_Exception) void Timer1_Exception( void ) 关中断;清中断;通知关中断;清中断;通知VIC中断已响应;开中断;中断已响应;开
23、中断; C 代码完成代码完成Timer1 具体业务处理;具体业务处理; page西安邮电学院 计算机系242022-4-143.1 uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序( ISR )的编写的编写- 外设初始化外设初始化若想使指定的外设按照我们约定的方式工作,需对它进行若想使指定的外设按照我们约定的方式工作,需对它进行初始化,此部分代码主要工作:设置外设的工作方式。例初始化,此部分代码主要工作:设置外设的工作方式。例如:设置如:设置 Timer1 的定时常数、中断允许否。代码如下:的定时常数、中断允许否。代码如下: void Timer1Init(void)
24、T1IR = 0 xffffffff;/* 清除清除Timer1的中断标示的中断标示 */ T1TC = 0;/* Timer1的定时计数器的定时计数器TC赋初值赋初值 */ T1TCR = 0 x01;/* Timer1使能使能 & 解复位解复位 */ T1MCR = 0 x03;/* 设置设置Timer1 匹配控制寄存器:当匹配控制寄存器:当 T1TC=T1MR0时,时,Timer1 复位并产生中断复位并产生中断 */ T1MR0 = (Fpclk / OS_TICKS_PER_SEC);/* 设置匹配常数设置匹配常数 */ page西安邮电学院 计算机系252022-4-143.
25、1 uC/OS-II 的中断nuC/OS-II 的中断使用策略的中断使用策略 (备注:具体情况具体分析)(备注:具体情况具体分析)n起因:起因:n故而:故而:uC/OS-II对任务有完备的管理能力,一系统函数的方对任务有完备的管理能力,一系统函数的方式为用户提供了丰富的管理手段;式为用户提供了丰富的管理手段;硬件层上希望硬件层上希望ISR尽量的短;尽量的短;通常并不将中断事件对应的业务处理代码安排在通常并不将中断事件对应的业务处理代码安排在ISR中,中,而是在而是在ISR中仅安排产生中仅安排产生 “信号信号” 或或 “消息消息” ,将物,将物理级的中断事件转换为逻辑级的事件,通过中断级任理级的
26、中断事件转换为逻辑级的事件,通过中断级任务器务器OSIntCtxSw( ) 调度,再完成具体功能。调度,再完成具体功能。备注:中断方式数据采集实例参考嵌入式实时操作系统的编程技术周航慈 Page 55 - 62page西安邮电学院 计算机系262022-4-14第3章 目录n1、 uC/OS-II的中断n2、 uC/OS-II的时钟n3、时间管理page西安邮电学院 计算机系272022-4-143.2 uC/OS-II 的时钟任何任何OS都需要一个标准时钟作为系统资源,驱动都需要一个标准时钟作为系统资源,驱动OS前前行,如用于系统定时、延时、超时判断等;定时通常由硬行,如用于系统定时、延时、
27、超时判断等;定时通常由硬件定时器实现。件定时器实现。uC/OS-II移植到移植到ARM上时,用上时,用 Timer0 实现它的实现它的 “标准时标准时钟钟” 。其周期的设置方法:在。其周期的设置方法:在 uC/OS-II 配置文件配置文件OS_CFG.H 中用宏定义方式设置。中用宏定义方式设置。#define OS_TICKS_PER_SEC 200片内外设片内外设 Timer0 的的 ISR (Tmier0_Exception( ),在有些,在有些书中称为书中称为 OSTickISR( ) )通过调用)通过调用 OSTimeTick( ) 函数,完函数,完成每个成每个OS节拍的系统工作。节拍
28、的系统工作。page西安邮电学院 计算机系282022-4-143.2 uC/OS-II 的时钟nuC/OS-II 的的OSTimeTick( ) 函数的两个基本功能函数的两个基本功能OSTime +; / * 它位于OS_CORE.C文件,INT32U 类型 */遍历遍历 TCB 链表,将任务延时变量链表,将任务延时变量 OSTCBDly - ,若该变,若该变量为量为 0 ,且该任务又不是,且该任务又不是Suspend,则将该任务转入到,则将该任务转入到“就绪状态就绪状态”;备注:备注:OSTimeTick( ) 函数是函数是 uC/OS-II 的基本组成部分,位于的基本组成部分,位于 OS
29、_CORE.C 文件中。文件中。该函数中内嵌了该函数中内嵌了 OSTimeTickHook( ) “时钟钩子函数时钟钩子函数” ,用户可以将目标系统中需要单节拍触发的业务安排在此用户可以将目标系统中需要单节拍触发的业务安排在此函数中。函数中。page西安邮电学院 计算机系292022-4-14第3章 目录n1、 uC/OS-II的中断n2、 uC/OS-II的时钟n3、时间管理page西安邮电学院 计算机系302022-4-143.3 uC/OS-II 的的时间管理时间管理 -(任务延时、取消延时、获取(任务延时、取消延时、获取/设置系统时间等操作)设置系统时间等操作)n任务的延时任务的延时uC/OS-II 规定除了规定除了OSTaskIdel( ) 之外的所有任务必须在任务之外的所有任务必须在任务体中合适的位置安排体中合适的位置安排OSTimeDly( ) 函数,使本任务的运行能延函数,使本任务的运行能延时(暂停)一段时间或时(暂停)一段时间或xxxPend函数,使其他任务有机会得到函数,使其他任务有机会得到CPU运行机会。运行机会。备注:备注: OSTimeDly( ) 函数结束时会进行一次任务调度。函数结束时会进行一次任务调度。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招标文件评审记录跟踪查询
- 九年级道德与法治上册 第二单元 感受祖国的心跳 第四课 城乡直通车 第3框 城乡统筹教案 人民版
- 2024-2025学年新教材高中生物 第1章 遗传因子的发现 第1节 第1课时 一对相对性状的杂交实验过程和解释教案 新人教版必修第二册
- 安徽省滁州二中高中信息技术《5.1认识信息资源的管理》教案 新人教版必修
- 广东省2024-2025年高中物理 学业水平测试冲A 第6章 机械能和能源教案(含解析)
- 2023七年级英语下册 Unit 3 How do you get to school Section B 第5课时(3a-3b)教案 (新版)人教新目标版
- 2023六年级数学下册 第四单元 圆柱和圆锥4.8 估算小麦堆的质量教案 冀教版
- 自建房修建及安全合同(2篇)
- 人教版血管课件
- 第六讲 变换句型写一写(看图写话教学)-一年级语文上册(统编版·2024秋)
- 东方美人完整
- 《罗生门》读书分享交流
- 我的大学生涯发展展示
- 项目交付管理作业指引课件
- 大连某项目钢结构深化设计与施工工程招标文件
- 生涯规划展示
- 《银河帝国-基地》阅读试卷及答案
- 机器学习复习题附有答案
- 《俗世奇人》(读书指导)课件
- 风机行业报告
- 如何引领教师专业成长
评论
0/150
提交评论