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

📄 os_cpu_c.src

📁 我移植的uCos 2.86 版本,可以在单片51上运行,在AT89C51ED2上测试过.
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.SRC generated from: ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.C
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE ..\uCOS-II\Ports\MCS51\Keil\OS_CPU_C.C OMF2 ROM(COMPACT) BROWSE MODP2 DEBUG SYMBOLS PRINT(.\OS_CPU_C.lst) PREPRINT(.\OS_CPU_C.i) OBJECT(.\OS_CPU_C.obj)

$NOMOD51

NAME	OS_CPU_C

CCF2	BIT	0D8H.2
CCF3	BIT	0D8H.3
P0	DATA	080H
CCF4	BIT	0D8H.4
SADDR_1	DATA	0AAH
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
AC	BIT	0D0H.6
T0	BIT	0B0H.4
T1	BIT	0B0H.5
EA	BIT	0A8H.7
T2	BIT	090H.0
EC	BIT	0A8H.6
CF	BIT	0D8H.7
CH	DATA	0F9H
FE	BIT	098H.7
IE	DATA	0A8H
CL	DATA	0E9H
P0_0	BIT	080H.0
CCAP0H	DATA	0FAH
CEX0	BIT	090H.3
P1_0	BIT	090H.0
P0_1	BIT	080H.1
CCAP1H	DATA	0FBH
IPH0	DATA	0B7H
P2_0	BIT	0A0H.0
CEX1	BIT	090H.4
P1_1	BIT	090H.1
P0_2	BIT	080H.2
CCAP2H	DATA	0FCH
P3_0	BIT	0B0H.0
P2_1	BIT	0A0H.1
CEX2	BIT	090H.5
P1_2	BIT	090H.2
P0_3	BIT	080H.3
CCAP3H	DATA	0FDH
P3_1	BIT	0B0H.1
P2_2	BIT	0A0H.2
CEX3	BIT	090H.6
P1_3	BIT	090H.3
P0_4	BIT	080H.4
CCAP4H	DATA	0FEH
CCAP0L	DATA	0EAH
CR	BIT	0D8H.6
P3_2	BIT	0B0H.2
P2_3	BIT	0A0H.3
CEX4	BIT	090H.7
P1_4	BIT	090H.4
P0_5	BIT	080H.5
CCAP1L	DATA	0EBH
CCAPM0	DATA	0DAH
EXF2	BIT	0C8H.6
IPL0	DATA	0B8H
RD	BIT	0B0H.7
P3_3	BIT	0B0H.3
P2_4	BIT	0A0H.4
P1_5	BIT	090H.5
P0_6	BIT	080H.6
CCAP2L	DATA	0ECH
CCAPM1	DATA	0DBH
P3_4	BIT	0B0H.4
P2_5	BIT	0A0H.5
P1_6	BIT	090H.6
P0_7	BIT	080H.7
CCAP3L	DATA	0EDH
CCAPM2	DATA	0DCH
P3_5	BIT	0B0H.5
ES	BIT	0A8H.4
P2_6	BIT	0A0H.6
P1_7	BIT	090H.7
CCAP4L	DATA	0EEH
CCAPM3	DATA	0DDH
UD	BIT	0D0H.1
P3_6	BIT	0B0H.6
P2_7	BIT	0A0H.7
CCAPM4	DATA	0DEH
P3_7	BIT	0B0H.7
RI	BIT	098H.0
CY	BIT	0D0H.7
INT0	BIT	0B0H.2
INT1	BIT	0B0H.3
TI	BIT	098H.1
IE0_	BIT	088H.1
IE1_	BIT	088H.3
RCAP2H	DATA	0CBH
PS	BIT	0B8H.4
SP	DATA	081H
CMOD	DATA	0D9H
CCON	DATA	0D8H
T2EX	BIT	090H.1
OV	BIT	0D0H.2
RCAP2L	DATA	0CAH
FCON	DATA	0D1H
WR	BIT	0B0H.6
ICON	DATA	0FFH
RCLK	BIT	0C8H.5
TCLK	BIT	0C8H.4
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
BDRCON	DATA	09BH
IE0	DATA	0A8H
B	DATA	0F0H
AUXR	DATA	08EH
SBUF_1	DATA	0C1H
SCON_1	DATA	0C0H
OSCCON	DATA	086H
ACC	DATA	0E0H
CT2	BIT	0C8H.1
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
BDRCON_1	DATA	09CH
ET2	BIT	0A8H.5
TF1	BIT	088H.7
TF2	BIT	0C8H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
TH1	DATA	08DH
IT0	BIT	088H.0
TH2	DATA	0CDH
EX1	BIT	0A8H.2
TB8	BIT	098H.3
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
ECI	BIT	090H.2
TL1	DATA	08BH
TL2	DATA	0CCH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
RS0	BIT	0D0H.3
PT1	BIT	0B8H.3
RS1	BIT	0D0H.4
PT2	BIT	0B8H.5
TR0	BIT	088H.4
TR1	BIT	088H.6
TR2	BIT	0C8H.2
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
WDTPRG	DATA	0A7H
DPH	DATA	083H
BRL	DATA	09AH
DPL	DATA	082H
IPH	DATA	0B7H
EXEN2	BIT	0C8H.3
PPC	BIT	0B8H.6
CPRL2	BIT	0C8H.0
IPL	DATA	0B8H
REN	BIT	098H.4
T2MOD	DATA	0C9H
T2CON	DATA	0C8H
WDTRST	DATA	0A6H
EECON	DATA	0D2H
SADEN	DATA	0B9H
RXD	BIT	0B0H.0
SADDR	DATA	0A9H
CKCON	DATA	08FH
TXD	BIT	0B0H.1
AUXR1	DATA	0A2H
CKSEL	DATA	085H
EETIM	DATA	0D3H
F0	BIT	0D0H.5
PSW	DATA	0D0H
CCF0	BIT	0D8H.0
CCF1	BIT	0D8H.1
SADEN_1	DATA	0BAH
?PR?_OSTaskStkInit?OS_CPU_C              SEGMENT CODE INBLOCK 
?DT?_OSTaskStkInit?OS_CPU_C              SEGMENT DATA OVERLAYABLE
?PR?OSStartHighRdy?OS_CPU_C              SEGMENT CODE INBLOCK 
?PR?C_OSCtxSw?OS_CPU_C                   SEGMENT CODE INBLOCK 
?PR?OSIntCtxSw?OS_CPU_C                  SEGMENT CODE INBLOCK 
?PR?OSTickISR?OS_CPU_C                   SEGMENT CODE INBLOCK 
?PR?SerialIntr?OS_CPU_C                  SEGMENT CODE INBLOCK 
?PR?OSInitHookBegin?OS_CPU_C             SEGMENT CODE INBLOCK 
?PR?OSInitHookEnd?OS_CPU_C               SEGMENT CODE INBLOCK 
?PR?_OSTaskCreateHook?OS_CPU_C           SEGMENT CODE INBLOCK 
?PR?OSTaskSwHook?OS_CPU_C                SEGMENT CODE INBLOCK 
?PR?OSTaskStatHook?OS_CPU_C              SEGMENT CODE INBLOCK 
?PR?_OSTCBInitHook?OS_CPU_C              SEGMENT CODE INBLOCK 
?PR?OSTimeTickHook?OS_CPU_C              SEGMENT CODE INBLOCK 
?PR?OSTaskIdleHook?OS_CPU_C              SEGMENT CODE INBLOCK 
?DT?OS_CPU_C         SEGMENT DATA 
	EXTRN	DATA (OSRunning)
	EXTRN	DATA (C_XBP)
	EXTRN	IDATA (OSTCBCur)
	EXTRN	DATA (OSIntNesting)
	EXTRN	IDATA (OSTCBHighRdy)
	EXTRN	CODE (LoadCtx)
	EXTRN	CODE (OSTimeTick)
	EXTRN	IDATA (STACK_START)
	EXTRN	DATA (OSPrioCur)
	EXTRN	CODE (OSIntExit)
	EXTRN	DATA (OSPrioHighRdy)
	EXTRN	CODE (?C?CSTPTR)
	PUBLIC	SaveSP
	PUBLIC	SaveC_IBP
	PUBLIC	OSTaskIdleHook
	PUBLIC	OSTimeTickHook
	PUBLIC	_OSTCBInitHook
	PUBLIC	OSTaskStatHook
	PUBLIC	OSTaskSwHook
	PUBLIC	_OSTaskCreateHook
	PUBLIC	OSInitHookEnd
	PUBLIC	OSInitHookBegin
	PUBLIC	SerialIntr
	PUBLIC	OSTickISR
	PUBLIC	OSIntCtxSw
	PUBLIC	C_OSCtxSw
	PUBLIC	OSStartHighRdy
	PUBLIC	?_OSTaskStkInit?BYTE
	PUBLIC	_OSTaskStkInit

	RSEG  ?DT?_OSTaskStkInit?OS_CPU_C
