millis()如何将自身重置为0


14

查看该millis()函数的文档,它说:

返回自Arduino开发板开始运行当前程序以来的毫秒数。大约50天后,该数字将溢出(返回零)。

这怎么可能?Arduino是否检测到millis()溢出时将值重置为0?如果是这样,它是如何做到的?我只想知道millis()函数返回的变量到底是怎么回事。

Answers:


25

它不是的专有财产millis()。任何具有有限位数的计数器最终都将返回零。例如,一个4位数的计数计数器在之后返回零9999

在后台,变量for millis()的类型为unsigned long,在Arduino上为32位。在这种情况下,32位(二进制0和1)类似于计数计数器上的数字(0至9)。

最大值为11111111 11111111 11111111 11111111millis()到达那里后,在添加时返回零1。最大值(32个“ 1”)为2^32 - 1,等于4294967295十进制数字系统。因此,该计数器的最大值是4,294,967,295毫秒。换算为天数,您可以获得大约49.71天。

理货员


5
Windows的旧版本还以32位整数形式维持毫秒数,导致许多软件在正常运行49天后无法正常运行。
罗素·博罗戈夫

谢谢JURAJ!回答了我一直存有的疑问。已更新;)
托尼·吉尔

PS:我希望您批准这些编辑,我认为它们通过澄清几个句子结构而为您的出色回答增添了不少乐趣。
托尼·吉尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.