📄 jwl-gtf_timer.c
字号:
/********************************************************************************************************
* 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 + -