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

📄 os_time.src

📁 操作系统UCOS_II在MSC51上的移植。注意查看帮助文件获得项目具体帮助文件。
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	LCALL	?C?ULDIV
	POP  	AR3
	POP  	AR2
	POP  	AR1
	POP  	AR0
	MOV  	A,R3
	ADD  	A,R7
	MOV  	R7,A
	MOV  	A,R2
	ADDC 	A,R6
	MOV  	R6,A
	MOV  	A,R1
	ADDC 	A,R5
	MOV  	R5,A
	MOV  	A,R0
	ADDC 	A,R4
	MOV  	R4,A
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	LCALL	?C?LSTXDATA
;         loops = ticks / 65536L;                  /* Compute the integral number of 65536 tick delays   */
			; SOURCE LINE # 95
	CLR  	A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,#01H
	MOV  	R0,A
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	?C?ULDIV
	MOV  	DPTR,#04H
	LCALL	?C?XBPOFF
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;         ticks = ticks % 65536L;                  /* Obtain  the fractional number of ticks             */
			; SOURCE LINE # 96
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	PUSH 	DPH
	PUSH 	DPL
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	R5,A
	MOV  	R4,A
	POP  	DPL
	POP  	DPH
	LCALL	?C?LSTXDATA
;         OSTimeDly(ticks);
			; SOURCE LINE # 97
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_?OSTimeDly
?C0010:
;         while (loops > 0) {
			; SOURCE LINE # 98
	MOV  	DPTR,#04H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#00H
	MOV  	A,R6
	SUBB 	A,#00H
	JC   	?C0011
;             OSTimeDly(32768);
			; SOURCE LINE # 99
	MOV  	R6,#080H
	MOV  	R7,#00H
	LCALL	_?OSTimeDly
;             OSTimeDly(32768);
			; SOURCE LINE # 100
	MOV  	R6,#080H
	MOV  	R7,#00H
	LCALL	_?OSTimeDly
;             loops--;
			; SOURCE LINE # 101
	MOV  	DPTR,#04H
	LCALL	?C?XBPOFF
	MOV  	A,#0FFH
	MOV  	B,A
	LCALL	?C?IILDX
;         }
			; SOURCE LINE # 102
	SJMP 	?C0010
?C0011:
;         return (OS_NO_ERR);
			; SOURCE LINE # 103
	MOV  	R7,#00H
	SJMP 	?C0007
;     } else {
			; SOURCE LINE # 104
?C0004:
;         return (OS_TIME_ZERO_DLY);
			; SOURCE LINE # 105
	MOV  	R7,#054H
;     }
			; SOURCE LINE # 106
; }
			; SOURCE LINE # 107
?C0007:
	MOV  	DPTR,#0BH
	LJMP 	?C?ADDXBP
