|
程序清单:ucOS-II基于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 |
本文介绍了ucOS-II操作系统在ARM920T处理器上的中断处理过程。详细展示了从中断入口地址UCOS_IRQHandler开始,如何保存任务现场到中断栈、调用OSIntEnter和C_IRQHandler函数,再到检查是否有更高优先级任务就绪并可能进行任务切换的过程。
1226

被折叠的 条评论
为什么被折叠?



