nanospin()

Ожидать без блокирования потока в течение заданного промежутка времени

Прототип:

#include <time.h>
int nanospin( const struct timespec *when );

Аргументы:

when
Указатель на struct timespec, которая определяет время ожидания. Это значение определяет продолжительность, а не абсолютное время.

Библиотека:

libc

Описание:

Функция nanospin() занимает процессор в течение времени, указанного в аргументе when, без блокировки вызываемого потока. (Поток не удаляется из списка готовых к работе потоков.) Функция представляет собой цикл do...while.


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

Из-за способа измерения времени функция может ожидать дольше заданного времени.


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

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

EOK
Успешное завершение.
E2BIG
Задержка, определяемая when, превышает 500 миллисекунд.

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

EINTR
Во время процедуры калибровки возникло слишком большое количество прерываний.
ENOSYS
Системный startup-* не инициализировал информацию о времени, необходимую для использования nanospin().

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

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

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

Предостережения:

Необходимо использовать ожидание только тогда, когда это абсолютно необходимо для доступа к оборудованию.

Вызывать эту функцию из обработчика прерываний небезопасно, если функция nanospin_calibrate() еще не была вызвана.

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

nanosleep(), nanospin_calibrate(), nanospin_count(), nanospin_ns(), nanospin_ns_to_count(), sched_yield(), sleep(), timer_create(), struct timespec




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