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 - 未打印指针字符串的第一个字符

php - 在 IIS 7.5 中增加 php max_execution_time

algorithm - 有哪些确定性垃圾收集算法?

python - 使用YOLO实时检测,无法用OpenCV编译

c - 确定 struct 中的无符号整数值是否已设置

c - stdout/stderr 消息的约定是什么?

c - 尝试在一行中 fscanf 多个值(3 个字符串 + 整数)

javascript - 使用 jQuery 从字符串中提取日期和时间

PHP 和 MySQL 为相同的时间戳返回不同的日期

Python实时键盘输入