taskisr.c

来自「MCS-51的一个小型操作系统,在KeilC中大模式下编译工作」· C语言 代码 · 共 70 行

C
70
字号
/********************************************
       嵌入式系统 小型操作系统
		  作者:汪普宏
	    制作日期:2006.9
*********************************************/

#include "os.h"
#include"OS_Mail.h"
#include "OS_Memory.h"
/****************************************
模块功能:任务级任务调度
模块接口:当前任务优先级,任务挂起延迟时间
调用者:任务
返回值:  无
*****************************************/

void OSTask_TimeDal(uchar TimeDal)			//任务级任务切换函数
{   
	ISR_num++; 
	#pragma ASM 
	PUSH    ACC
	PUSH    B 
	PUSH    DPH 
	PUSH    DPL 
	PUSH    PSW 
	MOV     PSW,  0
	PUSH 	AR0
	PUSH 	AR1
	PUSH 	AR2
	PUSH 	AR3
	PUSH 	AR4
	PUSH 	AR5
	PUSH 	AR6
	PUSH 	AR7
	#pragma	 ENDASM	
	OSPCB[Prio].timedal=TimeDal;	
	if(Prio!=FREE_TASK)
	{
		  if(TimeDal>0)
		  {
			    OSPCB[Prio].flg=WAIT_TIME;   //任务因时间延迟挂起
		  }
		  else   
		  {
			    OSPCB[Prio].flg=WAIT_MSG;	 //非空闲任务应因等待消息挂起
		  }
          if((OSRdyTab[Prio>>3]&=~OSMapTab[Prio&0x07])==0)	//从就绪表中删除该任务
          {
		        OSRdyGrp&=~OSMapTab[Prio>>3]; 
		  }
		  OSISR_Task_Sched();								
    }	
    #pragma ASM
	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
	DEC  	ISR_num
	RETI
	#pragma	 ENDASM	 
}

⌨️ 快捷键说明

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