📄 os_core.src
字号:
ADD A,#07H
MOV R0,A
MOV @R0,AR6
; if ((pevent->OSEventTbl[y] &= ~bitx) == 0x00) { /* Remove this task from the waiting list */
; SOURCE LINE # 475
MOV A,?C_IBP
ADD A,#05H
MOV R0,A
MOV A,@R0
MOV R6,A
CPL A
ANL A,R7
LCALL ?C?CSTPTR
JNZ ?C0022
; pevent->OSEventGrp &= ~bity; /* Clr group bit if this was only task pending */
; SOURCE LINE # 476
MOV A,?C_IBP
ADD A,#08H
MOV R0,A
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV A,?C_IBP
ADD A,#06H
MOV R0,A
MOV A,@R0
CPL A
ANL A,R7
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 477
?C0022:
; ptcb = OSTCBPrioTbl[prio]; /* Point to this task's OS_TCB */
; SOURCE LINE # 478
MOV A,?C_IBP
ADD A,#07H
MOV R0,A
MOV A,@R0
MOV R7,A
ADD A,#LOW (OSTCBPrioTbl)
MOV R0,A
MOV A,@R0
MOV R1,A
MOV R0,?C_IBP
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,AR1
; ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task */
; SOURCE LINE # 479
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R1,A
MOV DPTR,#06H
CLR A
MOV B,A
LCALL ?C?ISTOPTR
; ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Unlink ECB from this task */
; SOURCE LINE # 480
MOV DPTR,#04H
CLR A
MOV B,A
LCALL ?C?ISTOPTR
; #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 # 484
MOV A,?C_IBP
ADD A,#0BH
MOV R0,A
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R1,A
MOV A,?C_IBP
ADD A,#0BH
MOV R0,A
MOV @R0,AR3
INC R0
MOV @R0,AR2
INC R0
MOV @R0,AR1
; #endif
; ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */
; SOURCE LINE # 486
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#08H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R5,A
MOV A,?C_IBP
ADD A,#0EH
MOV R0,A
MOV A,@R0
CPL A
ANL A,R5
LCALL ?C?CSTPTR
; if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is ready (could be susp'd) */
; SOURCE LINE # 487
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R1,A
MOV DPTR,#08H
LCALL ?C?CLDOPTR
JNZ ?C0023
; OSRdyGrp |= bity; /* Put task in the ready to run list */
; SOURCE LINE # 488
MOV A,?C_IBP
ADD A,#06H
MOV R0,A
MOV A,@R0
ORL OSRdyGrp,A
; OSRdyTbl[y] |= bitx;
; SOURCE LINE # 489
MOV A,?C_IBP
ADD A,#04H
MOV R0,A
MOV A,@R0
ADD A,#LOW (OSRdyTbl)
MOV R0,A
PUSH AR0
MOV A,@R0
ORL A,R6
POP AR0
MOV @R0,A
; }
; SOURCE LINE # 490
?C0023:
; return (prio);
; SOURCE LINE # 491
; }
; SOURCE LINE # 492
?C0024:
MOV A,?C_IBP
ADD A,#0FH
MOV ?C_IBP,A
RET
; 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) KCREENTRANT
RSEG ?PR?_?OS_EventTaskWait?OS_CORE
_?OS_EventTaskWait:
USING 0
; SOURCE LINE # 510
DEC ?C_IBP
DEC ?C_IBP
DEC ?C_IBP
MOV R0,?C_IBP
MOV @R0,AR3
INC R0
MOV @R0,AR2
INC R0
MOV @R0,AR1
; {
; OSTCBCur->OSTCBEventPtr = pevent; /* Store pointer to event control block in TCB */
; SOURCE LINE # 512
MOV R0,?C_IBP
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R6,AR2
MOV R7,A
MOV A,OSTCBCur
ADD A,#04H
MOV R0,A
MOV @R0,AR6
INC R0
MOV @R0,AR7
; if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) { /* Task no longer ready */
; SOURCE LINE # 513
MOV A,OSTCBCur
ADD A,#0BH
MOV R0,A
MOV A,@R0
ADD A,#LOW (OSRdyTbl)
MOV R0,A
PUSH AR0
MOV A,@R0
MOV R7,A
MOV A,OSTCBCur
ADD A,#0CH
MOV R0,A
MOV A,@R0
CPL A
ANL A,R7
POP AR0
MOV @R0,A
JNZ ?C0025
; OSRdyGrp &= ~OSTCBCur->OSTCBBitY; /* Clear event grp bit if this was only task pending */
; SOURCE LINE # 514
MOV A,OSTCBCur
ADD A,#0DH
MOV R0,A
MOV A,@R0
CPL A
ANL OSRdyGrp,A
; }
; SOURCE LINE # 515
?C0025:
; pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
; SOURCE LINE # 516
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#06H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV A,OSTCBCur
ADD A,#0BH
MOV R0,A
MOV A,@R0
MOV R6,#00H
ADD A,R1
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV A,OSTCBCur
ADD A,#0CH
MOV R0,A
MOV A,R7
ORL A,@R0
LCALL ?C?CSTPTR
; pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
; SOURCE LINE # 517
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV A,OSTCBCur
ADD A,#0DH
MOV R0,A
MOV A,R7
ORL A,@R0
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 518
INC ?C_IBP
INC ?C_IBP
INC ?C_IBP
RET
; 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) KCREENTRANT
RSEG ?PR?_?OS_EventTO?OS_CORE
_?OS_EventTO:
USING 0
; SOURCE LINE # 536
DEC ?C_IBP
DEC ?C_IBP
DEC ?C_IBP
MOV R0,?C_IBP
MOV @R0,AR3
INC R0
MOV @R0,AR2
INC R0
MOV @R0,AR1
; {
; if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0x00) {
; SOURCE LINE # 538
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#06H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV A,OSTCBCur
ADD A,#0BH
MOV R0,A
MOV A,@R0
MOV R6,#00H
ADD A,R1
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV A,OSTCBCur
ADD A,#0CH
MOV R0,A
MOV A,@R0
CPL A
ANL A,R7
LCALL ?C?CSTPTR
JNZ ?C0027
; pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
; SOURCE LINE # 539
MOV R0,?C_IBP
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
LCALL ?C?CLDPTR
MOV R7,A
MOV A,OSTCBCur
ADD A,#0DH
MOV R0,A
MOV A,@R0
CPL A
ANL A,R7
LCALL ?C?CSTPTR
; }
; SOURCE LINE # 540
?C0027:
; OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
; SOURCE LINE # 541
MOV A,OSTCBCur
ADD A,#08H
MOV R0,A
CLR A
MOV @R0,A
; OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
; SOURCE LINE # 542
MOV A,OSTCBCur
ADD A,#04H
MOV R0,A
CLR A
MOV @R0,A
INC R0
MOV @R0,A
; }
; SOURCE LINE # 543
INC ?C_IBP
INC ?C_IBP
INC ?C_IBP
RET
; 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) KCREENTRANT
RSEG ?PR?_?OS_EventWaitListInit?OS_CORE
_?OS_EventWaitListInit:
USING 0
; SOURCE LINE # 560
DEC ?C_IBP
DEC ?C_IBP
DEC ?C_IBP
MOV R0,?C_IBP
MOV @R0,AR3
INC R0
MOV @R0,AR2
INC R0
MOV @R0,AR1
DEC ?C_IBP
DEC ?C_IBP
DEC ?C_IBP
; {
; INT8U *ptbl;
;
;
; pevent->OSEventGrp = 0x00; /* No task waiting on event */
; SOURCE LINE # 565
MOV A,?C_IBP
ADD A,#03H
MOV R0,A
MOV AR3,@R0
INC R0
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
MOV R1,A
MOV DPTR,#01H
CLR A
LCALL ?C?CSTOPTR
; ptbl = &pevent->OSEventTbl[0];
; SOURCE LINE # 566
MOV A,R1
ADD A,#06H
MOV R1,A
CLR A
ADDC A,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -