📄 res_init.c.svn-base
字号:
#include "global.h"
#include "OS_CPU.h"
#include "resource.h"
Resource_Info* AllResource;
INT8U Init_RCBArray()
{
INT8U i;
for (i=0;i<RCBNum;i++)
{
RCBArray[i].property=AllResource[i].property;
RCBArray[i].Prio=AllResource[i].prio;
RCBArray[i].status=0xFF;
}
return E_OK;
}
INT8U InitAllResource( )
{
if (RCBNum==0)
{
RCBArray=0;
return E_OK;
}
if(RCBNum>8)
return E_OS_LIMIT;
return Init_RCBArray();
}
INT8U GetResource(INT8U Res)
{
RCB* Resource=&RCBArray[Res];
if(Resource==(RCB*)0)
return E_OS_ID;
if(Resource->property==internal)
return E_OS_ID;
if(Resource->status==0xFF)
{
Resource->status=OSTCBCur->prio;
OSTaskChangePrio(OSTCBCur->id,OSTCBCur->prio, Resource->Prio);
INT8U ResourceNesting=OSTCBCur->ResourceNesting;
OSTCBCur->ResNestingArray[ResourceNesting]=Res;
OSTCBCur->ResourceNesting++;
return E_OK;
}else
return E_OS_ACCESS;
}
INT8U ReleaseResource(INT8U Res)
{
RCB* Resource=&RCBArray[Res];
if(RCBArray+Res==(RCB*)0)
return E_OS_ID;
if(Resource->property==internal)
return E_OS_ID;
INT8U ResourceNesting=OSTCBCur->ResourceNesting;
if(Res==OSTCBCur->ResNestingArray[ResourceNesting-1])
{
if(OSTCBCur->prio==Resource->Prio)
{
OSTaskChangePrio(OSTCBCur->id,OSTCBCur->prio, Resource->status);
Resource->status=0xFF;
OSTCBCur->ResourceNesting--;
OSTCBCur->ResNestingArray[ResourceNesting]=-1;
return E_OK;
}
return E_OS_ACCESS;
}
return E_OS_NOFUNC;
}
//调用时间是任务在被调用执行时,调用GetInternalResource(OSTCBCur.InternalResource);
INT8U GetInternalResource(RCB* Res)
{
Res->status=OSTCBCur->prio;
OSTaskChangePrio(OSTCBCur->id,OSTCBCur->prio, Res->Prio);
// printf("current task 's priority is %d\n", OSTCBCur->Prio);
return E_OK;
}
//调用时间是任务在被放弃执行时,调用ReleaseInternalResource(OSTCBCur.InternalResouce);
INT8U ReleaseInternalResource(RCB* Res)
{
OSTaskChangePrio(OSTCBCur->id,OSTCBCur->prio, Res->status);
Res->status=0xFF;
return E_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -