📄 os_cpu_a.src
字号:
; END OF OSCtxSw
CSEG AT 0000BH
LJMP OSTickISR
;
; void OSTickISR(void) interrupt 1
RSEG ?PR?OSTickISR?OS_CPU_A
USING 0
OSTickISR:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 183
; {
; /* OS_STK idata *SysStkSP;
; OS_STK *UserStkSP;
; INT8U STKCount;*/
;
; TR0=0;
; SOURCE LINE # 189
CLR TR0
; TH0=0x70;
; SOURCE LINE # 190
MOV TH0,#070H
; TL0=0x00;
; SOURCE LINE # 191
MOV TL0,#00H
; TR0 = 1;
; SOURCE LINE # 192
SETB TR0
;
; OSIntEnter();
; SOURCE LINE # 194
LCALL _?OSIntEnter
; /* if (OSIntNesting == 1)
; {
; SysStkSP=UserSysSP_Start;
; STKCount=SP-UserSysSP_Start;
; UserStkSP=OSTCBCur->OSTCBStkPtr;
;
; *UserStkSP=STKCount;
;
; do
; {
; SysStkSP++;
; UserStkSP++;
; *UserStkSP=*SysStkSP;
; STKCount--;
; }while(STKCount!=0);
; } */
; OSTimeTick();
; SOURCE LINE # 211
LCALL _?OSTimeTick
; OSIntExit();
; SOURCE LINE # 212
LCALL _?OSIntExit
; }
; SOURCE LINE # 213
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF OSTickISR
;
; void OSIntCtxSw(void)
RSEG ?PR?OSIntCtxSw?OS_CPU_A
OSIntCtxSw:
USING 0
; SOURCE LINE # 215
; {
; SOURCE LINE # 216
; OS_STK idata *SysStkSP;
; OS_STK *UserStkSP;
; INT8U STKCount;
;
; OSTaskSwHook();
; SOURCE LINE # 221
LCALL _?OSTaskSwHook
;
; OSTCBCur=OSTCBHighRdy;
; SOURCE LINE # 223
MOV DPTR,#OSTCBHighRdy
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#OSTCBCur
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OSPrioCur=OSPrioHighRdy;
; SOURCE LINE # 224
MOV DPTR,#OSPrioHighRdy
MOVX A,@DPTR
MOV DPTR,#OSPrioCur
MOVX @DPTR,A
;
; UserStkSP=OSTCBCur->OSTCBStkPtr;
; SOURCE LINE # 226
MOV DPTR,#OSTCBCur
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PLDPTR
;---- Variable 'UserStkSP?244' assigned to Register 'R1/R2/R3' ----
; SysStkSP=UserSysSP_Start;
; SOURCE LINE # 227
MOV R7,UserSysSP_Start
;---- Variable 'SysStkSP?243' assigned to Register 'R7' ----
; STKCount=*UserStkSP;
; SOURCE LINE # 228
LCALL ?C?CLDPTR
MOV R6,A
;---- Variable 'STKCount?245' assigned to Register 'R6' ----
; // STKCount-=4;
; SP=UserSysSP_Start+STKCount;
; SOURCE LINE # 230
ADD A,UserSysSP_Start
MOV SP,A
?C0011:
;
; do{
; SOURCE LINE # 232
; UserStkSP++;
; SOURCE LINE # 233
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; SysStkSP++;
; SOURCE LINE # 234
INC R7
; *SysStkSP=*UserStkSP;
; SOURCE LINE # 235
LCALL ?C?CLDPTR
MOV R0,AR7
MOV @R0,A
; STKCount--;
; SOURCE LINE # 236
DJNZ R6,?C0011
; }while(STKCount!=0);
; SOURCE LINE # 237
;
; #if CXBP_OK>0
; UserStkSP++;
; SOURCE LINE # 240
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserStkSP_tmp=UserStkSP;
; SOURCE LINE # 241
MOV DPTR,#UserStkSP_tmp
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; #pragma asm
; MOV R0,#LOW (UserStkSP_tmp)
MOV R0,#LOW (UserStkSP_tmp)
; ;MOV R0,#UserStkSP_tmp
;MOV R0,#UserStkSP_tmp
; ;INC R0
;INC R0
; ;MOV DPH,@R0 ;变量UserStkSP在IDATA中
;MOV DPH,@R0 ;变量UserStkSP在IDATA中
; ;INC R0
;INC R0
; ;MOV DPL,@R0
;MOV DPL,@R0
;
; ;MOVX A,@DPTR
;MOVX A,@DPTR
; MOVX A,@R0
MOVX A,@R0
; MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
; ;INC DPTR
;INC DPTR
; INC R0
INC R0
; ;MOVX A,@DPTR
;MOVX A,@DPTR
; MOVX A,@R0
MOVX A,@R0
; MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
; #pragma endasm
; #endif
;
; #pragma asm
; POPALL
POPALL
; RETI
RETI
; #pragma endasm
;
; }
; SOURCE LINE # 266
RET
; END OF OSIntCtxSw
;
; void OSStartHighRdy(void)
RSEG ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
USING 0
; SOURCE LINE # 268
; {
; SOURCE LINE # 269
; OS_STK idata *SysStkSP;
; OS_STK *UserStkSP;
; INT8U STKCount;
;
; OSTaskSwHook();
; SOURCE LINE # 274
LCALL _?OSTaskSwHook
;
;
; SysStkSP=UserSysSP_Start;
; SOURCE LINE # 277
MOV R7,UserSysSP_Start
;---- Variable 'SysStkSP?346' assigned to Register 'R7' ----
; OSTCBCur=OSTCBHighRdy;
; SOURCE LINE # 278
MOV DPTR,#OSTCBHighRdy
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#OSTCBCur
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OSPrioCur=OSPrioHighRdy;
; SOURCE LINE # 279
MOV DPTR,#OSPrioHighRdy
MOVX A,@DPTR
MOV DPTR,#OSPrioCur
MOVX @DPTR,A
;
; UserStkSP=OSTCBCur->OSTCBStkPtr;
; SOURCE LINE # 281
MOV DPTR,#OSTCBCur
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PLDPTR
;---- Variable 'UserStkSP?347' assigned to Register 'R1/R2/R3' ----
; STKCount=*UserStkSP;
; SOURCE LINE # 282
LCALL ?C?CLDPTR
MOV R6,A
;---- Variable 'STKCount?348' assigned to Register 'R6' ----
;
; SP=UserSysSP_Start+STKCount;
; SOURCE LINE # 284
ADD A,UserSysSP_Start
MOV SP,A
?C0015:
;
; do{
; SOURCE LINE # 286
; UserStkSP++;
; SOURCE LINE # 287
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; SysStkSP++;
; SOURCE LINE # 288
INC R7
; *SysStkSP=*UserStkSP;
; SOURCE LINE # 289
LCALL ?C?CLDPTR
MOV R0,AR7
MOV @R0,A
; STKCount--;
; SOURCE LINE # 290
DJNZ R6,?C0015
; }while(STKCount!=0);
; SOURCE LINE # 291
;
; #if CXBP_OK>0
; UserStkSP++;
; SOURCE LINE # 294
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserStkSP_tmp=UserStkSP;
; SOURCE LINE # 295
MOV DPTR,#UserStkSP_tmp
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; #pragma asm
; MOV R0,#LOW (UserStkSP_tmp)
MOV R0,#LOW (UserStkSP_tmp)
; ;MOV R0,#UserStkSP_tmp
;MOV R0,#UserStkSP_tmp
; ;INC R0
;INC R0
; ;MOV DPH,@R0 ;变量UserStkSP在IDATA中
;MOV DPH,@R0 ;变量UserStkSP在IDATA中
; ;INC R0
;INC R0
; ;MOV DPL,@R0
;MOV DPL,@R0
;
; ;MOVX A,@DPTR
;MOVX A,@DPTR
; MOVX A,@R0
MOVX A,@R0
; MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
MOV ?C_XBP,A ;?C_XBP 仿真堆栈指针高8位
; ;INC DPTR
;INC DPTR
; INC R0
INC R0
; ;MOVX A,@DPTR
;MOVX A,@DPTR
; MOVX A,@R0
MOVX A,@R0
; MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
MOV ?C_XBP+1,A ;?C_XBP 仿真堆栈指针低8位
; #pragma endasm
; #endif
;
; OSRunning = 1;
; SOURCE LINE # 315
MOV DPTR,#OSRunning
MOV A,#01H
MOVX @DPTR,A
;
; #pragma asm
; POPALL
POPALL
; RETI
RETI
; #pragma endasm
; }
; SOURCE LINE # 321
RET
; END OF OSStartHighRdy
CSEG AT 00023H
LJMP _?SerialISR
;
; #if SERIAL_OK>0
; void SerialISR(void) reentrant interrupt 4 using 0
RSEG ?PR?_?SerialISR?OS_CPU_A
USING 0
_?SerialISR:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
USING 0
MOV PSW,#00H
; SOURCE LINE # 324
; {
; // EA=0;
; OSIntEnter();
; SOURCE LINE # 327
LCALL _?OSIntEnter
; serial();
; SOURCE LINE # 328
LCALL _?serial
; // EA=1;
; OSIntExit();
; SOURCE LINE # 330
LCALL _?OSIntExit
; }
; SOURCE LINE # 331
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF _?SerialISR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -