nanospin_calibrate()

Выполнить калибровку перед вызовом nanospin*()

Прототип:

#include <time.h>
int nanospin_calibrate( int disable );

Аргументы:

disable
1 для отключения прерываний во время вызова nanospin_calibrate() или 0 для их включения.

Библиотека:

libc

Описание:

Функция nanospin_calibrate() выполняет калибровку для семейства функций остановки nanospin*(). При первом вызове nanospin(), nanospin_ns() или nanospin_ns_to_count() библиотека C вызывает nanospin_calibrate() с аргументом 0 (прерывания разрешены), если она не была вызвана явно.


Note: Если nanospin_calibrate() не вызывалась явно, первый вызов nanospin*() будет иметь слишком долгую задержку.

Функции nanospin*() предназначены для использования с аппаратурой, которая требует коротких временных задержек между операциями. Их следует использовать для задержки не более, чем в несколько миллисекунд. Для более долгих задержек следует использовать функции POSIX timer_*().


Прерывания, возникающие во время nanospin_calibrate(), могут нарушить ее тайминг. Если disable равен 0 (нулю), можно предотвратить эту ситуацию:

  1. позволить потоку получить привилегии ввода/вывода
  2. отключить прерывания до и после вызова nanospin_calibrate().

Если disable равен 1 (единице), код отключает прерывания до и после цикла калибровки. Вызывающий поток по-прежнему отвечает за привилегии ввода/вывода перед вызовом nanospin_calibrate().

Возвращаемое значение:

EOK
Успешное завершение.
EINTR
Во время процедуры калибровки возникло слишком большое количество прерываний.
EPERM
Процесс не имеет привилегий суперпользователя.

Примеры:

Ожидание в течение 100 наносекунд:

#include <time.h>
#include <sys/syspage.h>
int disable = 0;
unsigned long time = 100;
...
/* Wake up the hardware, then wait for it to be ready. */
if ( (nanospin_calibrate( disable )) == EOK )
nanospin_count( nanospin_ns_to_count( time ) );
else
printf ("Didn't calibrate successfully.\n");
/* Use the hardware. */
...

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

nanospin(), nanospin_count(), nanospin_ns(), nanospin_ns_to_count(), timer_create()




Предыдущий раздел: Описание API системной библиотеки