-1

据我所知,“时间函数”通常取决于平台。我使用的是 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 的频率下在高低之间切换 - 不过对此不确定。编辑:我的意思是兆赫

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

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

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

4

1 回答 1

0

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

我不知道 delayMicroseconds 是如何实现的,但是如果您实际上正在使程序处于休眠状态,则您几乎无法控制何时重新唤醒进程。还要知道,一旦操作系统“开始”安排工作,您的进程可能会进入睡眠状态。

于 2014-07-15T19:14:09.700 回答