📄 os_core.src
字号:
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#0FFFFH
LCALL ?C?ADDXBP
MOV A,R7
MOVX @DPTR,A
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
; {
; OS_TCB *ptcb;
;
;
; OS_ENTER_CRITICAL();
; SOURCE LINE # 707
CLR EA
; ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */
; SOURCE LINE # 708
MOV DPTR,#OSTCBFreeList
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; if (ptcb != (OS_TCB *)0) {
; SOURCE LINE # 709
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ORL A,R2
ORL A,R3
JNZ $ + 5H
LJMP ?C0034
; OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */
; SOURCE LINE # 710
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#03H
LCALL ?C?PLDOPTR
MOV DPTR,#OSTCBFreeList
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OS_EXIT_CRITICAL();
; SOURCE LINE # 711
SETB EA
; ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */
; SOURCE LINE # 712
MOV DPTR,#04H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?PSTPTR
; ptcb->OSTCBPrio = (INT8U)prio; /* Load task priority into TCB */
; SOURCE LINE # 713
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0CH
MOV A,R7
LCALL ?C?CSTOPTR
; ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */
; SOURCE LINE # 714
MOV DPTR,#0BH
CLR A
LCALL ?C?CSTOPTR
; ptcb->OSTCBDly = 0; /* Task is not delayed */
; SOURCE LINE # 715
MOV DPTR,#09H
CLR A
MOV B,A
LCALL ?C?ISTOPTR
;
; #if OS_TASK_CREATE_EXT_EN
; ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */
; ptcb->OSTCBStkSize = stk_size; /* Store stack size */
; ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */
; ptcb->OSTCBOpt = opt; /* Store task options */
; ptcb->OSTCBId = id; /* Store task ID */
; #else
; pext = pext; /* Prevent compiler warning if not used */
; SOURCE LINE # 724
MOV DPTR,#0EH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0EH
LCALL ?C?XBPOFF
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; stk_size = stk_size;
; SOURCE LINE # 725
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPTR,#0CH
LCALL ?C?XBPOFF
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; pbos = pbos;
; SOURCE LINE # 726
MOV DPTR,#07H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#07H
LCALL ?C?XBPOFF
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; opt = opt;
; SOURCE LINE # 727
MOV DPTR,#011H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPTR,#011H
LCALL ?C?XBPOFF
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; id = id;
; SOURCE LINE # 728
MOV DPTR,#0AH
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPTR,#0AH
LCALL ?C?XBPOFF
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; #endif
;
; #if OS_TASK_DEL_EN
; ptcb->OSTCBDelReq = OS_NO_ERR;
; #endif
;
; ptcb->OSTCBY = prio >> 3; /* Pre-compute X, Y, BitX and BitY */
; SOURCE LINE # 735
MOV A,R7
RRC A
RRC A
RRC A
ANL A,#01FH
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0EH
MOV A,R7
LCALL ?C?CSTOPTR
; ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
; SOURCE LINE # 736
MOV DPTR,#0EH
LCALL ?C?CLDOPTR
MOV DPTR,#OSMapTbl
MOVC A,@A+DPTR
MOV DPTR,#010H
LCALL ?C?CSTOPTR
; ptcb->OSTCBX = prio & 0x07;
; SOURCE LINE # 737
MOV DPTR,#03H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R7,A
ANL A,#07H
MOV DPTR,#0DH
LCALL ?C?CSTOPTR
; ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
; SOURCE LINE # 738
MOV DPTR,#0DH
LCALL ?C?CLDOPTR
MOV DPTR,#OSMapTbl
MOVC A,@A+DPTR
MOV DPTR,#0FH
LCALL ?C?CSTOPTR
;
; #if OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_SEM_EN
; ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Task is not pending on an event */
; #endif
;
; #if OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2))
; ptcb->OSTCBMsg = (void *)0; /* No message received */
; #endif
;
; OS_ENTER_CRITICAL();
; SOURCE LINE # 748
CLR EA
; OSTCBPrioTbl[prio] = ptcb;
; SOURCE LINE # 749
MOV A,R7
MOV B,#03H
MUL AB
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
; SOURCE LINE # 750
MOV DPTR,#OSTCBList
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#03H
LCALL ?C?PSTOPTR
; ptcb->OSTCBPrev = (OS_TCB *)0;
; SOURCE LINE # 751
MOV R3,#00H
MOV R2,#00H
MOV R1,#00H
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#06H
LCALL ?C?PSTOPTR
; if (OSTCBList != (OS_TCB *)0) {
; SOURCE LINE # 752
MOV DPTR,#OSTCBList
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ORL A,R2
ORL A,R3
JZ ?C0035
; OSTCBList->OSTCBPrev = ptcb;
; SOURCE LINE # 753
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#OSTCBList
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#06H
LCALL ?C?PSTOPTR
; }
; SOURCE LINE # 754
?C0035:
; OSTCBList = ptcb;
; SOURCE LINE # 755
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#OSTCBList
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
; SOURCE LINE # 756
MOV DPTR,#OSRdyGrp
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#010H
LCALL ?C?CLDOPTR
MOV R6,A
MOV A,R7
ORL A,R6
MOV DPTR,#OSRdyGrp
MOVX @DPTR,A
; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
; SOURCE LINE # 757
MOV DPTR,#0EH
LCALL ?C?CLDOPTR
ADD A,#LOW (OSRdyTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSRdyTbl)
MOV DPH,A
PUSH DPH
PUSH DPL
MOVX A,@DPTR
MOV R7,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#0FH
LCALL ?C?CLDOPTR
MOV R6,A
MOV A,R7
ORL A,R6
POP DPL
POP DPH
MOVX @DPTR,A
; OS_EXIT_CRITICAL();
; SOURCE LINE # 758
SETB EA
; return (OS_NO_ERR);
; SOURCE LINE # 759
MOV R7,#00H
SJMP ?C0036
; } else {
; SOURCE LINE # 760
?C0034:
; OS_EXI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -