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

📄 timer.c

📁 名厂车载GPS通信终端
💻 C
字号:
#define TIMER_GLOBAL
#include "includes.h"


TIMER *Freelist;
TIMER *Userlist;

void Init_Timer(void)
{
	UCHAR i;
	
	StartTa0();
	
	Userlist       = NULL;
	Freelist       = NULL;
	for(i=0; i<MAX_TIMER; i++)
	{
		//Timer_Tcb[i].id       = 0;
		Timer_Tcb[i].on_off   = OFF;
		Timer_Tcb[i].ldtime   = 0;
		Timer_Tcb[i].lefttime = 0;
		Timer_Tcb[i].proc     = NULL;
		Timer_Tcb[i].next     = Freelist;
		Freelist              = &Timer_Tcb[i];
	}
}

TIMER * Create_Timer(void far (*p)())
{
	TIMER *ptr;
	
	if(Freelist==NULL) return NULL;
	
	ptr = Freelist; 
	Freelist = Freelist->next;
	
	//ptr->id       = 0;
	ptr->on_off   = OFF;
	ptr->proc     = p;
	ptr->ldtime   = 0;
	ptr->lefttime = 0;   
	ptr->next     = Userlist;
	Userlist      = ptr;
	
	return Userlist;
}

void Remove_Timer(TIMER *ptr)
{
	TIMER *tptr;
	
	if(ptr==NULL)return;
	
	//ptr->id       = 0;
	ptr->on_off   = OFF;
	ptr->proc     = NULL;
	ptr->ldtime   = 0;
	ptr->lefttime = 0; 
	
	tptr = Userlist;
	if(ptr==tptr)
	{
		Userlist   = Userlist->next;
		tptr->next = Freelist;
		Freelist   = tptr;
		return; 
	}
	else
	{
		while((tptr->next)!=ptr&&(tptr->next)!=NULL)
		{
			tptr = tptr->next;
		}
		if(tptr->next==NULL) return;
		tptr->next = ptr->next;
		ptr->next  = Freelist;
		Freelist   = ptr;
	}
}

void Start_Timer(TIMER *ptr,WORD time,WORD attrib)
{
	ptr->lefttime = (DWORD)(((DWORD)time)*((DWORD)attrib));
	ptr->ldtime   = (DWORD)(((DWORD)time)*((DWORD)attrib));
	ptr->on_off   = ON;
}

void Stop_Timer(TIMER *ptr)
{
	ptr->on_off  = OFF;
}

DWORD Get_Lefttime(TIMER *ptr)
{
	return ptr->lefttime;
}

void Restart_Timer(TIMER *ptr,WORD time,WORD attrib)
{
	DWORD temp;
	DWORD temp1;
	
	temp  = Get_Lefttime(ptr);
	temp1 = (DWORD)(((DWORD)time)*((DWORD)attrib));
	if(temp>=temp1)
	{
		ptr->lefttime = (DWORD)(((DWORD)time)*((DWORD)attrib));
		ptr->ldtime   = (DWORD)(((DWORD)time)*((DWORD)attrib));
	}
}

void Timer_Reduce(void)//10ms做一次//
{
	TIMER *tptr;
	
	if(Userlist==NULL)return;
	tptr = Userlist; 
	while(tptr!=NULL)
	{
		if(tptr->on_off==ON)
		{
			if(tptr->lefttime!=0)tptr->lefttime--;
		}
		tptr = tptr->next;
	}
}

void Timer_Entry(void)
{
	static TIMER *tptr;
	static uchar flag=0;
	//if(Userlist==NULL)return;
	if(flag==0)
	{
		flag = 1;
		tptr = Userlist;
	}
	//tptr = Userlist; 
	if(tptr!=NULL)
	{
		if((tptr->on_off==ON)&&(tptr->lefttime==0))
		{
			tptr->on_off = OFF;
			if(tptr->proc!=NULL)
			{
				tptr->proc();
				clr_watchdog();
			}
		}
		tptr = tptr->next;
	}
	else
	{
		tptr = Userlist;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -