Files
nuttx/Documentation/reference/os/sleep.rst
T
donghaokun 839468f52d
Build Documentation / build-html (push) Has been cancelled
docs/sched/sched: Add documentation for different sleep interfaces
As pull request apache#17200 & apache#17368 introduced support for scheduling sleep, a documentation is needed for different sleep interfaces.
This patch adds the description for sleep interfaces currently provided in NuttX, including Scheduled sleep(nxsched_sleep()...), Signal-scheduled sleep(nxsig_sleep()...), and Busy sleep(up_udelay()).

Signed-off-by: Haokun Dong <donghaokun@lixiang.com>
2025-12-04 18:59:58 +01:00

116 lines
3.9 KiB
ReStructuredText

=====
Sleep
=====
NuttX provides three different types of sleep interfaces.
Common Sleep Interfaces
=======================
Scheduled Sleep Interfaces (tick-based)
---------------------------------------
Suspend the calling thread for a specified amount of time until the time expires
or the thread is explicitly woken up through scheduler operations.
.. c:function:: void nxsched_ticksleep(unsigned int ticks)
Suspends the calling thread from execution for the specified number of system ticks.
:param ticks: The number of system ticks to sleep.
.. c:function:: void nxsched_usleep(useconds_t usec)
Suspends the calling thread from execution for the specified number of microseconds.
:param usec: The number of microseconds to sleep.
.. c:function:: void nxsched_msleep(unsigned int msec)
Suspends the calling thread from execution for the specified number of milliseconds.
:param msec: The number of milliseconds to sleep.
.. c:function:: void nxsched_sleep(unsigned int sec)
Suspends the calling thread from execution for the specified number of seconds.
:param sec: The number of seconds to sleep.
.. c:function:: int nxsched_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
Suspends the calling thread from execution for the specified rqtp argument. This
function will return the remaining time via updating rmtp if the sleep is interrupted
by a signal.
:param rqtp: The amount of time to be suspended from execution.
:param rmtp: If the rmtp argument is non-NULL, the timespec structure referenced
by it is updated to contain the amount of time remaining.
:return: 0 (OK), or negated errno if unsuccessful.
.. c:function:: void nxsched_wakeup(struct tcb_s *tcb)
This function is used to wake up a thread that is currently in sleeping state
before its timeout expires.
:param tcb: Pointer to the TCB of the task to be awakened.
Signal-based Sleep Interfaces (timespec-based)
----------------------------------------------
Suspend the calling thread for a specified amount of time until the
time expires or a signal is delivered to the calling thread.
.. note::
Implementations are dependent on the signal framework and based on standard
timespec conversion.
.. c:function:: void nxsig_usleep(useconds_t usec)
Suspends the calling thread from execution for the specified number of microseconds.
:param usec: The number of microseconds to sleep.
.. c:function:: void nxsig_sleep(unsigned int sec)
Suspends the calling thread from execution for the specified number of seconds.
:param sec: The number of seconds to sleep.
.. c:function:: int nxsig_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
Suspends the calling thread from execution for the specified rqtp argument. This
function will return the remaining time via updating rmtp if the sleep is interrupted
by a signal.
:param rqtp: The amount of time to be suspended from execution.
:param rmtp: If the rmtp argument is non-NULL, the timespec structure referenced
by it is updated to contain the amount of time remaining.
:return: 0 (OK), or negated errno if unsuccessful.
Busy Sleep Interfaces
---------------------
Spin in a loop for the requested duration and never yield the CPU. The delay accuracy depends on
``CONFIG_BOARD_LOOPSPERMSEC``.
.. c:function:: void up_mdelay(unsigned int milliseconds)
Delay inline for the requested number of milliseconds.
:param milliseconds: The number of milliseconds to delay.
.. c:function:: void up_udelay(useconds_t microseconds)
Delay inline for the requested number of microseconds.
:param microseconds: The number of microseconds to delay.
.. c:function:: void up_ndelay(unsigned long nanoseconds)
Delay inline for the requested number of nanoseconds.
:param nanoseconds: The number of nanoseconds to delay.