The kernel documentation listed the memory management API pages under two different sections: 'Kernel/Kernel Services' and 'Kernel/Memory Management' -- this creates unnecessary confusion and makes it hard to look up all supported kernel memory management APIs. This commit relocates the memory management API pages under 'Kernel/Kernel Services' to 'Kernel/Memory Management' so that all memory management APIs provided by the kernel are described in one unified section. The link to the 'Kernel/Memory Management' index page is still left in the 'Kernel Services' page because it may still be helpful to look at it as part of the services provided by the Zephyr kernel -- it is just more substantial than the rest and deserves more visibility. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
121 lines
4.3 KiB
ReStructuredText
121 lines
4.3 KiB
ReStructuredText
.. _kernel_api:
|
|
|
|
Kernel Services
|
|
###############
|
|
|
|
The Zephyr kernel lies at the heart of every Zephyr application. It provides
|
|
a low footprint, high performance, multi-threaded execution environment
|
|
with a rich set of available features. The rest of the Zephyr ecosystem,
|
|
including device drivers, networking stack, and application-specific code,
|
|
uses the kernel's features to create a complete application.
|
|
|
|
The configurable nature of the kernel allows you to incorporate only those
|
|
features needed by your application, making it ideal for systems with limited
|
|
amounts of memory (as little as 2 KB!) or with simple multi-threading
|
|
requirements (such as a set of interrupt handlers and a single background task).
|
|
Examples of such systems include: embedded sensor hubs, environmental sensors,
|
|
simple LED wearable, and store inventory tags.
|
|
|
|
Applications requiring more memory (50 to 900 KB), multiple communication
|
|
devices (like Wi-Fi and Bluetooth Low Energy), and complex multi-threading,
|
|
can also be developed using the Zephyr kernel. Examples of such systems
|
|
include: fitness wearables, smart watches, and IoT wireless gateways.
|
|
|
|
Scheduling, Interrupts, and Synchronization
|
|
*******************************************
|
|
|
|
These pages cover basic kernel services related to thread scheduling and
|
|
synchronization.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
threads/index.rst
|
|
scheduling/index.rst
|
|
threads/system_threads.rst
|
|
threads/workqueue.rst
|
|
threads/nothread.rst
|
|
interrupts.rst
|
|
polling.rst
|
|
synchronization/semaphores.rst
|
|
synchronization/mutexes.rst
|
|
synchronization/condvar.rst
|
|
synchronization/events.rst
|
|
smp/smp.rst
|
|
|
|
.. _kernel_data_passing_api:
|
|
|
|
Data Passing
|
|
************
|
|
|
|
These pages cover kernel objects which can be used to pass data between
|
|
threads and ISRs.
|
|
|
|
The following table summarizes their high-level features.
|
|
|
|
=============== ============== =================== ============== ============== ================= ============== ===============================
|
|
Object Bidirectional? Data structure Data item size Data Alignment ISRs can receive? ISRs can send? Overrun handling
|
|
=============== ============== =================== ============== ============== ================= ============== ===============================
|
|
FIFO No Queue Arbitrary [1] 4 B [2] Yes [3] Yes N/A
|
|
LIFO No Queue Arbitrary [1] 4 B [2] Yes [3] Yes N/A
|
|
Stack No Array Word Word Yes [3] Yes Undefined behavior
|
|
Message queue No Ring buffer Power of two Power of two Yes [3] Yes Pend thread or return -errno
|
|
Mailbox Yes Queue Arbitrary [1] Arbitrary No No N/A
|
|
Pipe No Ring buffer [4] Arbitrary Arbitrary No No Pend thread or return -errno
|
|
=============== ============== =================== ============== ============== ================= ============== ===============================
|
|
|
|
[1] Callers allocate space for queue overhead in the data
|
|
elements themselves.
|
|
|
|
[2] Objects added with k_fifo_alloc_put() and k_lifo_alloc_put()
|
|
do not have alignment constraints, but use temporary memory from the
|
|
calling thread's resource pool.
|
|
|
|
[3] ISRs can receive only when passing K_NO_WAIT as the timeout
|
|
argument.
|
|
|
|
[4] Optional.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
data_passing/queues.rst
|
|
data_passing/fifos.rst
|
|
data_passing/lifos.rst
|
|
data_passing/stacks.rst
|
|
data_passing/message_queues.rst
|
|
data_passing/mailboxes.rst
|
|
data_passing/pipes.rst
|
|
|
|
.. _kernel_memory_management_api:
|
|
|
|
Memory Management
|
|
*****************
|
|
|
|
See :ref:`memory_management_api`.
|
|
|
|
Timing
|
|
******
|
|
|
|
These pages cover timing related services.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
timing/clocks.rst
|
|
timing/timers.rst
|
|
|
|
Other
|
|
*****
|
|
|
|
These pages cover other kernel services.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
other/atomic.rst
|
|
other/float.rst
|
|
other/version.rst
|
|
other/fatal.rst
|
|
other/thread_local_storage.rst
|