; END OF _?OSTimeDlyHMSM

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                         RESUME A DELAYED TASK
; *
; * Description: This function is used resume a task that has been delayed through a call to either
; *              OSTimeDly() or OSTimeDlyHMSM().  Note that you MUST NOT call this function to resume a 
; *              task that is waiting for an event with timeout.  This situation would make the task look 
; *              like a timeout occurred (unless you desire this effect).  Also, you cannot resume a task 
; *              that has called OSTimeDlyHMSM() with a combined time that exceeds 65535 clock ticks.  In 
; *              other words, if the clock tick runs at 100 Hz then, you will not be able to resume a 
; *              delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher.  
; *
; *                  (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
; *
; * Arguments  : prio      specifies the priority of the task to resume
; *
; * Returns    : OS_NO_ERR                 Task has been resumed
; *              OS_PRIO_INVALID           if the priority you specify is higher that the maximum allowed 
; *                                        (i.e. >= OS_LOWEST_PRIO)
; *              OS_TIME_NOT_DLY           Task is not waiting for time to expire
; *              OS_TASK_NOT_EXIST         The desired task has not been created
; *********************************************************************************************************
; */
; 
; INT8U OSTimeDlyResume (INT8U prio) reentrant

	RSEG  ?PR?_?OSTimeDlyResume?OS_TIME
_?OSTimeDlyResume:
	USING	0
			; SOURCE LINE # 133
	MOV  	DPTR,#0FFFFH
	LCALL	?C?ADDXBP
	MOV  	A,R7
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
; {
;     OS_TCB *ptcb;
; 
; 
;     if (prio >= OS_LOWEST_PRIO) {
			; SOURCE LINE # 138
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R6,A
	CLR  	C
	SUBB 	A,#01CH
	JC   	?C0013
;         return (OS_PRIO_INVALID);
			; SOURCE LINE # 139
	MOV  	R7,#02AH
	LJMP 	?C0014
;     }
			; SOURCE LINE # 140
?C0013:
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 141
	CLR  	EA
;     ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist                */
			; SOURCE LINE # 142
	MOV  	A,R6
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	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 # 143
	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 	?C0015
;         if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed                   */
			; SOURCE LINE # 144
	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,#09H
	LCALL	?C?ILDOPTR
	ORL  	A,B
	JZ   	?C0016
;             ptcb->OSTCBDly  = 0;                           /* Clear the time delay                     */
			; SOURCE LINE # 145
	MOV  	DPTR,#09H
	CLR  	A
	MOV  	B,A
	LCALL	?C?ISTOPTR
;             if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {    /* See if task is ready to run              */
			; SOURCE LINE # 146
	MOV  	DPTR,#0BH
	LCALL	?C?CLDOPTR
	JB   	ACC.3,?C0017
;                 OSRdyGrp               |= ptcb->OSTCBBitY; /* Make task ready to run                   */
			; SOURCE LINE # 147
	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 # 148
	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 # 149
	SETB 	EA
;                 OSSched();                                 /* See if this is new highest priority      */
			; SOURCE LINE # 150
	LCALL	_?OSSched
;             } else {
			; SOURCE LINE # 151
	SJMP 	?C0018
?C0017:
;                 OS_EXIT_CRITICAL();                        /* Task may be suspended                    */
			; SOURCE LINE # 152
	SETB 	EA
;             }
			; SOURCE LINE # 153
?C0018:
;             return (OS_NO_ERR);
			; SOURCE LINE # 154
	MOV  	R7,#00H
	SJMP 	?C0014
;         } else {
			; SOURCE LINE # 155
?C0016:
;             OS_EXIT_CRITICAL();
			; SOURCE LINE # 156
	SETB 	EA
;             return (OS_TIME_NOT_DLY);                      /* Indicate that task was not delayed       */
			; SOURCE LINE # 157
	MOV  	R7,#050H
	SJMP 	?C0014
;         }
			; SOURCE LINE # 158
;     } else {
			; SOURCE LINE # 159
?C0015:
;         OS_EXIT_CRITICAL();
			; SOURCE LINE # 160
	SETB 	EA
;         return (OS_TASK_NOT_EXIST);                        /* The task does not exist                  */
			; SOURCE LINE # 161
	MOV  	R7,#0BH
;     }
			; SOURCE LINE # 162
; }
			; SOURCE LINE # 163
?C0014:
	MOV  	DPTR,#04H
	LJMP 	?C?ADDXBP
; END OF _?OSTimeDlyResume

; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                         GET CURRENT SYSTEM TIME
; *
; * Description: This function is used by your application to obtain the current value of the 32-bit 
; *              counter which keeps track of the number of clock ticks.
; *
; * Arguments  : none
; *
; * Returns    : The current value of OSTime
; *********************************************************************************************************
; */
; 
; INT32U OSTimeGet (void) reentrant

	RSEG  ?PR?_?OSTimeGet?OS_TIME
_?OSTimeGet:
	USING	0
			; SOURCE LINE # 178
	MOV  	DPTR,#0FFFCH
	LCALL	?C?ADDXBP
; {
;     INT32U ticks;
; 
; 
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 183
	CLR  	EA
;     ticks = OSTime;
			; SOURCE LINE # 184
	MOV  	DPTR,#OSTime
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	LCALL	?C?LSTXDATA
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 185
	SETB 	EA
;     return (ticks);
			; SOURCE LINE # 186
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
; }
			; SOURCE LINE # 187
?C0021:
	MOV  	DPTR,#04H
	LJMP 	?C?ADDXBP
; END OF _?OSTimeGet

; 
; /*
; *********************************************************************************************************
; *                                            SET SYSTEM CLOCK
; *
; * Description: This function sets the 32-bit counter which keeps track of the number of clock ticks.
; *
; * Arguments  : ticks      specifies the new value that OSTime needs to take.
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; void OSTimeSet (INT32U ticks) reentrant

	RSEG  ?PR?_?OSTimeSet?OS_TIME
_?OSTimeSet:
	USING	0
			; SOURCE LINE # 201
	MOV  	DPTR,#0FFFCH
	LCALL	?C?ADDXBP
	LCALL	?C?LSTXDATA
; {
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 203
	CLR  	EA
;     OSTime = ticks;
			; SOURCE LINE # 204
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#OSTime
	LCALL	?C?LSTXDATA
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 205
	SETB 	EA
; }
			; SOURCE LINE # 206
	MOV  	DPTR,#04H
	LJMP 	?C?ADDXBP
; END OF _?OSTimeSet

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -