os_cpu_a.s

来自「这是一个嵌入式系统的ucos-ii的移植程序。」· S 代码 · 共 115 行

S
115
字号
            .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 + =
减小字号Ctrl + -
显示快捷键?