使用clock_gettime在arduino中进行纳秒测量

Posted

技术标签:

【中文标题】使用clock_gettime在arduino中进行纳秒测量【英文标题】:nanosecond Measurement in arduino using clock_gettime 【发布时间】:2013-12-22 18:11:31 【问题描述】:

我使用 Arduino 和 Xbee Zg 制作了一个本地化项目,我需要使用带有 84 Mhz 时钟arduino due 板以纳秒分辨率测量时间arduino 1.5.2 IDE

我正在尝试使用 clock_gettime 函数,我已经包含了 time.h,但我得到了相同的结果 编译错误 clock_gettime 未在此范围内声明

这只是我的 Distance_Measurement.c 文件的一部分

#include "Distance_Measurement.h"
#include "time.h"
struct timespec start, stop;

bool Start_Time()

 if(clock_gettime(CLOCK_REALTIME,&start) == -1)
    return false;
 else 
    return true;


bool Stop_Time()

  if(clock_gettime(CLOCK_REALTIME,&stop) == -1)
    return false;
  else 
    return true;


double Cal_Time_Nano()
 
    return (stop_time.tv_nsec - start_time.tv_nsec);

请帮帮我

【问题讨论】:

作为参考,84 MHz =~= 11.9 ns/cycle。您根本无法获得真正的纳秒分辨率,只是基于 11.9ns 滴答声的近似值(即使是这样)。 长镜头,但看到 GCC 首先在包含当前文件的目录中查找使用 #include "file" 请求的标头,然后在 -iquote 选项指定的目录中查找,然后在相同的地方,它会寻找带有尖括号的标头。例如,如果 /usr/include/sys/stat.h 包含#include "types.h",则 GCC 首先在 /usr/include/sys 中查找 types.h,然后在其通常的搜索路径中查找。,检查您的-iquote 选项,或尝试#include <time.h> 是的,我知道信号在 3.3 ns 内传播 1m,所以我会得到一个误差 +- 4m 的测量距离,这是可以接受的 我第一次使用 #include 我遇到了同样的错误,我发现 Visual Studio 在 arduino gcc 中包含了 anther time.h 而不是 time.h 所以我复制了最后一个并粘贴它使用我的距离测量库到 arduino 库路径 @PrinceOfEgy:由于您使用的是 Visual Studio:例如,IDE 是否会自动完成 clock_gettime 函数?如果没有,请查看包含的 time.h 文件,并比较两者,也许它们包含一些 Microsoft 衍生版本的时间标头...它是否使用命名空间,在这种情况下,您是处理 C++ 头文件...您能否指定包含的头文件与您实际尝试使用的头文件之间的差异?您是否可以访问 *NIX 系统,并且您的代码是否在那里编译?你包括stdfax.h吗? 【参考方案1】:

我第一次使用#include 我遇到了同样的错误我发现 Visual Studio 在 arduino gcc 中包含了 anther time.h 而不是 time.h 所以我复制了最后一个并将其粘贴到我的距离测量库中的 arduino 库路径– PrinceOfEgy

【讨论】:

以上是关于使用clock_gettime在arduino中进行纳秒测量的主要内容,如果未能解决你的问题,请参考以下文章

使用 ICC 在 Linux 中未定义的对 clock_gettime() 的引用

c++ clock_gettime() 和夏令时

OpenCL clock_gettime vs 内核分析:奇怪的结果

在Linux上确定clock_gettime分辨率的正确方法

clock_gettime() 没有给出正确的输出[重复]

为什么在重复调用clock_gettime时会看到400x异常值时序?