C++,时间函数(Linux)-纳秒分辨率
C++, Time Functions (Linux) - Nanosecond Resolution
据我所知,"时间函数"通常依赖于平台。我使用的是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并进行繁忙的等待。
我不知道延迟微秒是如何实现的,但如果你实际上正在休眠程序,你几乎无法控制进程何时被重新唤醒。还要知道,一旦操作系统"滴答"地安排工作,你的进程可能会进入睡眠状态。
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 在linux上调试巨大的C++项目
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- c++方法参数只能在linux的发布模式下自行更改
- Windows 和 Linux 之间的相对路径分辨率差异?
- 用户空间(Linux)中是否有高分辨率时钟(我们)?
- Linux中的SDL桌面分辨率检测
- 在Linux下以编程方式更改屏幕分辨率而不使用监视器
- 毫秒级精度的 Linux/OSX 时钟分辨率
- Linux中的QPrinter分辨率错误
- linux版c++中的屏幕分辨率
- Windows(也包括OS X、Linux)上Qt中的高分辨率定期计时器
- C++,时间函数(Linux)-纳秒分辨率
- 无法在Qt 5.0.2(Linux)中使用QCamera获取相机支持的分辨率以进行图像捕获