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

📄 os_cpu_a.src

📁 uCOS 嵌入式操作系统的改进版,增加了网络通讯.
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; //	UserUsrStkSP -= UserStkCount;
; 	
; 	SP = UserSysSP_Start + UserStkCount;			//#Lin@系统堆栈定位
			; SOURCE LINE # 206
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0006:
; 
; //#Lin@数据传输
; 
; 	do
; 		{
			; SOURCE LINE # 211
; 		UserUsrStkSP ++;
			; SOURCE LINE # 212
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		UserSysStkSP ++;
			; SOURCE LINE # 213
	INC  	R7
; 		*UserSysStkSP = *UserUsrStkSP;
			; SOURCE LINE # 214
	LCALL	?C?CLDPTR
	MOV  	R0,AR7
	MOV  	@R0,A
; 		UserStkCount --;
			; SOURCE LINE # 215
	DJNZ 	R6,?C0006
; 		}
			; SOURCE LINE # 216
; 	while(UserStkCount != 0);
			; SOURCE LINE # 217
; 
; 	
; #pragma	asm
; 
	  
; 	USERPOPALL
	  USERPOPALL
; 	RETI											//#Lin@仿真中断返回
	  RETI											 
; 	
	  
; #pragma	endasm
; }
			; SOURCE LINE # 226
	RET  	
; END OF OSCtxSw

CSEG	AT	0000BH
	LJMP	OSTickISR

; //
; //=======================================================================================================
; 
; //=======================================================================================================
; //
; //#Lin@中断服务
; 
; void          OSTickISR(void) interrupt	1 //using 3

	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 # 234
; {
; 
; //	EA = 0;
; //    OS_STK	idata	*UsrStkSP;
; 
; //	*UsrStkSP = SP;
;     OS_STK	idata	*UserSysStkSP;
;     OS_STK	*UserUsrStkSP;
; 	INT8U	UserStkCount;
; 	
; 	TR0 = 0;
			; SOURCE LINE # 245
	CLR  	TR0
; 	TH0 = 0x70;
			; SOURCE LINE # 246
	MOV  	TH0,#070H
; 	TL0 = 0x0;
			; SOURCE LINE # 247
	MOV  	TL0,#00H
; 	TR0 = 1;
			; SOURCE LINE # 248
	SETB 	TR0
; 	
; 	P1 ^= 0x80;
			; SOURCE LINE # 250
	XRL  	P1,#080H
; 	
; 	OSIntEnter();
			; SOURCE LINE # 252
	LCALL	_?OSIntEnter
; 	if (OSIntNesting == 1){
			; SOURCE LINE # 253
	MOV  	DPTR,#OSIntNesting
	MOVX 	A,@DPTR
	XRL  	A,#01H
	JNZ  	?C0008
; 		
; 		//	OSTCBCur ->OSTCBStkPtr = UsrStkSP;
; 			UserSysStkSP = UserSysSP_Start;
			; SOURCE LINE # 256
	MOV  	R7,UserSysSP_Start
;---- Variable 'UserSysStkSP?143' assigned to Register 'R7' ----
; 			UserStkCount = SP - UserSysSP_Start;
			; SOURCE LINE # 257
	CLR  	C
	MOV  	A,SP
	SUBB 	A,UserSysSP_Start
	MOV  	R6,A
;---- Variable 'UserStkCount?145' assigned to Register 'R6' ----
; 			UserUsrStkSP = OSTCBCur ->OSTCBStkPtr;
			; SOURCE LINE # 258
	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 'UserUsrStkSP?144' assigned to Register 'R1/R2/R3' ----
; 			
; 		//	SP = UserSysSP_Start;//?
; 			
; 		//	UserUsrStkSP += UserStkCount;
; 			*UserUsrStkSP = UserStkCount;
			; SOURCE LINE # 263
	MOV  	A,R6
	LCALL	?C?CSTPTR
?C0011:
; 			
; 		//	OSTCBCur ->OSTCBStkPtr = UserUsrStkSP;
; 			
; 			do
; 				{
			; SOURCE LINE # 268
; 				UserUsrStkSP ++;
			; SOURCE LINE # 269
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 				UserSysStkSP ++;
			; SOURCE LINE # 270
	INC  	R7
; 				*UserUsrStkSP = *UserSysStkSP;
			; SOURCE LINE # 271
	MOV  	R0,AR7
	MOV  	A,@R0
	LCALL	?C?CSTPTR
; 				UserStkCount --;
			; SOURCE LINE # 272
	DJNZ 	R6,?C0011
; 				}
			; SOURCE LINE # 273
; 			while(UserStkCount != 0);
			; SOURCE LINE # 274
; 		}
			; SOURCE LINE # 275
?C0008:
; 	
; 	OSTimeTick();
			; SOURCE LINE # 277
	LCALL	_?OSTimeTick
; 	OSIntExit();
			; SOURCE LINE # 278
	LCALL	_?OSIntExit
; 	
; //	EA = 1;
; }
			; SOURCE LINE # 281
	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

; //
; //=======================================================================================================
; 
; //=======================================================================================================
; //
; //#Lin@在ISR中执行任务切换
; 
; void          OSIntCtxSw(void) //using 3

	RSEG  ?PR?OSIntCtxSw?OS_CPU_A
OSIntCtxSw:
	USING	0
			; SOURCE LINE # 289
