准确的时间保持在C高分辨率

时间:2015-09-03 23:56:26

标签: c time real-time

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

据说我在基于linux的微型计算机上使用C语言。我一直用它来跟踪和控制电机转速,这显然需要保持良好的时间。我最初使用处理器时钟的计算来跟踪毫秒级的时间,但由于各种原因可能非常明显,这是有问题的。然后我切换到使用time.h,特别是difftime()函数。这是一个很好的解决方案,它允许我准确地跟踪和控制电机RPM几乎没有问题。但是我想现在绘制这些数据。除了因为我的时间尺度不能低于秒数之外,情节看起来很糟糕,这再次没有太大的问题。

我能找到的最佳解决方案是使用sys / time.h和gettimeofday(),它可以在更高分辨率的时间内给出时间。但是,据我所知,问题是没有difftime()类型函数可以保持更高的时间分辨率。为什么这是一个问题?因为difftime()返回一个double值,可以很容易地用来从旋转编码器旋转计数(旋转/(秒/ 60))计算RPM,而似乎没有办法用gettimeofday()作为一个使用time_t结构,另一个使用timeval结构。

那么有没有办法准确地返回两次之间的时间差(由自纪元以来的实际时间确定),其分辨率高于秒?或者,有没有人知道更准确地计算计算RPM的经过时间的方法?谢谢。

1 个答案:

答案 0 :(得分:0)

gettimeofday的结果转换为double:

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

然后,您的difftime只是其中两个dsecs

的减法