| .. _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 Yes [5] Yes [5] 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. |
| |
| [5] ISRS can send and/or receive only when passing K_NO_WAIT as the |
| timeout argument. |
| |
| .. 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 |