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

📄 os_cpu_a.src

📁 移植UCOS2.00版内核到8051
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; END OF OSCtxSw

CSEG	AT	0000BH
	LJMP	OSTickISR

; 
; void OSTickISR(void) interrupt 1

	RSEG  ?PR?OSTickISR?OS_CPU_A
	USING	0
OSTickISR:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	MOV  	PSW,#00H
	PUSH 	AR0
	PUSH 	AR1
	PUSH 	AR2
	PUSH 	AR3
	PUSH 	AR4
	PUSH 	AR5
	PUSH 	AR6
	PUSH 	AR7
	USING	0
			; SOURCE LINE # 183
; {
; /*	OS_STK idata *SysStkSP;
; 	OS_STK *UserStkSP;
; 	INT8U  STKCount;*/
; 
; 	TR0=0;
			; SOURCE LINE # 189
	CLR  	TR0
; 	TH0=0x70;
			; SOURCE LINE # 190
	MOV  	TH0,#070H
; 	TL0=0x00;
			; SOURCE LINE # 191
	MOV  	TL0,#00H
; 	TR0 = 1;
			; SOURCE LINE # 192
	SETB 	TR0
; 	
; 	OSIntEnter();
			; SOURCE LINE # 194
	LCALL	_?OSIntEnter
; /*	if (OSIntNesting == 1)
; 	{
;   SysStkSP=UserSysSP_Start;
;   STKCount=SP-UserSysSP_Start;
;   UserStkSP=OSTCBCur->OSTCBStkPtr;
;   
;   *UserStkSP=STKCount;
;   
;   do
;   {
;   	SysStkSP++;
;   	UserStkSP++;
;   	*UserStkSP=*SysStkSP;
;   	STKCount--;
;   }while(STKCount!=0);		
;   }	*/
;   OSTimeTick();
			; SOURCE LINE # 211
	LCALL	_?OSTimeTick
; 	OSIntExit();
			; SOURCE LINE # 212
	LCALL	_?OSIntExit
; }
			; SOURCE LINE # 213
	POP  	AR7
	POP  	AR6
	POP  	AR5
	POP  	AR4
	POP  	AR3
	POP  	AR2
	POP  	AR1
	POP  	AR0
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF OSTickISR

; 
; void OSIntCtxSw(void)

	RSEG  ?PR?OSIntCtxSw?OS_CPU_A
OSIntCtxSw:
	USING	0
			; SOURCE LINE # 215
