📄 event_init.c.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 + -