#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_TASKENTRY * | OsResourceTaskGet (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 |
| 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.
00013 { 00014 OsResourceCtrl.ResourceNumber=0; 00015 OsResourceCtrl.ResourceList=(OS_RESOURCE *)OS_NULL; 00016 }
| 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 }
Definition at line 11 of file os_resource.c.
1.5.9