nanospin_ns()
Busy-wait without blocking for a period of time
Synopsis:
#include <time.h>
int nanospin_ns( unsigned long nsec );
Arguments:
- nsec
- The number of nanoseconds that you want to busy-wait for.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The nanospin_ns() function busy-waits for the number of nanoseconds specified in nsec, without blocking the calling thread.
Because of the nature of time measurement, the function might actually wait longer than the specified time. For more information, see the Tick, Tock: Understanding the Neutrino Microkernel's Concept of Time chapter of the QNX Neutrino Programmer's Guide.
The first time you call nanospin_ns(), the C library invokes nanospin_calibrate() with an argument of 0 (interrupts enabled), if you haven't invoked it directly first.
Returns:
- EOK
- Success.
- E2BIG
- The delay specified by nsec is greater than
500 milliseconds.
A delay of more than a few milliseconds might not work on some processors. For longer delays, use the POSIX timer_*() functions.
- EINTR
- A too-high rate of interrupts occurred during the calibration routine.
- ENOSYS
- This system's startup-* program didn't initialize the timing information necessary to use nanospin_ns().
Classification:
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | Read the Caveats |
| Signal handler | Yes |
| Thread | Yes |
Caveats:
You should use busy-waiting only when absolutely necessary for accessing hardware.
It isn't safe to call this function in an interrupt handler if nanospin_calibrate() hasn't been called yet.