📄 os_core.src
字号:
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#06H
LCALL ?C?XBPOFF
MOVX A,@DPTR
CPL A
ANL A,R7
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 475
?C0021:
; ptcb = OSTCBPrioTbl[prio]; /* Point to this task's OS_TCB */
; SOURCE LINE # 476
MOV DPTR,#07H
LCALL ?C?XBPOFF
MOVX A,@DPTR
MOV R5,A
MOV B,#03H
MUL AB
ADD A,#LOW (OSTCBPrioTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSTCBPrioTbl)
MOV DPH,A
LCALL ?C?PLDXDATA
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PSTXDATA
; ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task */
; SOURCE LINE # 477
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV DPTR,#0CH
CLR A
MOV B,A
LCALL ?C?ISTOPTR
; ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Unlink ECB from this task */
; SOURCE LINE # 478
MOV R3,#00H
MOV R2,#00H
MOV R1,#00H
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV DPTR,#09H
LCALL ?C?PSTOPTR
; #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
; ptcb->OSTCBMsg = msg; /* Send message directly to waiting task */
; #else
; msg = msg; /* Prevent compiler warning if not used */
; SOURCE LINE # 482
MOV DPTR,#0BH
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV DPTR,#0BH
LCALL ?C?XBPOFF
LCALL ?C?PSTXDATA
; #endif
; ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */
; SOURCE LINE # 484
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV A,R1
ADD A,#0EH
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#0EH
LCALL ?C?XBPOFF
MOVX A,@DPTR
CPL A
ANL A,R7
LCALL ?C?CSTPTR
; if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is ready (could be susp'd) */
; SOURCE LINE # 485
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV DPTR,#0EH
LCALL ?C?CLDOPTR
JNZ ?C0022
; OSRdyGrp |= bity; /* Put task in the ready to run list */
; SOURCE LINE # 486
MOV DPTR,#OSRdyGrp
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#06H
LCALL ?C?XBPOFF
MOVX A,@DPTR
ORL A,R7
MOV DPTR,#OSRdyGrp
MOVX @DPTR,A
; OSRdyTbl[y] |= bitx;
; SOURCE LINE # 487
MOV DPTR,#04H
LCALL ?C?XBPOFF
MOVX A,@DPTR
ADD A,#LOW (OSRdyTbl)
MOV DPL,A
CLR A
ADDC A,#HIGH (OSRdyTbl)
MOV DPH,A
MOVX A,@DPTR
ORL A,R4
MOVX @DPTR,A
; }
; SOURCE LINE # 488
?C0022:
; return (prio);
; SOURCE LINE # 489
MOV R7,AR5
; }
; SOURCE LINE # 490
?C0023:
MOV DPTR,#0FH
LJMP ?C?ADDXBP
; END OF _?OS_EventTaskRdy
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * MAKE TASK WAIT FOR EVENT TO OCCUR
; *
; * Description: This function is called by other uC/OS-II services to suspend a task because an event has
; * not occurred.
; *
; * Arguments : pevent is a pointer to the event control block for which the task will be waiting for.
; *
; * Returns : none
; *
; * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
; *********************************************************************************************************
; */
; #if OS_EVENT_EN > 0
; void OS_EventTaskWait (OS_EVENT *pevent) LG_REENTRANT
RSEG ?PR?_?OS_EventTaskWait?OS_CORE
_?OS_EventTaskWait:
USING 0
; SOURCE LINE # 508
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
LCALL ?C?PSTXDATA
; {
; OSTCBCur->OSTCBEventPtr = pevent; /* Store pointer to event control block in TCB */
; SOURCE LINE # 510
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#09H
LCALL ?C?PSTOPTR
; if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) { /* Task no longer ready */
; SOURCE LINE # 511
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#011H
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 DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#012H
LCALL ?C?CLDOPTR
CPL A
MOV R6,A
MOV A,R7
ANL A,R6
POP DPL
POP DPH
MOVX @DPTR,A
JNZ ?C0024
; OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
; SOURCE LINE # 512
MOV DPTR,#OSRdyGrp
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#013H
LCALL ?C?CLDOPTR
CPL A
MOV R6,A
MOV A,R7
ANL A,R6
MOV DPTR,#OSRdyGrp
MOVX @DPTR,A
; }
; SOURCE LINE # 513
?C0024:
; pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
; SOURCE LINE # 514
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#011H
LCALL ?C?CLDOPTR
MOV R7,A
MOV R6,#00H
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV A,R1
ADD A,#07H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV A,R1
ADD A,R7
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#012H
LCALL ?C?CLDOPTR
ORL A,R7
POP AR1
POP AR2
POP AR3
LCALL ?C?CSTPTR
; pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
; SOURCE LINE # 515
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV A,R1
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#013H
LCALL ?C?CLDOPTR
ORL A,R7
POP AR1
POP AR2
POP AR3
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 516
MOV DPTR,#03H
LJMP ?C?ADDXBP
; END OF _?OS_EventTaskWait
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
; *
; * Description: This function is called by other uC/OS-II services to make a task ready to run because a
; * timeout occurred.
; *
; * Arguments : pevent is a pointer to the event control block which is readying a task.
; *
; * Returns : none
; *
; * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
; *********************************************************************************************************
; */
; #if OS_EVENT_EN > 0
; void OS_EventTO (OS_EVENT *pevent) LG_REENTRANT
RSEG ?PR?_?OS_EventTO?OS_CORE
_?OS_EventTO:
USING 0
; SOURCE LINE # 534
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
LCALL ?C?PSTXDATA
; {
; if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
; SOURCE LINE # 536
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#011H
LCALL ?C?CLDOPTR
MOV R7,A
MOV R6,#00H
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV A,R1
ADD A,#07H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV A,R1
ADD A,R7
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#012H
LCALL ?C?CLDOPTR
CPL A
ANL A,R7
POP AR1
POP AR2
POP AR3
LCALL ?C?CSTPTR
JNZ ?C0026
; pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
; SOURCE LINE # 537
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PLDXDATA
MOV A,R1
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
PUSH AR3
PUSH AR2
PUSH AR1
LCALL ?C?CLDPTR
MOV R7,A
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#013H
LCALL ?C?CLDOPTR
CPL A
ANL A,R7
POP AR1
POP AR2
POP AR3
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 538
?C0026:
; OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
; SOURCE LINE # 539
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#0EH
CLR A
LCALL ?C?CSTOPTR
; OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
; SOURCE LINE # 540
MOV R3,#00H
MOV R2,#00H
MOV R1,#00H
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#OSTCBCur
LCALL ?C?PLDXDATA
MOV DPTR,#09H
LCALL ?C?PSTOPTR
; }
; SOURCE LINE # 541
MOV DPTR,#03H
LJMP ?C?ADDXBP
; END OF _?OS_EventTO
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; * INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
; *
; * Description: This function is called by other uC/OS-II services to initialize the event wait list.
; *
; * Arguments : pevent is a pointer to the event control block allocated to the event.
; *
; * Returns : none
; *
; * Note : This function is INTERNAL to uC/OS-II and your application should not call it.
; *********************************************************************************************************
; */
; #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)
; void OS_EventWaitListInit (OS_EVENT *pevent) LG_REENTRANT
RSEG ?PR?_?OS_EventWaitListInit?OS_CORE
_?OS_EventWaitListInit:
USING 0
; SOURCE LINE # 558
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
LCALL ?C?PSTXDATA
MOV DPTR,#0FFFDH
LCALL ?C?ADDXBP
; {
; INT8U *ptbl;
;
;
; pevent->OSEventGrp = 0x00; /* No task waiting on event */
; SOURCE LINE # 563
MOV DPTR,#03H
LCALL ?C?XBPOFF
LCALL ?C?PLDXDATA
MOV DPTR,#01H
CLR A
LCALL ?C?CSTOPTR
; ptbl = &pevent->OSEventTbl[0];
; SOURCE LINE # 564
MOV A,R1
ADD A,#07H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
LCALL ?C?PSTXDATA
;
; #if OS_EVENT_TBL_SIZE > 0
; *ptbl++ = 0x00;
; SOURCE LINE # 567
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
CLR A
MOV B,#01H
LCALL ?C?PLDIXDATA
CLR A
LCALL ?C?CSTPTR
; #endif
;
; #if OS_EVENT_TBL_SIZE > 1
; *ptbl++ = 0x00;
; SOURCE LINE # 571
MOV DPH,?C_XBP
MOV DPL,?C_XBP+01H
MOV B,#01H
LCALL ?C?PLDIXDATA
CLR A
LCALL ?C?CSTPTR
; #endif
;
; #if OS_EVENT_TBL_SIZE > 2
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 3
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 4
; *ptbl++ = 0x00;
; #endif
;
; #if OS_EVENT_TBL_SIZE > 5
; *ptbl++ = 0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -