os_resource.c File Reference

#include "includes.h"

Go to the source code of this file.

Functions

void OsResourceInit (void)
OS_BOOL OsResourceAdd (OS_RESOURCE *pResource, U8 *pResourceName, U32 ResourceType)
OS_BOOL OsResourceDelete (OS_RESOURCE *pResource)
OS_BOOL OsResourceTaskPut (OS_RESOURCE *pResource, OS_TASKENTRY *pTask)
OS_TASKENTRYOsResourceTaskGet (OS_RESOURCE *pResource)
OS_BOOL OsResourceAllocate (OS_RESOURCE *pResource, U16 TimeTick)
OS_BOOL OsResourceRelease (OS_RESOURCE *pResource)
OS_BOOL OsResourceUserCheck (OS_RESOURCE *pResource)
OS_BOOL OsResourceTaskFind (U8 *pTaskName)
OS_BOOL OsResourceTaskDelete (U8 *pTaskName)

Variables

OS_RESOURCE_CONTROL OsResourceCtrl


Function Documentation

OS_BOOL OsResourceAdd ( OS_RESOURCE pResource,
U8 pResourceName,
U32  ResourceType 
)

Definition at line 18 of file os_resource.c.

00018                                                                                 {
00019     OS_RESOURCE *pOsResource;
00020     U8 i;
00021     #if(OS_CRITICAL_METHOD==3)
00022         U32 CpuEflags;
00023     #endif
00024     
00025     if(pResource==(OS_RESOURCE *)OS_NULL) return OS_FALSE;
00026     OsEnterCritical();
00027     for(i=0;i<OS_NAME_STRING_MAX;i++) pResource->Name[i]=0;
00028     if(pResourceName==(U8 *)OS_NULL) OsLibStringCopy(&pResource->Name,OsUnkown);
00029     else OsLibStringCopy(&pResource->Name,pResourceName);
00030     pResource->InUse=OS_FALSE;
00031     pResource->pUser=(U32 *)OS_NULL;
00032     pResource->Type=ResourceType;
00033     pResource->ListHead=(U32 *)OS_NULL;
00034     pResource->ListTail=(U32 *)OS_NULL;
00035     pResource->EntryNumber=0;
00036     pResource->Prev=(OS_RESOURCE *)OS_NULL;
00037     pResource->Next=(OS_RESOURCE *)OS_NULL;
00038     if(OsResourceCtrl.ResourceList==(OS_RESOURCE *)OS_NULL){
00039         OsResourceCtrl.ResourceList=pResource;
00040     }
00041     else{
00042         pOsResource=OsResourceCtrl.ResourceList;
00043         pOsResource->Prev=pResource;
00044         pResource->Next=pOsResource;
00045         OsResourceCtrl.ResourceList=pResource;
00046     }
00047     OsExitCritical();
00048     return OS_TRUE;
00049 }

OS_BOOL OsResourceAllocate ( OS_RESOURCE pResource,
U16  TimeTick 
)

Definition at line 138 of file os_resource.c.

00138                                                                {
00139     OS_TASKENTRY *pOsTask;
00140     #if(OS_CRITICAL_METHOD==3)
00141         U32 CpuEflags;
00142     #endif
00143 
00144     if(pResource==(OS_RESOURCE *)OS_NULL) return OS_FALSE;
00145     OsEnterCritical();
00146     pOsTask=(OS_TASKENTRY *)OsTaskCurrent;
00147     if(pResource->InUse==OS_TRUE){
00148         if(TimeTick==0){
00149             OsExitCritical();
00150             return OS_FALSE;
00151         }
00152         pOsTask->Status=OS_TASK_PENDING;
00153         pOsTask->PendingType=OS_PENDING_RESOURCE;
00154         pOsTask->TimeDelay=TimeTick;        
00155         OsResourceTaskPut(pResource,pOsTask);
00156         OsTaskSwitchOut();
00157         if((pResource->InUse=OS_TRUE)&&(pResource->pUser==(U32 *)pOsTask)){
00158             OsExitCritical();
00159             return OS_TRUE;
00160         }
00161         if(pOsTask->TimeDelay==0){
00162             OsExitCritical();
00163             return OS_FALSE;
00164         }
00165     }
00166     pResource->InUse=OS_TRUE;
00167     pResource->pUser=(U32 *)pOsTask;
00168     OsExitCritical();
00169     return OS_TRUE;
00170 }

OS_BOOL OsResourceDelete ( OS_RESOURCE pResource  ) 

Definition at line 51 of file os_resource.c.

