📄 os_cpu_a.src
字号:
; // UserUsrStkSP -= UserStkCount;
;
; SP = UserSysSP_Start + UserStkCount; //#Lin@系统堆栈定位
; SOURCE LINE # 206
ADD A,UserSysSP_Start
MOV SP,A
?C0006:
;
; //#Lin@数据传输
;
; do
; {
; SOURCE LINE # 211
; UserUsrStkSP ++;
; SOURCE LINE # 212
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserSysStkSP ++;
; SOURCE LINE # 213
INC R7
; *UserSysStkSP = *UserUsrStkSP;
; SOURCE LINE # 214
LCALL ?C?CLDPTR
MOV R0,AR7
MOV @R0,A
; UserStkCount --;
; SOURCE LINE # 215
DJNZ R6,?C0006
; }
; SOURCE LINE # 216
; while(UserStkCount != 0);
; SOURCE LINE # 217
;
;
; #pragma asm
;
; USERPOPALL
USERPOPALL
; RETI //#Lin@仿真中断返回
RETI
;
; #pragma endasm
; }
; SOURCE LINE # 226
RET
; END OF OSCtxSw
CSEG AT 0000BH
LJMP OSTickISR
; //
; //=======================================================================================================
;
; //=======================================================================================================
; //
; //#Lin@中断服务
;
; void OSTickISR(void) interrupt 1 //using 3
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 # 234
; {
;
; // EA = 0;
; // OS_STK idata *UsrStkSP;
;
; // *UsrStkSP = SP;
; OS_STK idata *UserSysStkSP;
; OS_STK *UserUsrStkSP;
; INT8U UserStkCount;
;
; TR0 = 0;
; SOURCE LINE # 245
CLR TR0
; TH0 = 0x70;
; SOURCE LINE # 246
MOV TH0,#070H
; TL0 = 0x0;
; SOURCE LINE # 247
MOV TL0,#00H
; TR0 = 1;
; SOURCE LINE # 248
SETB TR0
;
; P1 ^= 0x80;
; SOURCE LINE # 250
XRL P1,#080H
;
; OSIntEnter();
; SOURCE LINE # 252
LCALL _?OSIntEnter
; if (OSIntNesting == 1){
; SOURCE LINE # 253
MOV DPTR,#OSIntNesting
MOVX A,@DPTR
XRL A,#01H
JNZ ?C0008
;
; // OSTCBCur ->OSTCBStkPtr = UsrStkSP;
; UserSysStkSP = UserSysSP_Start;
; SOURCE LINE # 256
MOV R7,UserSysSP_Start
;---- Variable 'UserSysStkSP?143' assigned to Register 'R7' ----
; UserStkCount = SP - UserSysSP_Start;
; SOURCE LINE # 257
CLR C
MOV A,SP
SUBB A,UserSysSP_Start
MOV R6,A
;---- Variable 'UserStkCount?145' assigned to Register 'R6' ----
; UserUsrStkSP = OSTCBCur ->OSTCBStkPtr;
; SOURCE LINE # 258
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 'UserUsrStkSP?144' assigned to Register 'R1/R2/R3' ----
;
; // SP = UserSysSP_Start;//?
;
; // UserUsrStkSP += UserStkCount;
; *UserUsrStkSP = UserStkCount;
; SOURCE LINE # 263
MOV A,R6
LCALL ?C?CSTPTR
?C0011:
;
; // OSTCBCur ->OSTCBStkPtr = UserUsrStkSP;
;
; do
; {
; SOURCE LINE # 268
; UserUsrStkSP ++;
; SOURCE LINE # 269
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserSysStkSP ++;
; SOURCE LINE # 270
INC R7
; *UserUsrStkSP = *UserSysStkSP;
; SOURCE LINE # 271
MOV R0,AR7
MOV A,@R0
LCALL ?C?CSTPTR
; UserStkCount --;
; SOURCE LINE # 272
DJNZ R6,?C0011
; }
; SOURCE LINE # 273
; while(UserStkCount != 0);
; SOURCE LINE # 274
; }
; SOURCE LINE # 275
?C0008:
;
; OSTimeTick();
; SOURCE LINE # 277
LCALL _?OSTimeTick
; OSIntExit();
; SOURCE LINE # 278
LCALL _?OSIntExit
;
; // EA = 1;
; }
; SOURCE LINE # 281
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
; //
; //=======================================================================================================
;
; //=======================================================================================================
; //
; //#Lin@在ISR中执行任务切换
;
; void OSIntCtxSw(void) //using 3
RSEG ?PR?OSIntCtxSw?OS_CPU_A
OSIntCtxSw:
USING 0
; SOURCE LINE # 289
; {
; SOURCE LINE # 290
;
; // OS_STK idata *UsrStkSP;
;
; // *UsrStkSP = SP;
;
; OS_STK idata *UserSysStkSP;
; OS_STK *UserUsrStkSP;
; INT8U UserStkCount;
;
; OSTaskSwHook();
; SOURCE LINE # 300
LCALL _?OSTaskSwHook
;
;
; OSTCBCur = OSTCBHighRdy;
; SOURCE LINE # 303
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 # 304
MOV DPTR,#OSPrioHighRdy
MOVX A,@DPTR
MOV DPTR,#OSPrioCur
MOVX @DPTR,A
;
; // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
; SOURCE LINE # 307
MOV DPTR,#OSTCBHighRdy
MOVX A,@DPTR
MOV R3,A
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PLDPTR
LCALL ?C?CLDPTR
MOV R7,A
;---- Variable 'UserStkCount?248' assigned to Register 'R7' ----
; UserSysStkSP = UserSysSP_Start;
; SOURCE LINE # 308
MOV R6,UserSysSP_Start
;---- Variable 'UserSysStkSP?246' assigned to Register 'R6' ----
; UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; SOURCE LINE # 309
;---- Variable 'UserUsrStkSP?247' assigned to Register 'R1/R2/R3' ----
;
; // UserUsrStkSP -= UserStkCount;
;
; SP = UserSysSP_Start + UserStkCount;
; SOURCE LINE # 313
ADD A,UserSysSP_Start
MOV SP,A
?C0015:
;
; do
; {
; SOURCE LINE # 316
; UserUsrStkSP ++;
; SOURCE LINE # 317
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserSysStkSP ++;
; SOURCE LINE # 318
INC R6
; *UserSysStkSP = *UserUsrStkSP;
; SOURCE LINE # 319
LCALL ?C?CLDPTR
MOV R0,AR6
MOV @R0,A
; UserStkCount --;
; SOURCE LINE # 320
DJNZ R7,?C0015
; }
; SOURCE LINE # 321
; while(UserStkCount != 0);
; SOURCE LINE # 322
;
;
;
; #pragma asm
;
; USERPOPALL
USERPOPALL
; RETI
RETI
;
; #pragma endasm
; }
; SOURCE LINE # 332
RET
; END OF OSIntCtxSw
; //
; //=======================================================================================================
;
; //=======================================================================================================
; //#Lin@起始
;
; void OSStartHighRdy(void) //using 3
RSEG ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
USING 0
; SOURCE LINE # 339
; {
; SOURCE LINE # 340
; // OS_STK idata *UsrStkSP;
;
; // *UsrStkSP = SP;
; OS_STK idata *UserSysStkSP;
; OS_STK *UserUsrStkSP;
; INT8U UserStkCount;
;
; // UserSysSP_Start = SP;
;
; OSTaskSwHook();
; SOURCE LINE # 350
LCALL _?OSTaskSwHook
;
; OSRunning = TRUE;
; SOURCE LINE # 352
MOV DPTR,#OSRunning
MOV A,#01H
MOVX @DPTR,A
;
; // UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
; SOURCE LINE # 355
MOV DPTR,#OSTCBHighRdy
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
LCALL ?C?CLDPTR
MOV R7,A
;---- Variable 'UserStkCount?351' assigned to Register 'R7' ----
; UserSysStkSP = UserSysSP_Start;
; SOURCE LINE # 356
MOV R6,UserSysSP_Start
;---- Variable 'UserSysStkSP?349' assigned to Register 'R6' ----
; UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; SOURCE LINE # 357
;---- Variable 'UserUsrStkSP?350' assigned to Register 'R1/R2/R3' ----
;
; // UserUsrStkSP -= UserStkCount;
;
; SP = UserSysSP_Start + UserStkCount;
; SOURCE LINE # 361
ADD A,UserSysSP_Start
MOV SP,A
?C0019:
;
; do
; {
; SOURCE LINE # 364
; UserUsrStkSP ++;
; SOURCE LINE # 365
MOV A,#01H
ADD A,R1
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
; UserSysStkSP ++;
; SOURCE LINE # 366
INC R6
; *UserSysStkSP = *UserUsrStkSP;
; SOURCE LINE # 367
LCALL ?C?CLDPTR
MOV R0,AR6
MOV @R0,A
; UserStkCount --;
; SOURCE LINE # 368
DJNZ R7,?C0019
; }
; SOURCE LINE # 369
; while(UserStkCount != 0);
; SOURCE LINE # 370
;
;
;
; #pragma asm
;
; USERPOPALL
USERPOPALL
; RETI
RETI
;
; #pragma endasm
;
; }
; SOURCE LINE # 381
RET
; END OF OSStartHighRdy
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -