os_time.c File Reference

#include "includes.h"

Go to the source code of this file.

Functions

void OsTimeInit (void)
void OsTimeEventHandler (void)
void OsTimeDelay (U16 Ticks)

Variables

const U8 TimeName [] = "OSTIME"
OS_TIME_CONTROL OsTimeCtrl


Function Documentation

void OsTimeDelay ( U16  Ticks  ) 

Definition at line 117 of file os_time.c.

00117                            {
00118     OS_TASKENTRY *pOsTask;
00119     #if(OS_CRITICAL_METHOD==3)
00120         U32 CpuEflags;
00121     #endif
00122   
00123     OsEnterCritical();
00124     if(Ticks==0){
00125         OsExitCritical();
00126         return;    
00127     }
00128     pOsTask=(OS_TASKENTRY *)OsTaskCurrent;
00129     pOsTask->Status=OS_TASK_PENDING;
00130     pOsTask->PendingType=OS_PENDING_TIME;
00131     pOsTask->TimeDelay=Ticks;        
00132     OsEventTaskPut(&OsTimeCtrl.TimeEvent,pOsTask);
00133     OsTaskSwitchOut();
00134     OsExitCritical();
00135 }

void OsTimeEventHandler ( void   ) 

Definition at line 20 of file os_time.c.

00020                              {
00021     OS_TASKENTRY *pOsTask,*pOsTask2;
00022     OS_TASKENTRY *pHeadTask,*pTailTask;
00023     OS_TASKENTRY **pListHead,**pListTail;
00024     OS_EVENT *pEvent;
00025     OS_RESOURCE *pResource;
00026     #if(OS_CRITICAL_METHOD==3)
00027         U32 CpuEflags;
00028     #endif
00029     
00030     OsEnterCritical();
00031     OsTimeCtrl.Time++;
00032     pEvent=OsEventCtrl.EventList;
00033     while(pEvent!=(OS_EVENT *)OS_NULL){
00034         pListHead=(OS_TASKENTRY **)(&pEvent->ListHead);
00035         pListTail=(OS_TASKENTRY **)(&pEvent->ListTail);
00036         pHeadTask=(OS_TASKENTRY *)pEvent->ListHead;
00037         pTailTask=(OS_TASKENTRY *)pEvent->ListTail;
00038         pOsTask=pHeadTask;
00039         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00040             if(pOsTask->TimeDelay!=0) pOsTask->TimeDelay--;
00041             if(pOsTask->TimeDelay==0){
00042                 pOsTask2=pOsTask;
00043                 if(pOsTask==pHeadTask){ 
00044                     if(pHeadTask->Next==(OS_TASKENTRY *)OS_NULL){
00045                         pEvent->ListHead=(U32 *)OS_NULL;
00046                         pEvent->ListTail=(U32 *)OS_NULL;
00047                         pOsTask=(OS_TASKENTRY *)OS_NULL;
00048                     }
00049                     else{
00050                         pEvent->ListHead=(U32 *)pHeadTask->Next;
00051                         pHeadTask=pHeadTask->Next;
00052                         pHeadTask->Prev=(OS_TASKENTRY *)OS_NULL; 
00053                         pOsTask=pHeadTask;             
00054                     }                
00055                 }        
00056                 else if(pOsTask==pTailTask){ 
00057                     pEvent->ListTail=(U32 *)pTailTask->Prev;
00058                     pTailTask=pTailTask->Prev;
00059                     pTailTask->Next=(OS_TASKENTRY *)OS_NULL;
00060                     pOsTask=(OS_TASKENTRY *)OS_NULL;
00061                 }
00062                 else{
00063                     pOsTask->Prev->Next=pOsTask->Next;
00064                     pOsTask->Next->Prev=pOsTask->Prev; 
00065                     pOsTask=pOsTask->Next;     
00066                 }
00067                 OsTaskReadyTaskPut(pOsTask2);
00068             }
00069             else pOsTask=pOsTask->Next;
00070         } 
00071         pEvent=pEvent->Next;   
00072     }
00073     pResource=OsResourceCtrl.ResourceList;
00074     while(pResource!=(OS_EVENT *)OS_NULL){
00075         pListHead=(OS_TASKENTRY **)(&pResource->ListHead);
00076         pListTail=(OS_TASKENTRY **)(&pResource->ListTail);
00077         pHeadTask=(OS_TASKENTRY *)pResource->ListHead;
00078         pTailTask=(OS_TASKENTRY *)pResource->ListTail;
00079         pOsTask=pHeadTask;
00080         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00081             if(pOsTask->TimeDelay!=0) pOsTask->TimeDelay--;
00082             if(pOsTask->TimeDelay==0){
00083                 pOsTask2=pOsTask;
00084                 if(pOsTask==pHeadTask){
00085                     if(pHeadTask->Next==(OS_TASKENTRY *)OS_NULL){
00086                         pResource->ListHead=(U32 *)OS_NULL;
00087                         pResource->ListTail=(U32 *)OS_NULL;
00088                         pOsTask=(OS_TASKENTRY *)OS_NULL;
00089                     }
00090                     else{
00091                         pResource->ListHead=(U32 *)pHeadTask->Next;
00092                         pHeadTask=pHeadTask->Next;
00093                         pHeadTask->Prev=(OS_TASKENTRY *)OS_NULL; 
00094                         pOsTask=pHeadTask;             
00095                     }                
00096                 }        
00097                 else if(pOsTask==pTailTask){
00098                     pResource->ListTail=(U32 *)pTailTask->Prev;
00099                     pTailTask=pTailTask->Prev;
00100                     pTailTask->Next=(OS_TASKENTRY *)OS_NULL;
00101                     pOsTask=(OS_TASKENTRY *)OS_NULL;
00102                 }
00103                 else{
00104                     pOsTask->Prev->Next=pOsTask->Next;
00105                     pOsTask->Next->Prev=pOsTask->Prev; 
00106                     pOsTask=pOsTask->Next;                                  
00107                 }
00108                 OsTaskReadyTaskPut(pOsTask2);
00109             }
00110             else pOsTask=pOsTask->Next;
00111         } 
00112         pResource=pResource->Next;   
00113     }
00114     OsExitCritical();
00115 }

void OsTimeInit ( void   ) 

Definition at line 15 of file os_time.c.


Variable Documentation

Definition at line 13 of file os_time.c.

const U8 TimeName[] = "OSTIME"

Definition at line 12 of file os_time.c.


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