在几秒钟内创建计时器的最简单方法?

时间:2011-12-15 20:08:19

标签: c timer

在几秒钟内创建递减计时器的最简单最简单的方法是什么?

我使用8位微控制器,不能使用浮点或密集过程。我需要一个非常有效的计时器。

2 个答案:

答案 0 :(得分:3)

time(2)是一个标准的C函数,用于获取自纪元(1970年1月1日午夜)以来的当前时间(以秒为单位)。要制作递减计时器,您可以执行以下操作:

time_t startTime = time(NULL);

time_t timerDuration = 10;  // 10 second timer
time_t endTime = startTime + timerDuration;
while(1)
{
    time_t currTime = time(NULL);
    time_t timeLeft = endTime - currTime;

    if(timeLeft < 0)
    {
        // timer has finished
        break;
    }

    // do stuff - preferably don't spin at 100% CPU
}

如果您需要更高的精度而不是1秒的增量,则可以使用特定于平台的功能,例如gettimeofday(3)(POSIX)或GetLocalTime(Windows)。

答案 1 :(得分:1)

看起来你想要一个异步计时器。在8位控制器上,我想你没有多线程。但是你可能直接访问硬件定时器;大多数8位控制器都有几个。根据您的需要分配其中一个计时器,或使用已知周期的现有计时器。它尽可能高效。

每次计时器滴答时,都会收到中断。这可能是每秒或更频繁。更新一个保持时间的变量,并从中断处理程序返回(或者如果挂钩用于其他需要的计时器,则将控制传递给链式处理程序)。

如果时间保持变量超过阈值,那就是你的事件;采取你的行动。请确保不要将此操作花费太长时间,并参考控制器参考有关中断处理程序中不允许的操作。