00051                                                 {
00052     OS_RESOURCE *pOsResource;
00053     #if(OS_CRITICAL_METHOD==3)
00054         U32 CpuEflags;
00055     #endif
00056 
00057     if(pResource==(OS_RESOURCE *)OS_NULL) return OS_FALSE; // event is null
00058     if(OsResourceCtrl.ResourceList==(OS_RESOURCE *)OS_NULL) return OS_FALSE; // no event in event list
00059     OsEnterCritical();
00060     pOsResource=OsResourceCtrl.ResourceList;
00061     while(pOsResource!=(OS_RESOURCE *)OS_NULL){
00062         if(pOsResource==pResource){
00063             if(pOsResource==OsResourceCtrl.ResourceList){
00064                 if(OsResourceCtrl.ResourceList->Next!=(OS_RESOURCE *)OS_NULL){
00065                     OsResourceCtrl.ResourceList->Next->Prev=(OS_RESOURCE *)OS_NULL;
00066                 }
00067                 OsResourceCtrl.ResourceList=OsResourceCtrl.ResourceList->Next;
00068             }
00069             else{
00070                 pOsResource->Prev->Next=pOsResource->Next;
00071                 pOsResource->Next->Prev=pOsResource->Prev;
00072                 pOsResource->Prev=(OS_RESOURCE *)OS_NULL;
00073                 pOsResource->Next=(OS_RESOURCE *)OS_NULL;
00074             }
00075             return OS_TRUE;
00076         }
00077         else pOsResource=pOsResource->Next;
00078     }
00079     OsExitCritical();
00080     return OS_FALSE; 
00081 }

void OsResourceInit ( void   ) 

Definition at line 13 of file os_resource.c.

OS_BOOL OsResourceRelease ( OS_RESOURCE pResource  ) 

Definition at line 172 of file os_resource.c.

00172                                                  {
00173     OS_TASKENTRY *pOsTask;
00174     #if(OS_CRITICAL_METHOD==3)
00175         U32 CpuEflags;
00176     #endif
00177 
00178     if(pResource==(OS_RESOURCE *)OS_NULL) return OS_FALSE;
00179     OsEnterCritical();
00180     pOsTask=(OS_TASKENTRY *)OsTaskCurrent;
00181     if(pResource->InUse==OS_FALSE){
00182         OsExitCritical();
00183         return OS_TRUE;
00184     }
00185     if(pResource->pUser!=(U32 *)pOsTask){
00186         OsExitCritical();
00187         return OS_FALSE;
00188     }
00189     pResource->InUse=OS_FALSE;
00190     pResource->pUser=(U32 *)OS_NULL;
00191     pOsTask=OsResourceTaskGet(pResource);
00192     if(pOsTask==(OS_TASKENTRY *)OS_NULL){
00193         OsExitCritical();
00194         return OS_TRUE;
00195     }
00196     pResource->InUse=OS_TRUE;
00197     pResource->pUser=(U32 *)pOsTask;
00198     OsTaskReadyTaskPut(pOsTask);
00199     OsExitCritical();
00200 }

OS_BOOL OsResourceTaskDelete ( U8 pTaskName  ) 

Definition at line 225 of file os_resource.c.

00225                                            {
00226     OS_RESOURCE *pOsResource;
00227     OS_TASKENTRY *pOsTask;
00228     
00229     pOsResource=OsResourceCtrl.ResourceList;
00230     while(pOsResource!=(OS_RESOURCE *)OS_NULL){
00231         pOsTask=(OS_TASKENTRY *)pOsResource->ListHead;
00232         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00233             if(OsLibStringCompare((U8 *)pOsTask->Name,pTaskName)==OS_TRUE){
00234                 if(pOsTask==(OS_TASKENTRY *)pOsResource->ListHead){
00235                     if(pOsTask==(OS_TASKENTRY *)pOsResource->ListTail){
00236                         pOsResource->ListHead=(U32 *)OS_NULL;
00237                         pOsResource->ListTail=(U32 *)OS_NULL;
00238                         OsTaskFreeTaskPut(pOsTask);
00239                     }
00240                     else{
00241                         pOsTask->Next->Prev=(OS_TASKENTRY *)OS_NULL;
00242                         pOsResource->ListHead=(U32 *)pOsTask->Next;
00243                         OsTaskFreeTaskPut(pOsTask);
00244                     }
00245                 }
00246                 else if(pOsTask==(OS_TASKENTRY *)pOsResource->ListTail){
00247                         pOsTask->Prev->Next=(OS_TASKENTRY *)OS_NULL;
00248                         pOsResource->ListTail=(U32 *)pOsTask->Prev;
00249                         OsTaskFreeTaskPut(pOsTask);
00250                 }
00251                 else{
00252                     pOsTask->Prev->Next=pOsTask->Next;
00253                     pOsTask->Next->Prev=pOsTask->Prev;
00254                     OsTaskFreeTaskPut(pOsTask);
00255                 }
00256                 if((pOsResource->InUse==OS_TRUE)&&(pOsResource->pUser==(U32 *)pOsTask)){                    
00257                     pOsResource->InUse=OS_FALSE;
00258                     pOsResource->pUser=(U32 *)OS_NULL;
00259                     pOsTask=OsResourceTaskGet(pOsResource);
00260                     if(pOsTask==(OS_TASKENTRY *)OS_NULL){
00261                         return OS_TRUE;
00262                     }
00263                     pOsResource->InUse=OS_TRUE;
00264                     pOsResource->pUser=(U32 *)pOsTask;
00265                     OsTaskReadyTaskPut(pOsTask);
00266                 }
00267                 return OS_TRUE; 
00268             }
00269             else pOsTask=pOsTask->Next;
00270         }
00271         pOsResource=pOsResource->Next;
00272     } 
00273     return OS_FALSE;
00274 }