; {
			; SOURCE LINE # 290
; 
; //    OS_STK	idata	*UsrStkSP;
; 
; //	*UsrStkSP = SP;
; 
;     OS_STK	idata	*UserSysStkSP;
;     OS_STK	*UserUsrStkSP;
; 	INT8U	UserStkCount;
; 
; 	OSTaskSwHook();
			; SOURCE LINE # 300
	LCALL	_?OSTaskSwHook
; 	
; 	
; 	OSTCBCur = OSTCBHighRdy;
			; SOURCE LINE # 303
	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 # 304
	MOV  	DPTR,#OSPrioHighRdy
	MOVX 	A,@DPTR
	MOV  	DPTR,#OSPrioCur
	MOVX 	@DPTR,A
; 	
; //	UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; 	UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
			; SOURCE LINE # 307
	MOV  	DPTR,#OSTCBHighRdy
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?PLDPTR
	LCALL	?C?CLDPTR
	MOV  	R7,A
;---- Variable 'UserStkCount?248' assigned to Register 'R7' ----
; 	UserSysStkSP = UserSysSP_Start;
			; SOURCE LINE # 308
	MOV  	R6,UserSysSP_Start
;---- Variable 'UserSysStkSP?246' assigned to Register 'R6' ----
; 	UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
			; SOURCE LINE # 309
;---- Variable 'UserUsrStkSP?247' assigned to Register 'R1/R2/R3' ----
; 	
; //	UserUsrStkSP -= UserStkCount;
; 	
; 	SP = UserSysSP_Start + UserStkCount;
			; SOURCE LINE # 313
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0015:
; 
; 	do
; 		{
			; SOURCE LINE # 316
; 		UserUsrStkSP ++;
			; SOURCE LINE # 317
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		UserSysStkSP ++;
			; SOURCE LINE # 318
	INC  	R6
; 		*UserSysStkSP = *UserUsrStkSP;
			; SOURCE LINE # 319
	LCALL	?C?CLDPTR
	MOV  	R0,AR6
	MOV  	@R0,A
; 		UserStkCount --;
			; SOURCE LINE # 320
	DJNZ 	R7,?C0015
; 		}
			; SOURCE LINE # 321
; 	while(UserStkCount != 0);
			; SOURCE LINE # 322
; 
; 	
; 
; #pragma	asm
; 
	  
; 	USERPOPALL
	  USERPOPALL
; 	RETI
	  RETI
; 	
	  
; #pragma	endasm
; }
			; SOURCE LINE # 332
	RET  	
; END OF OSIntCtxSw

; //
; //=======================================================================================================
; 
; //=======================================================================================================
; //#Lin@起始
; 
; void          OSStartHighRdy(void) //using 3

	RSEG  ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
	USING	0
			; SOURCE LINE # 339
; {
			; SOURCE LINE # 340
; //    OS_STK	idata	*UsrStkSP;
; 
; //	*UsrStkSP = SP;
;     OS_STK	idata	*UserSysStkSP;
;     OS_STK	*UserUsrStkSP;
; 	INT8U	UserStkCount;
; 
; //	UserSysSP_Start = SP;
; 
; 	OSTaskSwHook();
			; SOURCE LINE # 350
	LCALL	_?OSTaskSwHook
; 	
; 	OSRunning = TRUE;
			; SOURCE LINE # 352
	MOV  	DPTR,#OSRunning
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 	
; //	UsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
; 	UserStkCount = *OSTCBHighRdy ->OSTCBStkPtr;
			; SOURCE LINE # 355
	MOV  	DPTR,#OSTCBHighRdy
	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
	LCALL	?C?CLDPTR
	MOV  	R7,A
;---- Variable 'UserStkCount?351' assigned to Register 'R7' ----
; 	UserSysStkSP = UserSysSP_Start;
			; SOURCE LINE # 356
	MOV  	R6,UserSysSP_Start
;---- Variable 'UserSysStkSP?349' assigned to Register 'R6' ----
; 	UserUsrStkSP = OSTCBHighRdy ->OSTCBStkPtr;
			; SOURCE LINE # 357
;---- Variable 'UserUsrStkSP?350' assigned to Register 'R1/R2/R3' ----
; 	
; //	UserUsrStkSP -= UserStkCount;
; 	
; 	SP = UserSysSP_Start + UserStkCount;
			; SOURCE LINE # 361
	ADD  	A,UserSysSP_Start
	MOV  	SP,A
?C0019:
; 
; 	do
; 		{
			; SOURCE LINE # 364
; 		UserUsrStkSP ++;
			; SOURCE LINE # 365
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		UserSysStkSP ++;
			; SOURCE LINE # 366
	INC  	R6
; 		*UserSysStkSP = *UserUsrStkSP;
			; SOURCE LINE # 367
	LCALL	?C?CLDPTR
	MOV  	R0,AR6
	MOV  	@R0,A
; 		UserStkCount --;
			; SOURCE LINE # 368
	DJNZ 	R7,?C0019
; 		}
			; SOURCE LINE # 369
; 	while(UserStkCount != 0);
			; SOURCE LINE # 370
; 
; 	
; 	
; #pragma	asm
; 
	  
; 	USERPOPALL
	  USERPOPALL
; 	RETI
	  RETI
; 	
	  
; #pragma	endasm
; 
; }
			; SOURCE LINE # 381
	RET  	
; END OF OSStartHighRdy

	END

⌨️ 快捷键说明

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