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

📄 os_task.src

📁 在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释
💻 SRC
📖 第 1 页 / 共 4 页
字号:
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	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   	$ + 5H
	LJMP 	?C0004
;         OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
			; SOURCE LINE # 184
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,#01H
	MOV  	DPTR,#0DH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;                                              /* ... the same thing until task is created.              */
;         OS_EXIT_CRITICAL();
			; SOURCE LINE # 186
	SETB 	EA
;         psp = (void *)OSTaskStkInit(task, ppdata, ptos, 0); /* Initialize the task's stack              */
			; SOURCE LINE # 187
	MOV  	DPTR,#0FFFEH
	LCALL	?C?ADDXBP
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	_?OSTaskStkInit
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;         err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);         
			; SOURCE LINE # 188
	MOV  	DPTR,#0FFFEH
	LCALL	?C?ADDXBP
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFEH
	LCALL	?C?ADDXBP
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFEH
	LCALL	?C?ADDXBP
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#019H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_?OSTCBInit
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOV  	A,R7
	MOVX 	@DPTR,A
;         if (err == OS_NO_ERR) {
			; SOURCE LINE # 189
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	JNZ  	?C0005
;             OS_ENTER_CRITICAL();
			; SOURCE LINE # 190
	CLR  	EA
;             OSTaskCtr++;                                   /* Increment the #tasks counter             */
			; SOURCE LINE # 191
	MOV  	DPTR,#OSTaskCtr
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
;             OSTaskCreateHook(OSTCBPrioTbl[prio]);          /* Call user defined hook                   */
			; SOURCE LINE # 192
	MOV  	DPTR,#0DH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	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  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	_?OSTaskCreateHook
;             OS_EXIT_CRITICAL();
			; SOURCE LINE # 193
	SETB 	EA
;             if (OSRunning) {                 /* Find highest priority task if multitasking has started */
			; SOURCE LINE # 194
	MOV  	R0,#LOW (OSRunning)
	MOV  	A,@R0
	JZ   	?C0007
;                 OSSched();
			; SOURCE LINE # 195
	LCALL	_?OSSched
;             }
			; SOURCE LINE # 196
;         } else {
			; SOURCE LINE # 197
	SJMP 	?C0007
?C0005:
;             OS_ENTER_CRITICAL();
			; SOURCE LINE # 198
	CLR  	EA
;             OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
			; SOURCE LINE # 199
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	MOV  	DPTR,#0DH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (OSTCBPrioTbl)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (OSTCBPrioTbl)
	MOV  	DPH,A
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;             OS_EXIT_CRITICAL();
			; SOURCE LINE # 200
	SETB 	EA
;         }
			; SOURCE LINE # 201
?C0007:
;         return (err);
			; SOURCE LINE # 202
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R7,A
	SJMP 	?C0003
;     } else {
			; SOURCE LINE # 203
?C0004:
;         OS_EXIT_CRITICAL();
			; SOURCE LINE # 204
	SETB 	EA
;         return (OS_PRIO_EXIST);
			; SOURCE LINE # 205
	MOV  	R7,#028H
;     }
			; SOURCE LINE # 206
; }
			; SOURCE LINE # 207
?C0003:
	MOV  	DPTR,#0EH
	LJMP 	?C?ADDXBP
; END OF _?OSTaskCreate

; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                     CREATE A TASK (Extended Version)
; *
; * Description: This function is used to have uC/OS-II manage the execution of a task.  Tasks can either
; *              be created prior to the start of multitasking or by a running task.  A task cannot be
; *              created by an ISR.  This function is similar to OSTaskCreate() except that it allows
; *              additional information about a task to be specified.
; *
; * Arguments  : task     is a pointer to the task's code
; *
; *              pdata    is a pointer to an optional data area which can be used to pass parameters to
; *                       the task when the task first executes.  Where the task is concerned it thinks
; *                       it was invoked and passed the argument 'pdata' as follows:
; *
; *                           void Task (void *pdata)
; *                           {
; *                               for (;;) {
; *                                   Task code;
; *                               }
; *                           }
; *
; *              ptos     is a pointer to the task's top of stack.  If the configuration constant 
; *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
; *                       memory to low memory).  'pstk' will thus point to the highest (valid) memory 
; *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will point to the 
; *                       lowest memory location of the stack and the stack will grow with increasing

⌨️ 快捷键说明

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