📄 os_cpu_a.s
字号:
.global OSTickISR
.global OSStartHighRdy
.global OSCtxSw
.global OSIntCtxSw
OSStartHighRdy:
xcall OSTaskSwHook
xld.w %r1,OSRunning
ld.w %r2,0x1
xld.b [%r1],%r2
xld.w %r1,[OSTCBHighRdy]
ld.w %r2,[%r1]
ld.w %sp,%r2
popn %r1
ld.w %ahr,%r0
ld.w %alr,%r1
popn %r15
reti ; Run task
OSCtxSw:
pushn %r15
ld.w %r1,%alr
ld.w %r0,%ahr
pushn %r1
ld.w %r2,%sp
xld.w %r3,[OSTCBCur]
ld.w [%r3],%r2
xcall OSTaskSwHook
xld.w %r3,[OSTCBHighRdy]
xld.w %r4,OSTCBCur
ld.w [%r4],%r3
xld.w %r3,[OSPrioHighRdy]
xld.w %r4,OSPrioCur
ld.b [%r4],%r3
xld.w %r5,[OSTCBHighRdy]
ld.w %r4,[%r5]
ld.w %sp,%r4
popn %r1
ld.w %ahr,%r0
ld.w %alr,%r1
popn %r15
reti
OSIntCtxSw:
xcall OSTaskSwHook
xld.w %r3,[OSTCBHighRdy]
xld.w %r4,OSTCBCur
ld.w [%r4],%r3
xld.w %r3,[OSPrioHighRdy]
xld.w %r4,OSPrioCur
ld.b [%r4],%r3
xld.w %r5,[OSTCBHighRdy]
ld.w %r4,[%r5]
ld.w %sp,%r4
popn %r1
ld.w %ahr,%r0
ld.w %alr,%r1
popn %r15
reti ; Return to new task
;
OSTickISR:
pushn %r15
ld.w %r1,%alr
ld.w %r0,%ahr
pushn %r1
xld.w %r4,0x00040282
xld.w %r5,0x08
xld.b [%r4],%r5
xcall OSIntEnter
xld.b %r1,[OSIntNesting]
cmp %r1,0x1
jrne ppp
ld.w %r2,%sp
xld.w %r3,[OSTCBCur]
ld.w [%r3],%r2
ppp:
xcall OSTimeTick
xcall OSIntExit
popn %r1
ld.w %ahr,%r0
ld.w %alr,%r1
popn %r15
reti ; Return to interrupted task
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -