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

📄 os_core.src

📁 我移植的uCos 2.52版本,在MCS51上运行,代码进行了一些优化,可以编译在小模式.
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	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 + -