?_OSTaskStkInit?BYTE:
       task?040:   DS   3
	ORG  3
       pdat?041:   DS   3
	ORG  6
       ptos?042:   DS   2
	ORG  8
        opt?043:   DS   2
	ORG  10
        stk?044:   DS   3

	RSEG  ?DT?OS_CPU_C
      SaveC_IBP:   DS   3
         SaveSP:   DS   1
; #pragma SRC
; /*
; *********************************************************************************************************
; *                                               uC/OS-II
; *                                         The Real-Time Kernel
; *
; *                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
; *                                          All Rights Reserved
; *
; *
; *                                       80x86/80x88 Specific code
; *                                          LARGE MEMORY MODEL
; *
; * File : OS_CPU_C.C
; * By   : Jean J. Labrosse
; *
; * Ported date:     Dec 2, 2003
; * By:              Stuart Wright (swright@jiskoot.com)
; * Target platform: Keil C51 V7.07 and above
; *         
; * Based on port for 8051 by John X. Liu, China, (johnxliu@163.com)
; ********************************************************************************************************
; */
; 
; #define  OS_CPU_GLOBALS	  
; #include "includes.h"
; //#include "os_kcdef.h"
; /*
; *********************************************************************************************************
; *                                        INITIALIZE A TASK'S STACK
; *
; * Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to initialize the
; *              stack frame of the task being created.  This function is highly processor specific.
; *
; * Arguments  : task          is a pointer to the task code
; *
; *              pdata  (vd)   is a pointer to a user supplied data area that will be passed to the task
; *                            when the task first executes. 
; *
; *              ptos          is a pointer to the top of stack.  It is assumed that 'ptos' points to
; *                            a 'free' entry on the task stack.  If OS_STK_GROWTH is set to 1 then 
; *                            'ptos' will contain the HIGHEST valid address of the stack.  Similarly, if
; *                            OS_STK_GROWTH is set to 0, the 'ptos' will contains the LOWEST valid address
; *                            of the stack.
; *
; *              opt           specifies options that can be used to alter the behavior of OSTaskStkInit().
; *                            (see uCOS_II.H for OS_TASK_OPT_???).
; *
; * Returns    : Always returns the location of the new top-of-stack' once the processor registers have
; *              been placed on the stack in the proper order.
; *
; * Note(s)    : Interrupts are enabled when your task starts executing. You can change this by setting the
; *              PSW to 0x0002 instead.  In this case, interrupts would be disabled upon task startup.  The
; *              application code would be responsible for enabling interrupts at the beginning of the task
; *              code.  You will need to modify OSTaskIdle() and OSTaskStat() so that they enable 
; *              interrupts.  Failure to do this will make your system crash!
; *********************************************************************************************************
; */
; 
; /* The stack variable points to the start pointer in hardware stack and is defined in OS_CPU_A */
; #if OS_STK_GROWTH==0
; #define PUSH(A)  *(++stk) = ((INT8U)(A))
; #else 
; #define PUSH(A)  *(--stk) = ((INT8U)(A))
; #endif
; extern idata unsigned char STACK_START[1];
; 
; extern OS_STK * data C_XBP;
; //extern INT8U idata * data C_IBP;
; //extern idata unsigned char STACK_TOP[1];
; 
; OS_STK  *OSTaskStkInit (void (*task)(void *pd) KCREENTRANT, void * pdat, OS_STK *ptos, INT16U opt) KCREENTRANT

	RSEG  ?PR?_OSTaskStkInit?OS_CPU_C
_OSTaskStkInit:
	USING	0
			; SOURCE LINE # 72
	MOV  	task?040,R3
	MOV  	task?040+01H,R2
	MOV  	task?040+02H,R1
; {
			; SOURCE LINE # 73
;     INT8U  * stk;
; 	
; 	opt+=0;									//opt没被用到
			; SOURCE LINE # 76
;     //opt    = opt;                           /* 'opt' is not used, prevent warning                      */
;  	pdat	+=0;
			; SOURCE LINE # 78
; 	//pdat   = pdat;
;     stk    = (INT8U *) ptos;                //用户堆栈 /* Load stack pointer 
			; SOURCE LINE # 80
	MOV  	stk?044,#01H
	MOV  	stk?044+01H,ptos?042
	MOV  	stk?044+02H,ptos?042+01H
; 	                                     
; 	//*(void _XDATA **)stk	 = pdat;                  /*                               */
; 	//stk				+= sizeof(void _XDATA *);		/* Save the vd to external stack */
; 	PUSH(task);								/* The value should be loaded to PC    */
			; SOURCE LINE # 84
	MOV  	R7,AR1
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0019
	DEC  	stk?044+01H
?C0019:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,R7
	LCALL	?C?CSTPTR
; 	PUSH((INT16U)task>>8);       					/* next time when this task is running */
			; SOURCE LINE # 85
	MOV  	A,task?040+01H
	MOV  	R7,A
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0020
	DEC  	stk?044+01H
?C0020:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,R7
	LCALL	?C?CSTPTR
; 	
; 	//PUSH((INT8U )(((INT32U) task>>16)+0x7F));      /* Third byte of PC for dallas 390 */
; 
; /* Following is the registers pushed into hardware stack */
; 	PUSH('A');                 /* ACC */
			; SOURCE LINE # 90
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0021
	DEC  	stk?044+01H
?C0021:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,#041H
	LCALL	?C?CSTPTR
; 	PUSH('B');                 /* B   */
			; SOURCE LINE # 91
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0022
	DEC  	stk?044+01H
?C0022:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,#042H
	LCALL	?C?CSTPTR
; 	//*++stk			 = 'X';                 /* DPX */
; 	PUSH('H');                 /* DPH */
			; SOURCE LINE # 93
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0023
	DEC  	stk?044+01H
?C0023:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,#048H
	LCALL	?C?CSTPTR
; 	PUSH('L');                 /* DPL */
			; SOURCE LINE # 94
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0024
	DEC  	stk?044+01H
?C0024:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,#04CH
	LCALL	?C?CSTPTR
; //	*++stk			 = 'X';                 /* DPX1 for second DPTR */
; //	*++stk			 = 'H';                 /* DPH1 for second DPTR */
; //	*++stk			 = 'L';                 /* DPL1 for second DPTR */
; //	*++stk			 = DPS;                 /* DPS for second DPTR */
; 	PUSH(PSW);					/* PSW */
			; SOURCE LINE # 99
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0025
	DEC  	stk?044+01H
?C0025:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	MOV  	A,PSW
	LCALL	?C?CSTPTR
; 
; 	PUSH(0);                   /* R0  */
			; SOURCE LINE # 101
	MOV  	R3,stk?044
	MOV  	A,stk?044+02H
	DEC  	stk?044+02H
	JNZ  	?C0026
	DEC  	stk?044+01H
?C0026:
	DEC  	A
	MOV  	R1,A
	MOV  	R2,stk?044+01H
	CLR  	A
	LCALL	?C?CSTPTR
; 

⌨️ 快捷键说明

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