时间戳回绕
tick 差值、回绕次数与超时宏。
正在准备工具…
无符号差值
计数器只有 N 位时,时间差用无符号减法:
只要两次采样之间少于一个回绕周期, 就是实际经过的 tick 数。32 位、1 kHz 时,回绕周期约为 49.7 天;起始 0xFFFFFF00、当前 0x00000100 的差值为 512 tick,即 0.512 s。
超时比较
超时判断同样使用无符号差值:
不要直接比较 now > start,也不要把有符号差值当成时间。timeout 必须小于一个回绕周期,否则判断会失去意义。C 宏返回值使用无符号类型,编译器会在目标位宽上完成截断。
边界
起始和当前时间戳必须落在计数器位宽内,超时 tick 必须为正。页面假设两次采样之间最多发生一次回绕;如果任务可能停顿超过一个完整周期,需要额外的回绕计数或 64 位时间基。