c - 高分辨率的 C 语言精确计时

标签 c time real-time

首先,我知道有很多类似的问题,并且我已经做了很多挖掘,请不要立即产生敌意(根据我的经验,如果这个网站上的人认为问题已经被问到答案,他们会非常敌对)直到你听我说完。如果答案就在那里,我还没有找到它,我不想劫持别人的问题。

话虽这么说,我正在一台基于 Linux 的微型计算机上用 C 语言工作。我一直用它来跟踪和控制电机转速,这显然需要很好的计时。我最初使用处理器时钟进行计算来跟踪毫秒级的时间,但由于各种可能非常明显的原因,这是有问题的。然后我转而使用 time.h,特别是 difftime() 函数。这是一个很好的解决方案,它使我能够准确跟踪和控制电机转速,几乎没有任何问题。不过我现在想绘制该数据。这又不是太大的问题,只是情节看起来很糟糕,因为我的时间尺度不能低于秒。

我能找到的最好的解决方案是使用 sys/time.h 和 gettimeofday() ,它可以以更高分辨率给出自纪元以来的时间。然而,据我所知,问题是没有 difftime() 类型的函数可以保持较高的时间分辨率。为什么这是一个问题?因为 difftime() 返回一个 double 值,可以轻松地用于根据旋转编码器旋转计数(旋转/(秒/60))计算 RPM,而似乎没有一种方法可以使用 gettimeofday() 作为一个来执行此操作使用 time_t 结构,另一个使用 timeval 结构。

那么有没有一种方法能够以比秒更好的分辨率准确返回两个时间之间的时间差(由自纪元以来经过的实际时间确定)?或者是否有人知道更好的方法来准确测量耗时来计算 RPM?谢谢。

最佳答案

gettimeofday 的结果转换为 double 值:

gettimeofday(&now, NULL);
double dsecs = now.tv_sec + (now.tv_usec / 1000000.0);

那么你的difftime只是其中两个dsecs的减法

关于c - 高分辨率的 C 语言精确计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387213/

相关文章:

c - IplImage 的动态数组 - 与 ‘operator=’ 错误不匹配

javascript - 仅当用户空闲 X 秒时如何使用鼠标事件进行 AJAX 调用

c++ - 时间未被计算

android - 使用 XMPP over GTalk 模拟推送通知

real-time - 手机App事件定时同步

c - 由于带有字符的输入函数 (scanf()) 存在一些问题,while 循环中的条件表达式出现奇怪的行为

c - 如何在 C 中使用 InternetGetLastResponseInfo

c++ - iOS debugBlock 宏

PYTHON 3.8 日期范围

facebook - 有效保持 Facebook 好友信息最新(可扩展)的策略