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

📄 task_switch.a51.bak

📁 本RTOS参考 usOS-II, ARM-RTX
💻 BAK
字号:

NAME	OS_TASK_SWITCH

  EXTRN   CODE (OSTimeTick)
  EXTRN   CODE (OSIntExit)

?PR?OSTickISR?OS_TASK_SWITCH                    SEGMENT CODE 
?DT?OSTickISR?OS_TASK_SWITCH                    SEGMENT DATA OVERLAYABLE 
  ;---------------------------

	PUBLIC	OSTickISR
	;---------------------------

	RSEG  ?DT?OSTickISR?OS_TASK_SWITCH
?OSTickISR?BYTE:
     IEtemp?350:   DS   1
  
  ;---------------------------

CSEG	AT	0000BH
	LJMP	OSTickISR
; //功能描述: 系统时钟中断服务函数
; //#pragma disable  //禁止所有中断
; void OSTickISR(void) interrupt 1  //OS_TIME_ISR

	RSEG  ?PR?OSTickISR?OS_TASK_SWITCH
	USING	0
OSTickISR:
;--------------------------------
;     IEtemp=IE;//保存中断
			; SOURCE LINE # 202
	MOV  	IEtemp?350,IE
;     OS_AllIRQ_Unable(); //总中断禁止
			; SOURCE LINE # 203
	CLR  	EA
;--------------------------------
	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 # 196
; {uint8 data IEtemp;
;     
;-----------------------------------------
;在后面先判断再设置
;     TH0=T0H_COUNTER;
			; SOURCE LINE # 199
;---	MOV  	TH0,#070H
;     TL0=T0L_COUNTER;
			; SOURCE LINE # 200
;---	MOV  	TL0,#00H
;------------------------------------------
;修改到前面--------------------------------     
;     IEtemp=IE;//保存中断
			; SOURCE LINE # 202
;---	MOV  	IEtemp?350,IE
;     OS_AllIRQ_Unable(); //总中断禁止
			; SOURCE LINE # 203
;---	CLR  	EA
;--------------------------------
;     //IE &= B0000_0000; //IE &= B0000_0001; //保留外部中断原来状态,屏蔽掉其他中断
;     
; 
; //#if EN_TIMER_SHARING > 0
;--------------------------------
;     if(TH0==0)//==0说明是定时器溢出中断,!=0表示是软件设置的定时器中断
			; SOURCE LINE # 211
	MOV  	A,TH0
	JNZ  	?C0011
;     {
			; SOURCE LINE # 212
;        TH0=T0H_COUNTER;
			; SOURCE LINE # 213
	MOV  	TH0,#070H
;        TL0=T0L_COUNTER;
			; SOURCE LINE # 214
	MOV  	TL0,A
;        OSTimeTick();           //调用系统时钟处理函数
			; SOURCE LINE # 215
	LCALL	OSTimeTick
;     }//
			; SOURCE LINE # 216
?C0011:
;--------------------------------	

; //#else
; //  OSIntSendSignal(TIME_ISR_TASK_ID); // 唤醒ID为TIME_ISR_TASK_ID的任务
; //#endif
;     
;     
;     OSIntExit();                       //在完全退出中断时,才进行任务切换
			; SOURCE LINE # 215
	LCALL	OSIntExit
;修改到后面--------------------------------
;     //OS_AllIRQ_Enable(); //总中断允许
;     IE=IEtemp;  //恢复所有中断状态
			; SOURCE LINE # 218
;---	MOV  	IE,IEtemp?350
;--------------------------------
; }
			; SOURCE LINE # 219
	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
;--------------------------------
;     //OS_AllIRQ_Enable(); //总中断允许
;     IE=IEtemp;  //恢复所有中断状态
			; SOURCE LINE # 218
	MOV  	IE,IEtemp?350
;--------------------------------
	RETI 	
; END OF OSTickISR


  END

⌨️ 快捷键说明

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