2016-11-16 03:38:39 +08:00
|
|
|
.. _kernel_apis:
|
|
|
|
|
|
|
|
Kernel APIs
|
|
|
|
###########
|
|
|
|
|
|
|
|
This section contains APIs for the kernel's core services,
|
2016-12-22 21:24:02 +08:00
|
|
|
as described in the :ref:`kernel`.
|
2016-11-16 03:38:39 +08:00
|
|
|
|
|
|
|
.. important::
|
|
|
|
Unless otherwise noted these APIs can be used by threads, but not by ISRs.
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
:depth: 1
|
|
|
|
:local:
|
|
|
|
:backlinks: top
|
|
|
|
|
2017-12-01 06:44:16 +08:00
|
|
|
.. comment
|
|
|
|
not documenting
|
|
|
|
.. doxygengroup:: kernel_apis
|
|
|
|
|
2016-11-16 03:38:39 +08:00
|
|
|
Threads
|
|
|
|
*******
|
|
|
|
|
|
|
|
A thread is an independently scheduled series of instructions that implements
|
|
|
|
a portion of an application's processing. Threads are used to perform processing
|
|
|
|
that is too lengthy or too complex to be performed by an ISR.
|
|
|
|
(See :ref:`threads_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: thread_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Workqueues
|
|
|
|
**********
|
|
|
|
|
|
|
|
A workqueue processes a series of work items by executing the associated
|
|
|
|
functions in a dedicated thread. Workqueues are typically used by an ISR
|
|
|
|
or high-priority thread to offload non-urgent processing.
|
|
|
|
(See :ref:`workqueues_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: workqueue_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Clocks
|
|
|
|
******
|
|
|
|
|
|
|
|
Kernel clocks enable threads and ISRs to measure the passage of time
|
|
|
|
with either normal and high precision.
|
|
|
|
(See :ref:`clocks_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: clock_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Timers
|
|
|
|
******
|
|
|
|
|
|
|
|
Timers enable threads to measure the passage of time, and to optionally execute
|
|
|
|
an action when the timer expires.
|
|
|
|
(See :ref:`timers_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: timer_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Memory Slabs
|
|
|
|
************
|
|
|
|
|
|
|
|
Memory slabs enable the dynamic allocation and release of fixed-size
|
|
|
|
memory blocks.
|
|
|
|
(See :ref:`memory_slabs_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: mem_slab_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Memory Pools
|
|
|
|
************
|
|
|
|
|
|
|
|
Memory pools enable the dynamic allocation and release of variable-size
|
|
|
|
memory blocks.
|
|
|
|
(See :ref:`memory_pools_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: mem_pool_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Heap Memory Pool
|
|
|
|
****************
|
|
|
|
|
|
|
|
The heap memory pools enable the dynamic allocation and release of memory
|
|
|
|
in a :cpp:func:`malloc()`-like manner.
|
|
|
|
(See :ref:`heap_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: heap_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Semaphores
|
|
|
|
**********
|
|
|
|
|
|
|
|
Semaphores provide traditional counting semaphore capabilities.
|
|
|
|
(See :ref:`semaphores_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: semaphore_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Mutexes
|
|
|
|
*******
|
|
|
|
|
|
|
|
Mutexes provide traditional reentrant mutex capabilities
|
|
|
|
with basic priority inheritance.
|
|
|
|
(See :ref:`mutexes_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: mutex_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Alerts
|
|
|
|
******
|
|
|
|
|
2017-05-10 06:38:30 +08:00
|
|
|
Alerts enable an application to perform asynchronous signaling,
|
2016-11-16 03:38:39 +08:00
|
|
|
somewhat akin to Unix-style signals.
|
|
|
|
(See :ref:`alerts_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: alert_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Fifos
|
|
|
|
*****
|
|
|
|
|
|
|
|
Fifos provide traditional first in, first out (FIFO) queuing of data items
|
|
|
|
of any size.
|
|
|
|
(See :ref:`fifos_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: fifo_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Lifos
|
|
|
|
*****
|
|
|
|
|
|
|
|
Lifos provide traditional last in, first out (LIFO) queuing of data items
|
|
|
|
of any size.
|
|
|
|
(See :ref:`lifos_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: lifo_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Stacks
|
|
|
|
******
|
|
|
|
|
|
|
|
Stacks provide traditional last in, first out (LIFO) queuing of 32-bit
|
|
|
|
data items.
|
|
|
|
(See :ref:`stacks_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: stack_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2017-12-01 06:44:16 +08:00
|
|
|
Queues
|
|
|
|
******
|
|
|
|
|
|
|
|
.. doxygengroup:: queue_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2016-11-16 03:38:39 +08:00
|
|
|
Message Queues
|
|
|
|
**************
|
|
|
|
|
|
|
|
Message queues provide a simple message queuing mechanism
|
|
|
|
for fixed-size data items.
|
|
|
|
(See :ref:`message_queues_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: msgq_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Mailboxes
|
|
|
|
*********
|
|
|
|
|
|
|
|
Mailboxes provide an enhanced message queuing mechanism
|
|
|
|
for variable-size messages.
|
|
|
|
(See :ref:`mailboxes_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: mailbox_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Pipes
|
|
|
|
*****
|
|
|
|
|
|
|
|
Pipes provide a traditional anonymous pipe mechanism for sending
|
|
|
|
variable-size chunks of data, in whole or in part.
|
|
|
|
(See :ref:`pipes_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: pipe_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2017-12-01 06:44:16 +08:00
|
|
|
Asynchronous Polling
|
|
|
|
********************
|
|
|
|
|
|
|
|
.. doxygengroup:: poll_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2016-11-16 03:38:39 +08:00
|
|
|
Interrupt Service Routines (ISRs)
|
|
|
|
*********************************
|
|
|
|
|
|
|
|
An interrupt service routine is a series of instructions that is
|
|
|
|
executed asynchronously in response to a hardware or software interrupt.
|
|
|
|
(See :ref:`interrupts_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: isr_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Atomic Services
|
|
|
|
***************
|
|
|
|
|
|
|
|
The atomic services enable multiple threads and ISRs to read and modify
|
|
|
|
32-bit variables in an uninterruptible manner.
|
|
|
|
(See :ref:`atomic_v2`.)
|
|
|
|
|
|
|
|
.. important::
|
|
|
|
All atomic services APIs can be used by both threads and ISRs.
|
|
|
|
|
|
|
|
.. doxygengroup:: atomic_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2017-12-01 06:44:16 +08:00
|
|
|
Profiling
|
|
|
|
*********
|
|
|
|
|
|
|
|
.. doxygengroup:: profiling_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
2016-11-16 03:38:39 +08:00
|
|
|
Floating Point Services
|
|
|
|
***********************
|
|
|
|
|
|
|
|
The floating point services enable threads to use a board's floating point
|
|
|
|
registers.
|
|
|
|
(See :ref:`float_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: float_apis
|
|
|
|
:project: Zephyr
|
|
|
|
|
|
|
|
Ring Buffers
|
|
|
|
************
|
|
|
|
|
|
|
|
Ring buffers enable simple first in, first out (FIFO) queuing
|
|
|
|
of variable-size data items.
|
|
|
|
(See :ref:`ring_buffers_v2`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: ring_buffer_apis
|
|
|
|
:project: Zephyr
|
2017-07-07 20:29:30 +08:00
|
|
|
:content-only:
|
|
|
|
|
|
|
|
Memory Domain
|
|
|
|
*************
|
|
|
|
|
|
|
|
A memory domain contains some number of memory partitions. Threads can
|
|
|
|
specify the range and attribute (access permission) for memory partitions
|
|
|
|
in a memory domain. Threads in the same memory domain have the
|
|
|
|
same access permissions to the memory partitions belong to the
|
|
|
|
memory domain.
|
|
|
|
(See :ref:`memory_domain`.)
|
|
|
|
|
|
|
|
.. doxygengroup:: mem_domain_apis
|
|
|
|
:project: Zephyr
|