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

📄 event_init.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
字号:
#include "global.h"
#include "OS_CPU.h"
#include "event.h"

INT8U SetEvent(INT8U id, INT8U mask)
{ 
       OS_TCB *ptcb;
	if(OSTCBidTbl[id]==(OS_TCB *)0)
  		return E_OS_ID;
       ptcb=OSTCBidTbl[id];
 	if(ptcb->state==suspended)
  		return E_OS_STATE;
	if(ptcb->taskclass!=ET)
 		return E_OS_ACCESS;
	ptcb->Set=ptcb->Set|mask;//设置TCB的Set字段

	if((ptcb->state==waitting)&&(ptcb->Set&ptcb->Wait!=0))
 	{
		ptcb->state=ready;
 
  		if(SCHEDULE==PREEMPT)
	  		schedule();
              else if(SCHEDULE==MIXPREEMPT &&OSTCBCur->schedpcy==PREEMPT)
                       schedule();     
	}	

	return E_OK;
} 


INT8U WaitEvent(INT8U mask)
{
	if(OSTCBCur->taskclass!=ET)//taskclass字段表示任务的属性是基本任务还是扩展任务
		return E_OS_ACCESS;

	if(OSIntNesting!=0)
		return E_OS_CALLEVEL;
	if(OSTCBCur->ResourceNesting!=0)
		return E_OS_RESOURCE;
	if((OSTCBCur->Set&mask)==0)
	{
		OSTCBCur->Wait=mask;
		OSTCBCur->state=waitting;
		schedule();
	}else 
		ClearEvent(OSTCBCur->Set&mask);
	return E_OK;
}


INT8U ClearEvent(INT8U mask)
{
	if(OSTCBCur->taskclass!=ET)//taskclass字段表示任务的属性是基本任务还是扩展任务
		return E_OS_ACCESS;
	if(OSIntNesting!=0)
		return E_OS_CALLEVEL;
	OSTCBCur->Set=OSTCBCur->Set-mask;
		return E_OK;
}


INT8U GetEvent(INT8U id, INT8U *event)
{     
       OS_TCB *ptcb;
	if(OSTCBidTbl[id]==(OS_TCB*)0)
		return E_OS_ID;
       ptcb= OSTCBidTbl[id];
	if(ptcb->state==suspended)
		return E_OS_STATE;
	if(ptcb->taskclass!=ET)
		return E_OS_ACCESS;
	event=&(ptcb->Set);
		return E_OK;
}

⌨️ 快捷键说明

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