滴答定时器中断执行函数,时间到后,执行AlarmList回调函数
//unsigned int----->TickType
TickType OsTickCounter = 1; /* zero mask as not started */
typedef TickType* TickRefType;
STATIC TickType AlarmTick[ALARM_NUM];
STATIC TickType AlarmPeriod[ALARM_NUM];
void OsTick ( void )
{
AlarmType AlarmId;
OsTickCounter ++;
if(0 == OsTickCounter)
{
OsTickCounter = 1;
}
for(AlarmId=0; AlarmId<ALARM_NUM; AlarmId++)
{
if(AlarmTick[AlarmId] > 0)
{
AlarmTick[AlarmId]--;
if(0u == AlarmTick[AlarmId])
{
AlarmList[AlarmId].main();
AlarmTick[AlarmId] = AlarmPeriod[AlarmId];
}
}
}
}
获取定时器剩余值
unsigned int GetAlarm(AlarmType AlarmId)
{
asAssert(AlarmId<ALARM_NUM);
return AlarmTick[AlarmId];
}
设置定时器:
int SetRelAlarm ( AlarmType AlarmId, TickType Increment, TickType Cycle )
{
asAssert(AlarmId<ALARM_NUM);
AlarmTick[AlarmId] = Increment;
AlarmPeriod[AlarmId] = Cycle;
return E_OK;
}
取消定时器:
int CancelAlarm ( AlarmType AlarmId )
{
asAssert(AlarmId<ALARM_NUM);
AlarmTick[AlarmId] = 0;
AlarmPeriod[AlarmId] = 0;
return E_OK;
}
初始化timer:
void OsAlarmInit ( void )
{
memset(AlarmTick,0,sizeof(AlarmTick));
memset(AlarmPeriod,0,sizeof(AlarmPeriod));
}