【发布时间】:2021-10-22 17:19:14
【问题描述】:
简介:
假设您有两个 16 位无符号数,其值可以从 0 到 65535。
假设我们有一个数组arr[2],它位于一个while循环中:
i = 0;
while(1){
arr[i++] = Get_New_Value();
if(i == 2)
i = 0;
}
这很容易说可以测量,只需更改 while 循环,或读取它。
但假设您无法使用此 while 循环。您只有arr[2] 的读取权限,您的目标是找出arr[0] 和arr[1] 之间的区别。
我可以通过查看arr[0] < arr[1] 来衡量差异,然后您可以通过arr[1] - arr[0] 找到差异。或者如果arr[0] > arr[1],那么你就做arr[0] - arr[1]。
但是现在听。函数Get_New_Value(); 是一个计数器,它从0 计数到65535 然后重新开始,这意味着如果arr[0] = 60000 和arr[1] = 2000,这意味着差异是65535 - arr[0] + arr[1] + 1,因为65536 实际上是0 用于无符号 16 位,65537 是 1。一切重新开始。
问题:
我不知道哪个索引具有最新更新的值,因为 arr 将其值插入,因为它是一个循环缓冲区。
问题:
如果我不知道哪个索引具有最新的更新值,我有什么办法可以找到具有两个索引值的arr 之间的区别?
其他信息:
计数器Get_New_Value(); 从0 变为65535 需要6.5535 秒
我将如何解决这个问题:
我会从arr[0] 和arr[1] 中取一个值并相互比较。我知道自从我得到这些值 arr[0] 和 arr[1] 以来已经不到 6.5535 秒。
所以我只是比较一下
65535 - arr[0] + arr[1] + 1 或 65535 - arr[1] + arr[0] + 1 取决于哪个比另一个大。
【问题讨论】:
-
连续调用
Get_New_Value之间是否存在最大差异? -
为什么不知道哪个索引具有最新的更新值很重要?
-
@MrYui 在连续调用之间
Get_New_Value的返回值可以改变多少? -
@MrYui 那么问题是每次调用
Get_New_Value之间可以经过多少秒? -
这是传感器数据采集中的常见问题。如果计数器以 ~1Hz 的频率递增,您可以轻松做到这一点