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

📄 res_init.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 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 + -