⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_core.src

📁 AT89C55WD上移植的ucos-ii, 非常有用, 串口观看输出与调试。
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	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 + -