OS_BOOL OsResourceTaskFind ( U8 pTaskName  ) 

Definition at line 207 of file os_resource.c.

00207                                          {
00208     OS_RESOURCE *pOsResource;
00209     OS_TASKENTRY *pOsTask;
00210     
00211     pOsResource=OsResourceCtrl.ResourceList;
00212     while(pOsResource!=(OS_RESOURCE *)OS_NULL){
00213         pOsTask=(OS_TASKENTRY *)pOsResource->ListHead;
00214         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00215             if(OsLibStringCompare((U8 *)pOsTask->Name,pTaskName)==OS_TRUE){
00216                 return OS_TRUE; 
00217             }
00218             else pOsTask=pOsTask->Next;
00219         }
00220         pOsResource=pOsResource->Next;
00221     } 
00222     return OS_FALSE;
00223 }

OS_TASKENTRY* OsResourceTaskGet ( OS_RESOURCE pResource  ) 

Definition at line 109 of file os_resource.c.

00109                                                        {
00110     OS_TASKENTRY **pListHead;
00111     OS_TASKENTRY **pListTail;
00112     OS_TASKENTRY *pHeadTask;
00113     OS_TASKENTRY *pTailTask;
00114     OS_TASKENTRY *pOsTask;
00115 
00116     if(pResource==(OS_RESOURCE *)OS_NULL) return (OS_TASKENTRY *)OS_NULL;
00117     if(pResource->ListHead==(U32 *)OS_NULL) return (OS_TASKENTRY *)OS_NULL;
00118     pListHead=(OS_TASKENTRY **)(&pResource->ListHead);
00119     pListTail=(OS_TASKENTRY **)(&pResource->ListTail);
00120     pHeadTask=(OS_TASKENTRY *)pResource->ListHead;
00121     pTailTask=(OS_TASKENTRY *)pResource->ListTail;
00122     if(pHeadTask==pTailTask){
00123         pOsTask=pHeadTask;
00124         *pListHead=(OS_TASKENTRY *)OS_NULL;
00125         *pListTail=(OS_TASKENTRY *)OS_NULL;
00126     }
00127     else{
00128         pOsTask=pHeadTask;
00129         pHeadTask=pHeadTask->Next;
00130         pHeadTask->Prev=(OS_TASKENTRY *)OS_NULL;
00131         *pListHead=pHeadTask;
00132     }    
00133     pOsTask->Next=(OS_TASKENTRY *)OS_NULL;        
00134     pOsTask->Prev=(OS_TASKENTRY *)OS_NULL;
00135     return pOsTask;
00136 }

OS_BOOL OsResourceTaskPut ( OS_RESOURCE pResource,
OS_TASKENTRY pTask 
)

Definition at line 83 of file os_resource.c.

00083                                                                      {
00084     OS_TASKENTRY **pListHead;
00085     OS_TASKENTRY **pListTail;
00086     OS_TASKENTRY *pHeadTask;
00087     OS_TASKENTRY *pTailTask;
00088     
00089     if(pResource==(OS_RESOURCE *)OS_NULL) return OS_FALSE;
00090     if(pTask==(OS_TASKENTRY *)OS_NULL) return OS_FALSE;
00091     pTask->Next=(OS_TASKENTRY *)OS_NULL;
00092     pTask->Prev=(OS_TASKENTRY *)OS_NULL;
00093     pListHead=(OS_TASKENTRY **)(&pResource->ListHead);
00094     pListTail=(OS_TASKENTRY **)(&pResource->ListTail);
00095     pHeadTask=(OS_TASKENTRY *)pResource->ListHead;
00096     pTailTask=(OS_TASKENTRY *)pResource->ListTail;
00097     if(pHeadTask==(OS_TASKENTRY *)OS_NULL){
00098         *pListHead=pTask;
00099         *pListTail=pTask;
00100     }
00101     else{
00102         pTask->Prev=pTailTask;
00103         pTailTask->Next=pTask;
00104         *pListTail=pTask;
00105     }
00106     return OS_TRUE;
00107 }

OS_BOOL OsResourceUserCheck ( OS_RESOURCE pResource  ) 

Definition at line 202 of file os_resource.c.

00202                                                    {
00203     if(pResource->pUser==OsTaskCurrent) return OS_TRUE;
00204     else return OS_FALSE;
00205 }


Variable Documentation

Definition at line 11 of file os_resource.c.


Generated on Sat Apr 10 23:28:07 2010 for 80X86 MULTI-TASKING OPERATION SYSTEM by  doxygen 1.5.9