时钟可能会折叠。
previousclock = millis()可能会在折叠前陷入高值。您可以扩展测试以包括(currentmilis< previousmillis)加/减一些软糖因子的情况。
BTW它使用了ignas的源代码(OP源代码在没有注册的情况下无法读取,我不想注册)
编辑:我从wakkerbot复制了下面的片段,并对其进行了一些编辑。它只是为了
演示了如何使你的last_action时间戳停留在int间隔的顶部(如果bump值不是int_max的除数)
您可以稍微简化上面/下面的逻辑,因为您只对内部/外部间隔测试感兴趣。 Stamp的typedef当然应该适应millis()(unsigned long?)的类型,并删除fakemillis(),并用millis()替换它的引用。
#include
#define STAMP_INSIDE 0
#define STAMP_BELOW -1
#define STAMP_ABOVE 1
#define STAMP_BEYONDO -1
/* Intentionally very small, for fast wraparound
** Intentionally signed to stress test the logig.
*/
typedef signed char Stamp;
/* fake clock, returns incrementing value, but folds around
*/
Stamp fakemillis(void)
{
static Stamp ticker =0;
return ticker