📄 multirate.c
字号:
#define MULTIRATE_GLOBALS
#include "includes.h"
void MultiRateInit(void)
{
INT8U i;
INT16U CurrentTimeTemp;
INT16U TempVar;
INT8U *Pnt;
/*查找当前时段*/
Pnt=&TimeSliceInfo.TimeSlice[0].Minute;
CurrentTimeTemp=CurrentTime.Hour;
CurrentTimeTemp<<=8;
CurrentTimeTemp+=CurrentTime.Minute;
for(i=0;i<TimeSliceInfo.TimeSliceNum;i++)
{
TempVar=*(Pnt+1);
TempVar<<=8;
TempVar+=*Pnt;
Pnt+=3;
if(CurrentTimeTemp<TempVar)
{
break;
}
}
if((i==0)||(i==TimeSliceInfo.TimeSliceNum))
{
TimeSliceInfo.CurrentTimeSliceID=TimeSliceInfo.TimeSliceNum-1;
}
else
{
TimeSliceInfo.CurrentTimeSliceID=i-1;
}
TimeSliceInfo.NextTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
TimeSliceInfo.CurrentRateID=TimeSliceInfo.TimeSlice[TimeSliceInfo.CurrentTimeSliceID].RateID;
}
void RateNormalRunningTask(void)
{
if((CurrentTime.Hour==TimeSliceInfo.TimeSlice[TimeSliceInfo.NextTimeSliceID].Hour)&&(CurrentTime.Minute>=TimeSliceInfo.TimeSlice[TimeSliceInfo.NextTimeSliceID].Minute))
{
TimeSliceInfo.CurrentTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
TimeSliceInfo.NextTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
TimeSliceInfo.CurrentRateID=TimeSliceInfo.TimeSlice[TimeSliceInfo.CurrentTimeSliceID].RateID;
}
}
void TimeSliceSort(void)
{
INT8U i,j,change;
INT8U TempHour,TempMinute,TempRateID;
for(i=TimeSliceInfo.TimeSliceNum-1,change=1;i>0&&change;i--)
{
change=0;
for(j=0;j<i;j++)
{
if((TimeSliceInfo.TimeSlice[j].Hour>TimeSliceInfo.TimeSlice[j+1].Hour)||((TimeSliceInfo.TimeSlice[j].Hour==TimeSliceInfo.TimeSlice[j+1].Hour)&&(TimeSliceInfo.TimeSlice[j].Minute>TimeSliceInfo.TimeSlice[j+1].Minute)))
{
TempHour=TimeSliceInfo.TimeSlice[j+1].Hour;
TempMinute=TimeSliceInfo.TimeSlice[j+1].Minute;
TempRateID=TimeSliceInfo.TimeSlice[j+1].RateID;
TimeSliceInfo.TimeSlice[j+1].Hour=TimeSliceInfo.TimeSlice[j].Hour;
TimeSliceInfo.TimeSlice[j+1].Minute=TimeSliceInfo.TimeSlice[j].Minute;
TimeSliceInfo.TimeSlice[j+1].RateID=TimeSliceInfo.TimeSlice[j].RateID;
TimeSliceInfo.TimeSlice[j].Hour=TempHour;
TimeSliceInfo.TimeSlice[j].Minute=TempMinute;
TimeSliceInfo.TimeSlice[j].RateID=TempRateID;
change=1;
}
}
}
}
INT8U TimeSliceTableCheck(void)
{
INT8U i;
INT8U TempVar1,TempVar2;
TempVar1=(TimeSliceInfo.TimeSlice[0].Minute>>4)*10+(TimeSliceInfo.TimeSlice[0].Minute&0x0f);
TempVar2=(TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Minute>>4)*10+(TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Minute&0x0f);
if((TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Hour==0x23)&&(TimeSliceInfo.TimeSlice[0].Hour==0x00))//检查第一个时段和最后一个时段之间的时间间隔是否大于30分钟
{
if((TempVar2>(TempVar1+30)))
return 0;
}
for(i=0;i<TimeSliceInfo.TimeSliceNum-1;i++)//检查相邻两时段之间的时间间隔是否大于30分钟
{
TempVar2=(TimeSliceInfo.TimeSlice[i+1].Minute>>4)*10+(TimeSliceInfo.TimeSlice[i+1].Minute&0x0f);
if(TimeSliceInfo.TimeSlice[i].Hour==TimeSliceInfo.TimeSlice[i+1].Hour)
{
if((TempVar1+30)>TempVar2)
return 0;
TempVar1=TempVar2;
}
else
{
if(((TimeSliceInfo.TimeSlice[i].Hour+1)==TimeSliceInfo.TimeSlice[i+1].Hour)&&(TempVar1>(TempVar2+30)))
return 0;
}
TempVar1=TempVar2;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -