求助 请问在UCOSII系统中怎么使用各种中断

求助 请问在UCOSII系统中怎么使用各种中断,第1张

ucosii实时 *** 作系统的任务不能是中断服务程序,但仍然可以用一个中断服务程序来服务于 *** 作系统的一个或多个任务,比如液贺晌可以在闹锋中断服务程序使中用消息邮箱,或消息队列(OSQPost())等向任务发送按键消息,以唤醒等待按键的任务,注意在中断服务程序的开始调用OSIntEnter();拍枯

告诉任务进入中断服务,禁止调度,执行完时再调用OSIntExit()来退出中断服务程序,这样,按键任务要做的就是等待按键(比如调用OSQPend()挂起),待唤醒后对按键进行为行处理,同样可以用邮箱等方式与流水等任务通信,告知流水灯任务如何运行,这样,这两个任务就可以有条不紊的运转起来了

ucos-ii中断结构及中断嵌套的问腔脊题

中断处理樱圆谈流程

1:IRQ中断发生后调用UCOS_IRQHandler()

2:UCOS_IRQHandler()先压脊碰栈

3:后调用OSIntEnter()

4:根据IRQ偏移量查找处理函数

5:用户中断处理函数

6:OSIntExit()

7:如果发生中断切换调用INTCTXSW否则恢复现场至中断前任务

代码如下:

UCOS_IRQHandler

stmfd sp!,{r0-r12,lr}

bl OSIntEnter

bl C_IRQHandler

bl OSIntExit

ldr r0,=OSIntCtxSwFlag 调用OSIntCtxSw后置1

ldr r1,[r0]

cmp r1,#1

beq _IntCtxSw

ldmfd sp!,{r0-r12,lr}

subs pc,lr,#4

_IntCtxSw

mov r1,#0

str r1,[r0]

ldmfd sp!,{r0-r12,lr}

stmfd sp!,{r0-r3}

mov r1,sp

add sp,sp,#16

sub r2,lr,#4

mrs r3,spsr

orr r0,r3,#NOINT

msr spsr_c,r0

ldr r0,=.+8

movs pc,r0

stmfd sp!,{r2} push old task's pc

stmfd sp!,{r4-r12,lr} push old task's lr,r12-r4

mov r4,r1 Special optimised code below

mov r5,r3

ldmfd r4!,{r0-r3}

stmfd sp!,{r0-


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12387556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存