如果在millis函数中使用uint64_t类型编号,可以吗?

问题描述

我正在使用attiny微控制器和atmel工作室。而且我在项目中使用了millis函数

与millis功能相关的代码

Image is here

我正在使用以下经典代码


starttimex = millis();
endtimex = starttimex;
    
while ((endtimex - starttimex)<=60000)
{
               
    endtimex = millis();
                        
    // Action
                         
}

我不希望millis()功能在50天后重设。 我必须使用uint64_t而不是unsigned long

我的问题:

  1. 这会引起任何麻烦吗?这种情况有不利之处吗?缺点之一是内存大小。我知道这个。但是,我不知道其他缺点。

  2. 我不了解图像中timer0_overflow_count的变量。 millis是否需要这样做?

  3. 我应该对图像中uint64_t全部进行unsigned long吗?

谢谢

解决方法

如果您的时间间隔(示例代码中为60000)未超过unsigned long的范围,那么就可以了。

millis()函数不会重置,它只会翻转:)

(endtimex - starttimex)使用无符号算术可以很好地计算,即使在过渡期间也是如此。

,

我不了解图像中“ timer0_overflow_count”的变量。毫厘斯需要这个吗?

即使计时器的时间间隔不是毫秒数的精确倍数,溢出计数也用于跟踪millis的数量。例如,假设计时器每1.5毫秒关闭一次,看看它如何工作?

这会引起麻烦吗?这种情况有不利之处吗?

您可以将所需的任何类型用于millis计数器,但请记住,只要更新或读取该变量,中断就会关闭,因此从32位变为64位意味着中断的关闭时间会更长。影响系统上运行的其他中断。