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

📄 os_core.src

📁 在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFFH
	LCALL	?C?ADDXBP
	MOV  	A,R7
	MOVX 	@DPTR,A
	MOV  	DPTR,#0FFFDH
	LCALL	?C?ADDXBP
; {
;     OS_TCB *ptcb;
; 
; 
;     OS_ENTER_CRITICAL();
			; SOURCE LINE # 707
	CLR  	EA
;     ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
			; SOURCE LINE # 708
	MOV  	DPTR,#OSTCBFreeList
	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 # 709
	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 	?C0034
;         OSTCBFreeList        = ptcb->OSTCBNext;            /* Update pointer to free TCB list          */
			; SOURCE LINE # 710
	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,#03H
	LCALL	?C?PLDOPTR
	MOV  	DPTR,#OSTCBFreeList
	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 # 711
	SETB 	EA
;         ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
			; SOURCE LINE # 712
	MOV  	DPTR,#04H
	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
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	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
	LCALL	?C?PSTPTR
;         ptcb->OSTCBPrio      = (INT8U)prio;                /* Load task priority into TCB              */
			; SOURCE LINE # 713
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	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,#0CH
	MOV  	A,R7
	LCALL	?C?CSTOPTR
;         ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
			; SOURCE LINE # 714
	MOV  	DPTR,#0BH
	CLR  	A
	LCALL	?C?CSTOPTR
;         ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
			; SOURCE LINE # 715
	MOV  	DPTR,#09H
	CLR  	A
	MOV  	B,A
	LCALL	?C?ISTOPTR
; 
; #if OS_TASK_CREATE_EXT_EN        
;         ptcb->OSTCBExtPtr    = pext;                       /* Store pointer to TCB extension           */
;         ptcb->OSTCBStkSize   = stk_size;                   /* Store stack size                         */
;         ptcb->OSTCBStkBottom = pbos;                       /* Store pointer to bottom of stack         */
;         ptcb->OSTCBOpt       = opt;                        /* Store task options                       */
;         ptcb->OSTCBId        = id;                         /* Store task ID                            */
; #else
;         pext                 = pext;                       /* Prevent compiler warning if not used     */
			; SOURCE LINE # 724
	MOV  	DPTR,#0EH
	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,#0EH
	LCALL	?C?XBPOFF
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;         stk_size             = stk_size;
			; SOURCE LINE # 725
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	DPTR,#0CH
	LCALL	?C?XBPOFF
	MOV  	A,R4
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R5
	MOVX 	@DPTR,A
;         pbos                 = pbos;
			; SOURCE LINE # 726
	MOV  	DPTR,#07H
	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,#07H
	LCALL	?C?XBPOFF
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;         opt                  = opt;
			; SOURCE LINE # 727
	MOV  	DPTR,#011H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	DPTR,#011H
	LCALL	?C?XBPOFF
	MOV  	A,R4
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R5
	MOVX 	@DPTR,A
;         id                   = id;
			; SOURCE LINE # 728
	MOV  	DPTR,#0AH
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	DPTR,#0AH
	LCALL	?C?XBPOFF
	MOV  	A,R4
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R5
	MOVX 	@DPTR,A
; #endif
; 
; #if OS_TASK_DEL_EN        
;         ptcb->OSTCBDelReq    = OS_NO_ERR;
; #endif
; 
;         ptcb->OSTCBY         = prio >> 3;                  /* Pre-compute X, Y, BitX and BitY          */
			; SOURCE LINE # 735
	MOV  	A,R7
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	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,#0EH
	MOV  	A,R7
	LCALL	?C?CSTOPTR
;         ptcb->OSTCBBitY      = OSMapTbl[ptcb->OSTCBY];
			; SOURCE LINE # 736
	MOV  	DPTR,#0EH
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#OSMapTbl
	MOVC 	A,@A+DPTR
	MOV  	DPTR,#010H
	LCALL	?C?CSTOPTR
;         ptcb->OSTCBX         = prio & 0x07;
			; SOURCE LINE # 737
	MOV  	DPTR,#03H
	LCALL	?C?XBPOFF
	MOVX 	A,@DPTR
	MOV  	R7,A
	ANL  	A,#07H
	MOV  	DPTR,#0DH
	LCALL	?C?CSTOPTR
;         ptcb->OSTCBBitX      = OSMapTbl[ptcb->OSTCBX];
			; SOURCE LINE # 738
	MOV  	DPTR,#0DH
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#OSMapTbl
	MOVC 	A,@A+DPTR
	MOV  	DPTR,#0FH
	LCALL	?C?CSTOPTR
; 
; #if     OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_SEM_EN
;         ptcb->OSTCBEventPtr  = (OS_EVENT *)0;              /* Task is not pending on an event          */
; #endif
; 
; #if     OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2))
;         ptcb->OSTCBMsg       = (void *)0;                  /* No message received                      */
; #endif
; 
;         OS_ENTER_CRITICAL();
			; SOURCE LINE # 748
	CLR  	EA
;         OSTCBPrioTbl[prio]   = ptcb;
			; SOURCE LINE # 749
	MOV  	A,R7
	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
;         ptcb->OSTCBNext      = OSTCBList;                  /* Link into TCB chain                      */
			; SOURCE LINE # 750
	MOV  	DPTR,#OSTCBList
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	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,#03H
	LCALL	?C?PSTOPTR
;         ptcb->OSTCBPrev      = (OS_TCB *)0;
			; SOURCE LINE # 751
	MOV  	R3,#00H
	MOV  	R2,#00H
	MOV  	R1,#00H
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	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,#06H
	LCALL	?C?PSTOPTR
;         if (OSTCBList != (OS_TCB *)0) {
			; SOURCE LINE # 752
	MOV  	DPTR,#OSTCBList
	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   	?C0035
;             OSTCBList->OSTCBPrev = ptcb;
			; SOURCE LINE # 753
	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
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#OSTCBList
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#06H
	LCALL	?C?PSTOPTR
;         }
			; SOURCE LINE # 754
?C0035:
;         OSTCBList               = ptcb;
			; SOURCE LINE # 755
	MOV  	DPH,?C_XBP
	MOV  	DPL,?C_XBP+01H
	MOVX 	A,@DPTR
	MOV  	R1,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSTCBList
	XCH  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;         OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
			; SOURCE LINE # 756
	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 # 757
	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 # 758
	SETB 	EA
;         return (OS_NO_ERR);
			; SOURCE LINE # 759
	MOV  	R7,#00H
	SJMP 	?C0036
;     } else {
			; SOURCE LINE # 760
?C0034:
;         OS_EXI

⌨️ 快捷键说明

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