Есть raspberry pi zero v1.3 с установленной raspbian. Пишу передатчик сигнала. Нужно как можно быстрее передавать импульсы (1 или 0 на пине), однако с определенными задержками. Код на Си, библиотека для работы с gpio - bcm2835. 1. Существует ли функция, которая может организовать задержку, например, в 100 наносекунд? 2. Какими средствами можно добиться максимально быстрой и стабильной работы кода?
Вот задержка в наносекундах http://all-ht.ru/inf/prog/c/func/nanosleep.html А что значит Ваш пункт 2?
Пункт 2 означает, что плата должна как можно больше процессорного времени уделять программе, и сам код должен работать быстро, а именно функции задержки, т.к. без задержек сигнал передается и программа отрабатывает с запасом по скорости - мне же нужно замедлить код чуть-чуть, однако он замедляется слишком сильно из-за системных функций задержек. Я попробовал использовать clock_nanosleep() как функцию задержки между битами сигнала http://ru.manpages.org/clock_nanosleep/2. На маленьких задержках (<100мс) эта функция уже не работает - она сама по себе тратит больше времени, чем нужно задержать. Так что она мне не годится. Ее код: Код (C++): #define SLEEP_NS(mydelay) \ clock_gettime(CLOCK_MONOTONIC, &mytime); \ mytime.tv_nsec += mydelay; \ clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &mytime, NULL); Есть 2 идеи, как можно сделать точные и небольшие по времени задержки: 1. Сколхозить и вместо функции задержки написать свою функцию с циклом, подобрав число итераций таким образом, чтобы появилась нужная задержка. 2. Использовать ассемблерную вставку nop. Подскажите, за сколько тактов процессора она выполнится на плате? Как реализовать ассемблерную вставку на линуксе на ARM? Я знаю что частота процессора 1Ггц - есть ли какая-нибудь системная константа, в которой указано это число? Частота процессора равна ровно 1-му гигагерцу?
Про nop прочитал, просто здесь:http://www.av-assembler.ru/instructions/nop.php написано, что nop может пропустить и 2 шага
Тогда Вам надо делать без ОС. В контроллере должна работать только ваша программа и никаких ОС. Автономное устройство не малина и какой-либо ПК.
На зеро она всегда строго 1 ГГц? На pi3 решил посмотреть частоту без нагрузки и под нагрузкой. Без нагрузки частота минимальная 0,6 ГГц, а под нагрузкой максимальная 1,2 ГГц.