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

📄 os_cpu_a.src

📁 移植UCOS2.00版内核到8051
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\OS_CPU_A.SRC generated from: OS_CPU_A.C
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE OS_CPU_A.C LARGE BROWSE DEBUG OBJECTEXTEND SRC(.\OS_CPU_A.SRC)

$NOMOD51

NAME	OS_CPU_A

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
EA	BIT	0A8H.7
IE	DATA	0A8H
RD	BIT	0B0H.7
ES	BIT	0A8H.4
IP	DATA	0B8H
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
PS	BIT	0B8H.4
SP	DATA	081H
OV	BIT	0D0H.2
WR	BIT	0B0H.6
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
REN	BIT	098H.4
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?OSCtxSw?OS_CPU_A SEGMENT CODE 
?PR?OSTickISR?OS_CPU_A                   SEGMENT CODE 
?PR?OSIntCtxSw?OS_CPU_A                  SEGMENT CODE 
?PR?OSStartHighRdy?OS_CPU_A              SEGMENT CODE 
?PR?_?SerialISR?OS_CPU_A                 SEGMENT CODE 
?XD?OS_CPU_A         SEGMENT XDATA 
	EXTRN	XDATA (OSRunning)
	EXTRN	CODE (_?OSIntExit)
	EXTRN	CODE (_?serial)
	EXTRN	XDATA (OSTCBCur)
	EXTRN	XDATA (OSTCBHighRdy)
	EXTRN	CODE (_?OSTaskSwHook)
	EXTRN	CODE (_?OSTimeTick)
	EXTRN	XDATA (OSPrioCur)
	EXTRN	CODE (_?OSIntEnter)
	EXTRN	XDATA (OSPrioHighRdy)
	EXTRN	DATA (UserSysSP_Start)
	EXTRN	CODE (?C?PLDPTR)
	EXTRN	CODE (?C?CSTPTR)
	EXTRN	CODE (?C?CLDPTR)
	PUBLIC	UserStkSP_tmp
	PUBLIC	_?SerialISR
	PUBLIC	OSStartHighRdy
	PUBLIC	OSIntCtxSw
	PUBLIC	OSTickISR
	PUBLIC	OSCtxSw

	RSEG  ?XD?OS_CPU_A
  UserStkSP_tmp:   DS   3
; /*
; *********************************************************************************************************
; *                                               uC/OS-II
; *                                               实时内核
; *
; *                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
; *                                               版权所有
; *
; *                                            MCU-51 专用代码
; *                                           KEIL C51大模式编译
; *
; * 文件名 : OS_CPU_A.C
; * 作者   : Jean J. Labrosse
; * 改编   : 柯新 kexin28@126.com 深圳众芯科技有限公司软件部 2007.10.22
; *********************************************************************************************************
; */
; 
; //#define  OS_CPU_GLOBALS
; #include "includes.h"
; 
; OS_STK  *UserStkSP_tmp;
; 
; #if CXBP_OK>0
; #pragma asm
          EXTRN DATA  (?C_XBP)     ;仿真堆栈指针用于重入局部变量保存    
; #pragma endasm
; #endif
; 
; #pragma asm
  
  PUSHALL MACRO
  
          PUSH PSW
          PUSH ACC
          PUSH B
          PUSH DPL
          PUSH DPH
          MOV  A,R0   ;R0-R7入栈
          PUSH ACC
          MOV  A,R1
          PUSH ACC
          MOV  A,R2
          PUSH ACC
          MOV  A,R3
          PUSH ACC
          MOV  A,R4
          PUSH ACC
          MOV  A,R5
          PUSH ACC
          MOV  A,R6
          PUSH ACC
          MOV  A,R7
          PUSH ACC
  
  ENDM
  
; #pragma endasm
; 
; #pragma asm
  
  POPALL MACRO
  
          POP  ACC    ;R0-R7出栈
          MOV  R7,A
          POP  ACC
          MOV  R6,A
          POP  ACC
          MOV  R5,A
          POP  ACC
          MOV  R4,A
          POP  ACC
          MOV  R3,A
          POP  ACC
          MOV  R2,A
          POP  ACC
          MOV  R1,A
          POP  ACC
          MOV  R0,A
          POP  DPH
          POP  DPL
          POP  B
          POP  ACC
          POP  PSW
  
  ENDM
  
; #pragma endasm
; 
; void OSCtxSw(void)

	RSEG  ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:
	USING	0
			; SOURCE LINE # 89
; {
			; SOURCE LINE # 90
; 	OS_STK idata *SysStkSP;
; 	OS_STK *UserStkSP;
; 	INT8U  STKCount;
; 	
; #pragma asm
;   PUSHALL 
	  PUSHALL 
; #pragma endasm
; 
;   SysStkSP=UserSysSP_Start;
			; SOURCE LINE # 99
	MOV  	R7,UserSysSP_Start
;---- Variable 'SysStkSP?040' assigned to Register 'R7' ----
;   STKCount=SP-UserSysSP_Start;
			; SOURCE LINE # 100
	CLR  	C
	MOV  	A,SP
	SUBB 	A,UserSysSP_Start
	MOV  	R6,A
;---- Variable 'STKCount?042' assigned to Register 'R6' ----
;   UserStkSP=OSTCBCur->OSTCBStkPtr;
			; SOURCE LINE # 101
	MOV  	DPTR,#OSTCBCur
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?PLDPTR
;---- Variable 'UserStkSP?041' assigned to Register 'R1/R2/R3' ----
;   
;   *UserStkSP=STKCount;
			; SOURCE LINE # 103
	MOV  	A,R6
	LCALL	?C?CSTPTR
?C0003:
;   
;   do
;   {
			; SOURCE LINE # 106
;   	SysStkSP++;
			; SOURCE LINE # 107
	INC  	R7
;   	UserStkSP++;
			; SOURCE LINE # 108
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   	*UserStkSP=*SysStkSP;
			; SOURCE LINE # 109
	MOV  	R0,AR7
	MOV  	A,@R0
	LCALL	?C?CSTPTR
;   	STKCount--;
			; SOURCE LINE # 110
	DJNZ 	R6,?C0003
;   }while(STKCount!=0);
			; SOURCE LINE # 111
; 
; #if CXBP_OK>0
;   UserStkSP++;
			; SOURCE LINE # 114
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   UserStkSP_tmp=UserStkSP;
			; SOURCE LINE # 115
	MOV  	DPTR,#UserStkSP_tmp
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
; #pragma asm
;         MOV  R0,#LOW (UserStkSP_tmp)
	  MOV  R0,#LOW (UserStkSP_tmp)
;         ;MOV  R0,#UserStkSP_tmp
	  ;MOV  R0,#UserStkSP_tmp
;         ;INC  R0
	  ;INC  R0
;         ;MOV  DPH,@R0    ;变量 UserStkSP_tmp 在IDATA中
	  ;MOV  DPH,@R0    ;变量 UserStkSP_tmp 在IDATA中
;         ;INC  R0
	  ;INC  R0
;         ;MOV  DPL,@R0  
	  ;MOV  DPL,@R0  
;               
	  
;         ;保存仿真堆栈指针?C_XBP
	  ;保存仿真堆栈指针?C_XBP
;         MOV  A,?C_XBP    ;?C_XBP 仿真堆栈指针高8位
	  MOV  A,?C_XBP    ;?C_XBP 仿真堆栈指针高8位
;         ;MOVX @DPTR,A
	  ;MOVX @DPTR,A
;         MOVX @R0,A
	  MOVX @R0,A
;         INC  R0
	  INC  R0
;         ;INC  DPTR
	  ;INC  DPTR
;         MOV  A,?C_XBP+1  ;?C_XBP 仿真堆栈指针低8位
	  MOV  A,?C_XBP+1  ;?C_XBP 仿真堆栈指针低8位
;         ;MOVX @DPTR,A 
	  ;MOVX @DPTR,A 
;         MOVX @R0,A  
	  MOVX @R0,A  
; #pragma endasm  
; #endif  		
; 	OSTaskSwHook();
			; SOURCE LINE # 135
	LCALL	_?OSTaskSwHook
; 	
; 
; 	OSTCBCur=OSTCBHighRdy;
			; SOURCE LINE # 138
	MOV  	DPTR,#OSTCBHighRdy
	MOVX 	A,@DPTR
	MOV  	R1,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSTCBCur
	XCH  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
; 	OSPrioCur=OSPrioHighRdy;
			; SOURCE LINE # 139
	MOV  	DPTR,#OSPrioHighRdy
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSPrioCur
	MOVX 	@DPTR,A
; 
; 	UserStkSP=OSTCBCur->OSTCBStkPtr;
			; SOURCE LINE # 141
	MOV  	DPTR,#OSTCBCur
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?PLDPTR
; 	SysStkSP=UserSysSP_Start;		
			; SOURCE LINE # 142
	MOV  	R7,UserSysSP_Start
; 	STKCount=*UserStkSP;
			; SOURCE LINE # 143
	LCALL	?C?CLDPTR
	MOV  	R6,A
; 	
; 	SP=UserSysSP_Start+STKCount;
			; SOURCE LINE # 145
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0006:
; 	
; 	do{
			; SOURCE LINE # 147
; 		UserStkSP++;
			; SOURCE LINE # 148
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		SysStkSP++;
			; SOURCE LINE # 149
	INC  	R7
; 		*SysStkSP=*UserStkSP;
			; SOURCE LINE # 150
	LCALL	?C?CLDPTR
	MOV  	R0,AR7
	MOV  	@R0,A
;     STKCount--;
			; SOURCE LINE # 151
	DJNZ 	R6,?C0006
;   }while(STKCount!=0);
			; SOURCE LINE # 152
;   
; #if CXBP_OK>0 
;   UserStkSP++;
			; SOURCE LINE # 155
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   UserStkSP_tmp=UserStkSP;
			; SOURCE LINE # 156
	MOV  	DPTR,#UserStkSP_tmp
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
; #pragma asm
;         MOV  R0,#LOW (UserStkSP_tmp)
	  MOV  R0,#LOW (UserStkSP_tmp)
;         ;MOV  R0,#UserStkSP_tmp
	  ;MOV  R0,#UserStkSP_tmp
;         ;INC  R0
	  ;INC  R0
;         ;MOV  DPH,@R0    ;变量UserStkSP在IDATA中
	  ;MOV  DPH,@R0    ;变量UserStkSP在IDATA中
;         ;INC  R0
	  ;INC  R0
;         ;MOV  DPL,@R0  
	  ;MOV  DPL,@R0  
;               
	  
;         ;MOVX A,@DPTR
	  ;MOVX A,@DPTR
;         MOVX A,@R0
	  MOVX A,@R0
;         MOV  ?C_XBP,A    ;?C_XBP 仿真堆栈指针高8位
	  MOV  ?C_XBP,A    ;?C_XBP 仿真堆栈指针高8位
;         ;INC  DPTR
	  ;INC  DPTR
;         INC  R0
	  INC  R0
;         ;MOVX A,@DPTR
	  ;MOVX A,@DPTR
;         MOVX A,@R0
	  MOVX A,@R0
;         MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆栈指针低8位
	  MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆栈指针低8位
; #pragma endasm
; #endif
; 
; #pragma asm
;  POPALL
	  POPALL
;  RETI
	  RETI
; #pragma endasm  		
;   
; }
			; SOURCE LINE # 181
	RET  	

⌨️ 快捷键说明

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