如何解决如果在millis函数中使用uint64_t类型编号,可以吗?
我正在使用attiny微控制器和atmel工作室。而且我在项目中使用了millis
函数。
与millis功能相关的代码:
我正在使用以下经典代码:
starttimex = millis();
endtimex = starttimex;
while ((endtimex - starttimex)<=60000)
{
endtimex = millis();
// Action
}
我不希望millis()
功能在50天后重设。
我必须使用uint64_t
而不是unsigned long
。
我的问题:
-
这会引起任何麻烦吗?这种情况有不利之处吗?缺点之一是内存大小。我知道这个。但是,我不知道其他缺点。
-
我不了解图像中
timer0_overflow_count
的变量。millis
是否需要这样做? -
我应该对图像中
uint64_t
的全部进行unsigned long
吗?
谢谢
解决方法
如果您的时间间隔(示例代码中为60000)未超过unsigned long
的范围,那么就可以了。
millis()函数不会重置,它只会翻转:)
(endtimex - starttimex)
使用无符号算术可以很好地计算,即使在过渡期间也是如此。
我不了解图像中“ timer0_overflow_count”的变量。毫厘斯需要这个吗?
即使计时器的时间间隔不是毫秒数的精确倍数,溢出计数也用于跟踪millis
的数量。例如,假设计时器每1.5毫秒关闭一次,看看它如何工作?
这会引起麻烦吗?这种情况有不利之处吗?
您可以将所需的任何类型用于millis计数器,但请记住,只要更新或读取该变量,中断就会关闭,因此从32位变为64位意味着中断的关闭时间会更长。影响系统上运行的其他中断。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。