; {
			; SOURCE LINE # 216
; 	OS_STK idata *SysStkSP;
; 	OS_STK *UserStkSP;
; 	INT8U  STKCount;
; 	
; 	OSTaskSwHook();
			; SOURCE LINE # 221
	LCALL	_?OSTaskSwHook
; 	
; 	OSTCBCur=OSTCBHighRdy;
			; SOURCE LINE # 223
	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 # 224
	MOV  	DPTR,#OSPrioHighRdy
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSPrioCur
	MOVX 	@DPTR,A
; 
; 	UserStkSP=OSTCBCur->OSTCBStkPtr;
			; SOURCE LINE # 226
	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?244' assigned to Register 'R1/R2/R3' ----
; 	SysStkSP=UserSysSP_Start;		
			; SOURCE LINE # 227
	MOV  	R7,UserSysSP_Start
;---- Variable 'SysStkSP?243' assigned to Register 'R7' ----
; 	STKCount=*UserStkSP;
			; SOURCE LINE # 228
	LCALL	?C?CLDPTR
	MOV  	R6,A
;---- Variable 'STKCount?245' assigned to Register 'R6' ----
; //	STKCount-=4;
; 	SP=UserSysSP_Start+STKCount;
			; SOURCE LINE # 230
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0011:
; 	
; 	do{
			; SOURCE LINE # 232
; 		UserStkSP++;
			; SOURCE LINE # 233
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		SysStkSP++;
			; SOURCE LINE # 234
	INC  	R7
; 		*SysStkSP=*UserStkSP;
			; SOURCE LINE # 235
	LCALL	?C?CLDPTR
	MOV  	R0,AR7
	MOV  	@R0,A
;     STKCount--;
			; SOURCE LINE # 236
	DJNZ 	R6,?C0011
;   }while(STKCount!=0);
			; SOURCE LINE # 237
; 
; #if CXBP_OK>0 
;   UserStkSP++;
			; SOURCE LINE # 240
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   UserStkSP_tmp=UserStkSP;
			; SOURCE LINE # 241
	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 # 266
	RET  	
; END OF OSIntCtxSw

; 
; void OSStartHighRdy(void)

	RSEG  ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
	USING	0
			; SOURCE LINE # 268
; {
			; SOURCE LINE # 269
; 	OS_STK idata *SysStkSP;
; 	OS_STK *UserStkSP;
; 	INT8U  STKCount;
; 	
; 	OSTaskSwHook();
			; SOURCE LINE # 274
	LCALL	_?OSTaskSwHook
; 	
; 	
; 	SysStkSP=UserSysSP_Start;
			; SOURCE LINE # 277
	MOV  	R7,UserSysSP_Start
;---- Variable 'SysStkSP?346' assigned to Register 'R7' ----
; 	OSTCBCur=OSTCBHighRdy;
			; SOURCE LINE # 278
	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 # 279
	MOV  	DPTR,#OSPrioHighRdy
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSPrioCur
	MOVX 	@DPTR,A
; 	
; 	UserStkSP=OSTCBCur->OSTCBStkPtr;
			; SOURCE LINE # 281
	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?347' assigned to Register 'R1/R2/R3' ----
; 	STKCount=*UserStkSP;
			; SOURCE LINE # 282
	LCALL	?C?CLDPTR
	MOV  	R6,A
;---- Variable 'STKCount?348' assigned to Register 'R6' ----
; 	
; 	SP=UserSysSP_Start+STKCount;
			; SOURCE LINE # 284
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0015:
; 	
; 	do{
			; SOURCE LINE # 286
; 		UserStkSP++;
			; SOURCE LINE # 287
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		SysStkSP++;
			; SOURCE LINE # 288
	INC  	R7
; 		*SysStkSP=*UserStkSP;
			; SOURCE LINE # 289
	LCALL	?C?CLDPTR
	MOV  	R0,AR7
	MOV  	@R0,A
;     STKCount--;
			; SOURCE LINE # 290
	DJNZ 	R6,?C0015
;   }while(STKCount!=0);
			; SOURCE LINE # 291
; 
; #if CXBP_OK>0
;   UserStkSP++;
			; SOURCE LINE # 294
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   UserStkSP_tmp=UserStkSP;
			; SOURCE LINE # 295
	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
; 
;   OSRunning = 1;
			; SOURCE LINE # 315
	MOV  	DPTR,#OSRunning
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 
; #pragma asm
;  POPALL
	  POPALL
;  RETI
	  RETI
; #pragma endasm  	
; }
			; SOURCE LINE # 321
	RET  	
; END OF OSStartHighRdy

CSEG	AT	00023H
	LJMP	_?SerialISR

; 
; #if SERIAL_OK>0
; void SerialISR(void) reentrant interrupt 4 using 0

	RSEG  ?PR?_?SerialISR?OS_CPU_A
	USING	0
_?SerialISR:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	USING	0
	MOV  	PSW,#00H
			; SOURCE LINE # 324
; {    
;        // EA=0;
;        	OSIntEnter();
			; SOURCE LINE # 327
	LCALL	_?OSIntEnter
;         serial();   
			; SOURCE LINE # 328
	LCALL	_?serial
;       //  EA=1;
;       	OSIntExit(); 
			; SOURCE LINE # 330
	LCALL	_?OSIntExit
; }
			; SOURCE LINE # 331
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF _?SerialISR

	END

⌨️ 快捷键说明

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