Jiffies计数器返回大小为四个字节的无符号整数。当计数器达到最大值时,它将再次从0重新开始。我将用旧值减去最新值以获取持续时间。因此,在旧值是最大值而新值大于零的情况下,我应该如何考虑呢?这样我会得到错误的持续时间?
最佳答案
您无需执行任何操作,您将拥有正确的持续时间(只要您使用四个字节的无符号整数进行所有计算)。这就是实现为固定宽度二进制算术的整数值的魔力。
这是一个8位无符号整数的示例。您实际上可以看到,即使有溢出,差异仍然有效。
236 - 221 = 11101100 - 11011101 = 11101100 + 00100011 = 00001111 = 15
251 - 236 = 11111011 - 11101100 = 11111011 + 00010100 = 00001111 = 15
10 - 251 = 00001010 - 11111011 = 00001010 + 00000101 = 00001111 = 15
25 - 10 = 00011001 - 00001010 = 00011001 + 11110110 = 00001111 = 15
...
当持续时间与计数器的最大值相比不小的时候,即当它可以大于最大值的一半时,就会出现您的单个问题。