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

时间:2014-07-15 17:27:54

标签: c++ linux time raspberry-pi timedelay

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

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

例如:

一条数据线控制“转换请求”引脚。该引脚必须在逻辑低电平时保持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()函数实际上挂起了程序,并且OS在等待时切换到运行另一个任务。这也不理想,因为我们最终可能会等待2微秒,也许更长。当然,切换回另一个过程毫无意义,不到1微秒。在那个时候不会做太多的事。

任何人都对如何做到这一点有任何想法? 感谢

1 个答案:

答案 0 :(得分:0)

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

我不知道如何实现delayMicroseconds,但是如果你实际上正在睡眠程序,那么你几乎无法控制你的进程被重新唤醒的时间。同样知道,一旦OS&#34;滴答&#34;你的过程无论如何都可以进入睡眠状态。安排工作。