C ++, Time Functions (Linux) — разрешение наносекунд

Насколько я знаю, «функции времени» обычно зависят от платформы. Я использую Raspberry-Pi, поэтому моя ОС — Raspbian или Debian (linux).

Сначала я должен объяснить Зачем очень важно, чтобы я мог как можно точнее отложить выполнение программы до уровня точности десятки наносекунд. Я взаимодействую с АЦП (аналого-цифровой преобразователь). Важно, чтобы АЦП имел время для отправки логических сигналов ВЫСОКОГО или НИЗКОГО после отправки инструкций на устройство.

Например:

Одна строка данных управляет выводом «запрос преобразования». Этот вывод должен идти на низком логическом уровне в течение 20 нс, чтобы начать запрос на преобразование.

Другим примером является вывод «запрос на чтение». Эта строка данных должна иметь низкий логический уровень в течение 10 нс, чтобы активировать данные на выходной шине.

В настоящее время у меня есть программа, которая имеет следующую структуру: (Использование библиотек wiringPi.)

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

Я не думаю, что это безопасно удалить delayMicroseconds(1); звоните, так как АЦП мог пропустить низкий логический импульс. (От digitalWriteЯ думаю, что контакты могут переключаться между высокими и низкими значениями на частоте около 200 кГц, хотя и не уверены в этом. РЕДАКТИРОВАТЬ: я имею в виду МГц

Задержка на 1 микросекунду, очевидно, довольно расточительна. Я хотел бы подождать 1% этого времени, в идеале.

Насколько я знаю, функция delayMicroseconds () фактически приостанавливает работу программы, а ОС переключается на выполнение другой задачи в ожидании. Это также не идеально, так как мы можем ждать 2 микросекунды, возможно, дольше. Переключение обратно на другой процесс будет бессмысленным, конечно, менее чем за 1 микросекунду. Не получилось бы много сделать за это время.

У кого-нибудь есть идеи о том, как это можно сделать?
Спасибо

-1

Решение

Если у вас есть компилятор, совместимый с C ++ 11, вы можете проверить <chrono>high_resolution_clock и занято ожиданием.

Я не знаю, как реализовано delayMicroseconds, но если вы не спите в программе, вы практически не контролируете процесс ее запуска. Также знайте, что ваш процесс может быть приостановлен в любом случае, как только операционная система «включится» для планирования работы.

0

Другие решения


По вопросам рекламы [email protected]