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

📄 timer.c

📁 IEEE1588 Protocol,用于同步局域网各站点时间
💻 C
字号:
/* timer.c */#include "../ptpd.h"#define TIMER_INTERVAL 1int elapsed;void catch_alarm(int sig){  elapsed += TIMER_INTERVAL;    DBGV("catch_alarm: elapsed %d\n", elapsed);}void initTimer(void){  struct itimerval itimer;    DBG("initTimer\n");    signal(SIGALRM, SIG_IGN);    elapsed = 0;  itimer.it_value.tv_sec = itimer.it_interval.tv_sec = TIMER_INTERVAL;  itimer.it_value.tv_usec = itimer.it_interval.tv_usec = 0;    signal(SIGALRM, catch_alarm);  setitimer(ITIMER_REAL, &itimer, 0);}void timerUpdate(IntervalTimer *itimer){  int i, delta;    delta = elapsed;  elapsed = 0;    if(delta <= 0)    return;    for(i = 0; i < TIMER_ARRAY_SIZE; ++i)  {    if(itimer[i].interval > 0 && (itimer[i].left -= delta) <= 0)    {      itimer[i].left = itimer[i].interval;      itimer[i].expire = TRUE;      DBGV("timerUpdate: timer %u expired\n", i);    }  }}void timerStop(UInteger16 index, IntervalTimer *itimer){  if(index >= TIMER_ARRAY_SIZE)    return;    itimer[index].interval = 0;}void timerStart(UInteger16 index, UInteger16 interval, IntervalTimer *itimer){  if(index >= TIMER_ARRAY_SIZE)    return;    itimer[index].expire = FALSE;  itimer[index].left = interval;  itimer[index].interval = itimer[index].left;    DBGV("timerStart: set timer %d to %d\n", index, interval);}Boolean timerExpired(UInteger16 index, IntervalTimer *itimer){  timerUpdate(itimer);    if(index >= TIMER_ARRAY_SIZE)    return FALSE;    if(!itimer[index].expire)    return FALSE;    itimer[index].expire = FALSE;    return TRUE;}

⌨️ 快捷键说明

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