在几秒钟内创建递减计时器的最简单最简单的方法是什么?
我使用8位微控制器,不能使用浮点或密集过程。我需要一个非常有效的计时器。
答案 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位控制器都有几个。根据您的需要分配其中一个计时器,或使用已知周期的现有计时器。它尽可能高效。
每次计时器滴答时,都会收到中断。这可能是每秒或更频繁。更新一个保持时间的变量,并从中断处理程序返回(或者如果挂钩用于其他需要的计时器,则将控制传递给链式处理程序)。
如果时间保持变量超过阈值,那就是你的事件;采取你的行动。请确保不要将此操作花费太长时间,并参考控制器参考有关中断处理程序中不允许的操作。