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

📄 jwl-gtf_timer.c

📁 基于arm核的RTOS
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************************
*                                                JWL-GTF						*
*                                           实时多任务操作系统						*
*					     								*
*      				              作者:JWL-GTF			                        *
*  					     日期:2004/04/27                                            *
*					 修改日期:2004/04/27						*
*                                       								*
*                                       功能说明:时间/定时器管理					*
*********************************************************************************************************/

#include "JWL-GTF.H"

/*设定系统时间信息*/
#define _jwl_gtf_BuildSet(Param,bit,check)\
jwl_gtf_##bit## jwl_gtf_Set##Param##(jwl_gtf_##bit## *##Param##)\
{\
#define jwl_gtf_Check	##check##
#if jwl_gtf_Check==jwl_gtf_CheckYear
	if(*##Param##<0)
		return jwl_gtf_InCorrect;
#else if jwl_gtf_Check==jwl_gtf_CheckMonth
	if(##Param##<0&&##Param##>12)
		return jwl_gtf_InCorrect;
#else if jwl_gtf_Check==jwl_gtf_CheckDay
	jwl_gtf_u8 rMonth[3];
	jwl_gtf_u8 rYear=jwl_gtf_Year;;
	strcpy(rMonth,"%d\0",jwl_gtf_Month);
	if(jwl_gtf_Year==0||jwl_gtf_Month==0)
		return jwl_gtf_YorNFir;
	switch(rMonth)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
		case 11:
			if(##Param##<0&&##Param##>31)
				return jwl_gtf_InCorrect;
			break;
		case 4:
		case 6:
		case 8:
		case 10:
		case 12:
			if(#Param##<0&&##Param##>30)
				return jwl_gtf_InCorrect;
			break;
		default:
			if((rYear/4)*4==rYear)
			{
				if((rYear/100)*100==rYear)
				{
					if((rYear/400)*400==rYear)
					{
						if(##Param##<0&&##Param##>29)
							return 	jwl_gtf_InCorrect
					}
					else
					{
						if(##Param##<0&&##Param##>28)
							return 	jwl_gtf_InCorrect	
					}
				}
				else
				{
					if(##Param##<0&&##Param##>29)
						return 	jwl_gtf_InCorrect
				}		
				
			}
			else
			{
				if(##Param##<0&&##Param##>29)
					return 	jwl_gtf_InCorrect				
			}
			break;		
	}
#else if jwl_gtf_Check==jwl_gtf_CheckHour
	if(##Param##<0&&##Param##>24)
		return 	jwl_gtf_InCorrect		
#else if jwl_gtf_Check==jwl_gtf_CheckMin
	if(##Param##<0&&##Param##>59)
		return 	jwl_gtf_InCorrect	
#else if jwl_gtf_Check==jwl_gtf_CheckSec
	if(##Param##<0&&##Param##>59)
		return 	jwl_gtf_InCorrect	
#else if jwl_gtf_Check==jwl_gtf_CheckmSec
	if(##Param##<0&&##Param##>999)
		return 	jwl_gtf_InCorrect	
#else if jwl_gtf_Check==jwl_gtf_ChecknSec
	if(##Param##<0&&##Param##>1000000-1)
		return 	jwl_gtf_InCorrect	
#else 
#error	"Value of Check is incorrect!	
#undef   jwl_gtf_Check	
	jwl_gtf_##Param##=*##Param##;\
	retrurn jwl_gtf_jwl_Noerror;\
}

/*返回系统时间信息*/
#define _jwl_gtf_BuildGet(Param,bit)\
jwl_gtf_##bit## jwl_gtf_Get##Param##()\
{\
	return jwl_gtf_##Param##;\
}

/********************************************************************************************************
*                                        jwl_gtf_SetYear						*
* 描述:设定系统的时间信息										*
* 返回:        参看JWL-GTF_error.h									*
*********************************************************************************************************/
_jwl_gtf_BuildSet(Year,u8,jwl_gtf_CheckYear)
_jwl_gtf_BuildSet(Month,u8,jwl_gtf_CheckMonth)
_jwl_gtf_BuildSet(Day,u8,jwl_gtf_CheckDay)
_jwl_gtf_BuildSet(Hour,u8,jwl_gtf_CheckHour)
_jwl_gtf_BuildSet(Min,u8,jwl_gtf_CheckMin)
_jwl_gtf_BuildSet(Sec,u8,jwl_gtf_CheckSec)
_jwl_gtf_BuildSet(mSec,u16,jwl_gtf_CheckmSec)
_jwl_gtf_BuildSet(nSec,u32,jwl_gtf_ChecknSec)

/********************************************************************************************************
*                                        jwl_gtf_GtfYear						*
* 描述:得到系统的时间信息										*
* 返回:        		返回的年份									*
*********************************************************************************************************/
_jwl_gtf_BuildGet(Year,u8)
_jwl_gtf_BuildGet(Month,u8)
_jwl_gtf_BuildGet(Day,u8)
_jwl_gtf_BuildGet(Hour,u8)
_jwl_gtf_BuildGet(Min,u8)
_jwl_gtf_BuildGet(Sec,u8)
_jwl_gtf_BuildGet(mSec,u16)
_jwl_gtf_BuildGet(nSec,u32)

/********************************************************************************************************
*                                        jwl_gtf_SetTimeInfo						*
* 描述:设定系统的时间信息										*
* 参数:Info		:要设定时间信息									*
* 返回:        参看JWL-GTF_error.h									*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_SetTimeInfo(struct jwl_gtf_Time *jwl_gtf_TimeInfo)
{
	jwl_gtf_u8 rMonth[3];
	if(jwl_gtf_TimeInfo->jwl_gtf_Year<0)
		return jwl_gtf_InCorrect;
	if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month>12)
		return jwl_gtf_InCorrect;
	sprintf(rMonth,"%s\0",jwl_gtf_TimeInfo->jwl_gtf_Month);
	switch(rMonth)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
		case 11:
			if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month<0)
				return jwl_gtf_InCorrect;
			break;
		case 4:
		case 6:
		case 8:
		case 10:
		case 12:
			if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month<0>30)
				return jwl_gtf_InCorrect;
			break;
		default:
			if((rYear/4)*4==rYear)
			{
				if((rYear/100)*100==rYear)
				{
					if((rYear/400)*400==rYear)
					{
						if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month>29)
							return 	jwl_gtf_InCorrect
					}
					else
					{
						if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month>28)
							return 	jwl_gtf_InCorrect	
					}
				}
				else
				{
					if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month>29)
						return 	jwl_gtf_InCorrect
				}		
				
			}
			else
			{
				if(jwl_gtf_TimeInfo->jwl_gtf_Month<0&&jwl_gtf_TimeInfo->jwl_gtf_Month>29)
					return 	jwl_gtf_InCorrect				
			}
			break;
	}
	if(jwl_gtf_TimeInfo->jwl_gtf_Hour<0&&jwl_gtf_TimeInfo->jwl_gtf_Hour>59)
		return jwl_gtf_InCorrect;
	if(jwl_gtf_TimeInfo->jwl_gtf_Min<0&&jwl_gtf_TimeInfo->jwl_gtf_Min>59)
		return jwl_gtf_InCorrect;
	if(jwl_gtf_TimeInfo->jwl_gtf_Sec<0&&jwl_gtf_TimeInfo->jwl_gtf_Sec<0)
		return jwl_gtf_InCorrect;
	if(jwl_gtf_TimeInfo->jwl_gtf_mSec<0&&jwl_gtf_TimeInfo->jwl_gtf_Sec>999)
		return jwl_gtf_InCorrect;
	if(jwl_gtf_TimeInfo->jwl_gtf_nSec<0&&jwl_gtf_TimeInfo->jwl_gtf_nSec>1000000-1)
		return jwl_gtf_InCorrect;
	jwl_gtf_Year=jwl_gtf_TimeInfo->jwl_gtf_Year; 
	jwl_gtf_Month=jwl_gtf_TimeInfo->jwl_gtf_Month;
	jwl_gtf_Day=jwl_gtf_TimeInfo->jwl_gtf_Day;
	jwl_gtf_Hour=jwl_gtf_TimeInfo->jwl_gtf_Hour;
	jwl_gtf_Min=jwl_gtf_TimeInfo->jwl_gtf_Min;
	jwl_gtf_Sec=jwl_gtf_TimeInfo->jwl_gtf_Sec;
	jwl_gtf_mSec=jwl_gtf_TimeInfo->jwl_gtf_mSec;
	jwl_gtf_nSec=jwl_gtf_TimeInfo->jwl_gtf_nSec;
	return jwl_gtf_Noerror;	
}

/********************************************************************************************************
*                                        jwl_gtf_GetTimeInfo						*
* 描述:设定系统的时间信息										*
* 返回:        系统相关时间信息										*
*********************************************************************************************************/
jwl_gtf_Time jwl_gtf_GetTime()
{
	jwl_gtf_Time Info;
	Info.jwl_gtf_Year=jwl_gtf_Year;
	Info.jwl_gtf_Month=jwl_gtf_Month;
	Info.jwl_gtf_Day=jwl_gtf_Day;
	Info.jwl_gtf_Hour=jwl_gtf_Hour;
	Info.jwl_gtf_Min=jwl_gtf_Min;
	Info.jwl_gtf_Sec=jwl_gtf_Sec;
	Info.jwl_gtf_mSec=jwl_gtf_mSec;
	Info.jwl_gtf_nSec=jwl_gtf_nSec;
	return Info;
}

/********************************************************************************************************
*                                        jwl_gtf_SetDiviRate						*
* 描述:设定系统的时间分辨率										*
* 参数:RateInfo		:设定的分辨率									*
* 返回:        		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_SetdiviRate(jwl_jwl_gtf_u32	*RateInfo)
{
	if(*RateInfo<0)
		return jwl_gtf_InCorrect;
	jwl_gtf_ResInfo.dividend=1000000;
	jwl_gtf_ResInfo.divisor=*RateInfo;
	return jwl_gtf_NOerror;
}

/********************************************************************************************************
*                                        jwl_gtf_GetDiviRate						*
* 描述:设定系统的时间分辨率										*
* 返回:RateInfo		:系统返回的分辨率								*
*********************************************************************************************************/
jwl_gtf_u32 jwl_gtf_GetdiviRate()
{
	return jwl_gtf_ResInfo.divisor;	
}

/********************************************************************************************************
*                                        jwl_gtf_TimerFreeInit						*
* 描述:系统定时器初始化											*
* 返回:		:jwl_gtf_void										*
*********************************************************************************************************/
_jwl_gtf_BuildFreeLinkInit(Timer,jwl_gtf_TimerCout)

/********************************************************************************************************
*                                        jwl_gtf_InitTimer						*
* 描述:系统定时器初始化											*
* 返回:RateInfo		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_void jwl_gtf_InitTimer()
{
	jwl_gtf_UseableCount=jwl_gtf_TimerCout;
	jwl_gtf_Useable=jwl_gtf_NULL;
	jwl_gtf_TimerID=0;
	jwl_gtf_TimerFreeInit();
	jwl_gtf_TimerFree=&jwl_gtf_Timer[0];
	return;
}

/********************************************************************************************************
*                                        jwl_gtf_GetUseTimerCount					*
* 描述:系统可用的定时器信息										*
* 返回:RateInfo		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_GetUseTimerCount()
{
	return 	jwl_gtf_UseableCount;
}

/********************************************************************************************************
*                                        jwl_gtf_GetTotalTimerCount					*
* 描述:系统总共的定时器信息										*
* 返回:RateInfo		:参看JWL-GTF_error.h								*
*********************************************************************************************************/
jwl_gtf_u8 jwl_gtf_GetTotalTimerCount()
{
	return 	jwl_gtf_TimerCout;
}

/********************************************************************************************************
*                                        jwl_gtf_InserTimerHead						*
* 描述:系统定时器插入链表头										*
*参数:		a:要被插入的链表头									*
*		b:要插入的定时器指针									*
* 返回:		 :jwl_gtf_void										*
*********************************************************************************************************/
_jwl_gtf_BuildInsertLinkHead(Timer,jwl_gtf_Timer)

/********************************************************************************************************
*                                        jwl_gtf_InserTimerTail						*
* 描述:系统定时器插入链表尾										*
*参数:		a:要被插入的链表尾									*
*		b:要插入的定时器指针									*
* 返回:		 :jwl_gtf_void										*
*********************************************************************************************************/
_jwl_gtf_BuildInsertLinkTail(Timer,jwl_gtf_Timer)

/********************************************************************************************************
*                                        jwl_gtf_AddTimer						*
* 描述:创建定时器并指定入口函数										*
* 参数:	(*jwl_gtf_fun)	:入口函数									*
*       jwl_gtf_Param	:入口参数									*
*       jwl_gtf_TimOut	:定时时间									*
*       jwl_gtf_TimerID :系统返回的ID号									*
*       jwl_gtf_Timer   :系统返回时间定时器指针								*
*	jwl_gtf_Status  :定时完成时处理标志

⌨️ 快捷键说明

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