📄 os_tickisr.asm
字号:
.page
.text
_OSTickISR:
.ref _OSTimeTick
.ref _OSIntEnter
.ref _OSTCBCur
.ref _OSIntExit
.ref _OSIntCtxFlag
.ref _OSIntCtxSwExe
.global _OSTickISR
PUSH XAR7
PUSH XAR6
PUSH XAR5
PUSH XAR4
PUSH XAR3
PUSH XAR2
PUSH AR1H:AR0H
PUSH XT
PUSH RPC
MOV AL, #0X01
MOV *(0:0xce1), @AL ;手动清除中断应答寄存器中标志位
;MOVW DP,#_OSIntNesting ;提示uc/OS-II 进入中断
;INC @_OSIntNesting ;
LCR _OSIntEnter
LCR _OSTimeTick
LCR _OSIntExit
;判断是否有抢占发生,有则进行任务切换
CMP @_OSIntCtxFlag, #1 ;并保存本次任务的现场
SB BACK, NEQ
MOVW DP,#_OSTCBCur ; OSTCBCur->OSTCBStkPtr = SP
MOVL XAR4,@_OSTCBCur ;
MOV AL,SP
MOV *+XAR4[0],AL ; SAVE the context
SUB @_OSIntCtxFlag, #1 ;CLEAR THE _OSIntCtxFlag
LC _OSIntCtxSwExe
; NASP
BACK:
POP RPC
POP XT
POP AR1H:AR0H
POP XAR2
POP XAR3
POP XAR4
POP XAR5
POP XAR6
POP XAR7
IRET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -