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

📄 os_time.src

📁 uCOS-II_2.52在51上的移植程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	MOV  	A,R7
	PUSH 	ACC
	MOV  	DPTR,#milli?144
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	A,R7
	ADD  	A,#0AH
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
	CLR  	A
	RLC  	A
	MOV  	R5,A
	CLR  	A
	RLC  	A
	MOV  	R4,A
	CLR  	A
	MOV  	R3,#032H
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	CLR  	A
	MOV  	R3,#0E8H
	MOV  	R2,#03H
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?ULDIV
	POP  	ACC
	MOV  	R3,A
	POP  	ACC
	MOV  	R2,A
	POP  	ACC
	MOV  	R1,A
	POP  	ACC
	MOV  	R0,A
	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  	DPTR,#ticks?145
	LCALL	?C?LSTXDATA
;         loops = (INT16U)(ticks / 65536L);        /* Compute the integral number of 65536 tick delays   */
			; SOURCE LINE # 97
	CLR  	A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,#01H
	MOV  	R0,A
	MOV  	DPTR,#ticks?145
	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,#loops?146
	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 # 98
	MOV  	DPTR,#ticks?145
	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
	MOV  	DPTR,#ticks?145
	LCALL	?C?LSTXDATA
;         OSTimeDly((INT16U)ticks);
			; SOURCE LINE # 99
	MOV  	DPTR,#ticks?145
	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 # 100
	SETB 	C
	MOV  	DPTR,#loops?146+01H
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	MOV  	DPTR,#loops?146
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JC   	?C0011
;             OSTimeDly(32768);
			; SOURCE LINE # 101
	MOV  	R7,#00H
	MOV  	R6,#080H
	LCALL	_OSTimeDly
;             OSTimeDly(32768);
			; SOURCE LINE # 102
	MOV  	R7,#00H
	MOV  	R6,#080H
	LCALL	_OSTimeDly
;             loops--;
			; SOURCE LINE # 103
	MOV  	DPTR,#loops?146+01H
	MOVX 	A,@DPTR
	ADD  	A,#0FFH
	MOVX 	@DPTR,A
	MOV  	DPTR,#loops?146
	MOVX 	A,@DPTR
	ADDC 	A,#0FFH
	MOVX 	@DPTR,A
;         }
			; SOURCE LINE # 104
	SJMP 	?C0010
?C0011:
;         return (OS_NO_ERR);
			; SOURCE LINE # 105
	MOV  	R7,#00H
	RET  	
;     }
			; SOURCE LINE # 106
?C0004:
;     return (OS_TIME_ZERO_DLY);
			; SOURCE LINE # 107
	MOV  	R7,#054H
; }
			; SOURCE LINE # 108
?C0007:
	RET  	
; END OF _OSTimeDlyHMSM

; #endif
; /*$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
; *********************************************************************************************************
; */
; 
; #if OS_TIME_DLY_RESUME_EN > 0
; INT8U  OSTimeDlyResume (INT8U prio)

	RSEG  ?PR?_OSTimeDlyResume?OS_TIME
_OSTimeDlyResume:
	USING	0
			; SOURCE LINE # 136
;---- Variable 'prio?247' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 137
;    
;     OS_TCB    *ptcb;
; 
; 
;     if (prio >= OS_LOWEST_PRIO) {
			; SOURCE LINE # 142
	MOV  	A,R7
	CLR  	C
	SUBB 	A,#0CH
	JC   	?C0012
;         return (OS_PRIO_INVALID);
			; SOURCE LINE # 143
	MOV  	R7,#02AH
	RET  	
;     }
			; SOURCE LINE # 144
?C0012:
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 145
	CLR  	EA
;     ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist                */
			; SOURCE LINE # 146
	MOV  	A,R7
	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  	DPTR,#ptcb?248
	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 # 147
	MOV  	DPTR,#ptcb?248
	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
	JZ   	?C0014
;         if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed                   */
			; SOURCE LINE # 148
	MOV  	DPTR,#ptcb?248
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#09H
	LCALL	?C?ILDOPTR
	ORL  	A,B
	JZ   	?C0015
;             ptcb->OSTCBDly  = 0;                           /* Clear the time delay                     */
			; SOURCE LINE # 149
	MOV  	DPTR,#09H
	CLR  	A
	MOV  	B,A
	LCALL	?C?ISTOPTR
;             if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* See if task is ready to run  */
			; SOURCE LINE # 150
	MOV  	DPTR,#0BH
	LCALL	?C?CLDOPTR
	JB   	ACC.3,?C0016
;                 OSRdyGrp               |= ptcb->OSTCBBitY;             /* Make task ready to run       */
			; SOURCE LINE # 151
	MOV  	DPTR,#OSRdyGrp
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#ptcb?248
	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 # 152
	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  	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 # 153
	SETB 	EA
;                 OS_Sched();                                /* See if this is new highest priority      */
			; SOURCE LINE # 154
	LCALL	OS_Sched
;             } else {
			; SOURCE LINE # 155
	SJMP 	?C0017
?C0016:
;                 OS_EXIT_CRITICAL();                        /* Task may be suspended                    */
			; SOURCE LINE # 156
	SETB 	EA
;             }
			; SOURCE LINE # 157
?C0017:
;             return (OS_NO_ERR);
			; SOURCE LINE # 158
	MOV  	R7,#00H
	RET  	
;         } else {
			; SOURCE LINE # 159
?C0015:
;             OS_EXIT_CRITICAL();
			; SOURCE LINE # 160
	SETB 	EA
;             return (OS_TIME_NOT_DLY);                      /* Indicate that task was not delayed       */
			; SOURCE LINE # 161
	MOV  	R7,#050H
	RET  	
;         }
			; SOURCE LINE # 162
;     }
			; SOURCE LINE # 163
?C0014:
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 164
	SETB 	EA
;     return (OS_TASK_NOT_EXIST);                            /* The task does not exist                  */
			; SOURCE LINE # 165
	MOV  	R7,#0BH
; }
			; SOURCE LINE # 166
?C0013:
	RET  	
; END OF _OSTimeDlyResume

; #endif    
; /*$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
; *********************************************************************************************************
; */
; 
; #if OS_TIME_GET_SET_EN > 0
; INT32U  OSTimeGet (void)

	RSEG  ?PR?OSTimeGet?OS_TIME
OSTimeGet:
	USING	0
			; SOURCE LINE # 183
; {
			; SOURCE LINE # 184
;     
;     INT32U     ticks;
; 
; 
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 189
	CLR  	EA
;     ticks = OSTime;
			; SOURCE LINE # 190
	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
;---- Variable 'ticks?349' assigned to Register 'R4/R5/R6/R7' ----
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 191
	SETB 	EA
;     return (ticks);
			; SOURCE LINE # 192
; }
			; SOURCE LINE # 193
?C0019:
	RET  	
; END OF OSTimeGet

; #endif    
; 
; /*
; *********************************************************************************************************
; *                                            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
; *********************************************************************************************************
; */
; 
; #if OS_TIME_GET_SET_EN > 0
; void  OSTimeSet (INT32U ticks)

	RSEG  ?PR?_OSTimeSet?OS_TIME
_OSTimeSet:
	USING	0
			; SOURCE LINE # 209
;---- Variable 'ticks?450' assigned to Register 'R4/R5/R6/R7' ----
; {
			; SOURCE LINE # 210
;     
; 
; 
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 214
	CLR  	EA
;     OSTime = ticks;
			; SOURCE LINE # 215
	MOV  	DPTR,#OSTime
	LCALL	?C?LSTXDATA
;     OS_EXIT_CRITICAL();
			; SOURCE LINE # 216
	SETB 	EA
; }
			; SOURCE LINE # 217
	RET  	
; END OF _OSTimeSet

	END

⌨️ 快捷键说明

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