|
楼主 |
发表于 2009-6-4 10:29:44
|
显示全部楼层
void TMR_Hander(void)
{
TTimer *Point;
TTask *Task;
critical_flag_t critical_flag;
critical_flag=CriticalEnter();
Point=(void *)TaskTimerQueue.Object;
while(1)
{
if(Point==NULL)
{
break;
}
if(Point->rel!=0)
{
break;
}
Task=Point->Task;
Task->Queue=NULL;
TSK_Put(&VTTaskReadyQueue,Task);
Point->Task=NULL;
Point=(void *)Point->Link.Next;
}
TaskTimerQueue.Object=Point;
CriticalExit(critical_flag);
TSK_Swap();
}
void VT_TicksHander(void)
{
static size_t VTLastTimerTicks=0;
critical_flag_t critical_flag;
critical_flag=CriticalEnter();
VTTimerTicks++;
if(TaskTimerQueue.Object==NULL)
{
CriticalExit(critical_flag);
return ;
}
if( (size_t)(VTTimerTicks-VTLastTimerTicks) >= ((TTimer *)TaskTimerQueue.Object)->rel )
{
((TTimer *)TaskTimerQueue.Object)->rel=0;
VTLastTimerTicks=VTTimerTicks;
CriticalExit(critical_flag);
TMR_Hander();
return ;
}
CriticalExit(critical_flag);
} |
|