C++,时间函数(Linux)-纳秒分辨率

C++, Time Functions (Linux) - Nanosecond Resolution

本文关键字:分辨率 Linux 时间 函数 C++      更新时间:2023-10-16

据我所知,"时间函数"通常依赖于平台。我使用的是Raspberry Pi,所以我的操作系统是Raspbian或Debian(linux(。

首先,我应该解释为什么尽可能准确地将程序的执行延迟到10纳秒的精度水平是至关重要的。我正在连接一个ADC(模数转换器(。重要的是,一旦指令被发送到设备,ADC就有时间发送逻辑信号HIGH或LOW。

例如:

一条数据线控制"转换请求"引脚。此引脚必须在20 ns内变为逻辑低电平才能启动转换请求。

另一个例子是"读取请求"引脚。该数据线必须在10 ns内变为逻辑低,以启用输出总线上的数据。

目前,我有一个程序的结构如下:(使用wiringPi库。(

return_type functionName()
{
    digitalWrite(CONVERT_RQ, LOW);
    delayMicroseconds(1); // Part of the wiringPi.h library
    digitalWrite(CONVERT_RQ, HIGH);
}

我认为删除delayMicroseconds(1);调用是不安全的,因为ADC可能会错过逻辑低脉冲。(来自digitalWrite。(我认为引脚可以在大约200 kHz的频率下在高电平和低电平之间切换——但对此不确定。编辑:我指的是MHz

延迟1微秒显然是相当浪费的。理想情况下,我愿意等待1%的时间。

据我所知,delayMicroseconds((函数实际上挂起了程序,操作系统在等待时切换到运行另一个任务。这也不理想,因为我们可能会等待2微秒,甚至更长时间。当然,在不到1微秒的时间内,切换回另一个进程是毫无意义的。在那段时间里不会做太多事情。

有人知道怎么做吗?感谢

假设您有一个兼容C++11的编译器,您可以查看<chrono>的high_resolution_clock并进行繁忙的等待。

我不知道延迟微秒是如何实现的,但如果你实际上正在休眠程序,你几乎无法控制进程何时被重新唤醒。还要知道,一旦操作系统"滴答"地安排工作,你的进程可能会进入睡眠状态。