2008-11-4
ucOS-II的中断处理
初始化中断向量,编写中断引导程序
程序清单 L3.15
μC/OS-II中的中断服务子程序.
|
用户中断服务子程序:
|
保存全部CPU寄存器;
(1)
|
调用OSIntEnter或OSIntNesting直接加1;
(2)
|
执行用户代码做中断服务;
(3)
|
调用OSIntExit();
(4)
|
恢复所有CPU寄存器;
(5)
|
执行中断返回指令;
(6)
|
用户代码应该将全部CPU寄存器推入当前任务栈[L3.15(1)]。注意,有些微处理器,例如Motorola68020(及68020以上的微处理器),做中断服务时使用另外的堆栈(ARM也是)。
μC/OS-Ⅱ可以用在这类微处理器中,当任务切换时,寄存器是保存在被中断了的那个任务的栈中的。
程序清单:
基于ARM920T的中断处理过程
|
UCOS_IRQHandler//中断入口地址,在中断向量表初始化时被设置
/*
此时已处于中断模式(在ARM处理器中,当中断发生时,CPU自动保存CPSR到SPSR_irq,并切换到中断模式),因此sp为中断模式下的栈指针(如上所说,ARM具有中断模式栈)
*/
;保存现场,先将任务的现场保存到中断栈中
stmfd sp!,{r0-r3,r12,lr}
;调用相关函数
bl OSIntEnter
bl C_IRQHandler
;调用OSIntExit函数,该函数判断是否有更高优先级的任务进入就绪
bl OSIntExit
;if(OSIntCtxSwFlag == 1) _IntCtxSw()
ldr r0,=OSIntCtxSwFlag
ldr r1,[r0]
cmp r1,#1
;有更高优先级的任务进入了就绪状态,则进行中断级的任务切换,返回执行新的任务
beq _IntCtxSw
/*不进行任务切换,返回被中断的任务*/
;恢复现场
ldmfd sp!,{r0-r3,r12,lr}
;下面的指令令pc = lr-4实现中断返回,同时将spsr_irq的值复制到CPSR,实现模式切换(即返回到用户模式)
subs pc,lr,#4
|
在调用μC/OS-Ⅱ的任何其它服务之前,μC/OS-Ⅱ要求用户首先调用系统初始化函数OSIint()。OSIint()初始化μC/OS-Ⅱ所有的变量和数据结构(见OS_CORE.C)。
OSInit()建立空闲任务idle task,这个任务总是处于就绪态的。空闲任务OSTaskIdle()的优先级总是设成最低,即OS_LOWEST_PRIO。如果统计任务允许OS_TASK_STAT_EN和任务建立扩展允许都设为1,则OSInit()还得建立统计任务OSTaskStat()并且让其进入就绪态。OSTaskStat的优先级总是设为OS_LOWEST_PRIO-1。
图3.7
调用OSInit()之后的数据结构
μC/OS-Ⅱ还初始化了5个空数据结构缓冲区,如图F3.8所示。每个缓冲区都是单向链表,允许μC/OS-Ⅱ从缓冲区中迅速得到或释放一个缓冲区中的元素。
图3.8
空缓冲区(图中还有OSFlagFreeList链表未画出)
多任务的启动是用户通过调用OSStart()实现的。然而,启动μC/OS-Ⅱ之前,用户至少要建立一个应用任务。多任务启动以后变量与数据结构中的内容如图F3.9所示。
图3.9调用OSStart()以后的变量与数据结构
这里笔者假设用户建立的任务优先级为6,注意,OSTaskCtr指出已经建立了3个任务。OSRunning已设为“真”,指出多任务已经开始,OSPrioCur和OSPrioHighRdy存放的是用户应用任务的优先级,OSTCBCur和OSTCBHighRdy二者都指向用户任务的任务控制块。
分享到:
相关推荐
uC/OS-II学习笔记—空闲链表和就绪链表
uC/OS-II内核分析、移植与驱动程序开发 uCOS学习笔记
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
该笔记并非源代码的详细讲解,亦非μC/OS-II的使用说明,而是汇总了阅读源码过程中产生的疑问及解答,进而从中归纳总结出μC/OS-II系统的内在机理,对于想从本质和源头探索操作系统的程序猿或许有点参考帮助,或许...
uC/OS-II学习笔记和讲稿,对uC/OS-II实时多任务操作系统感兴趣的网友有用。