122 lines
3.3 KiB
ReStructuredText
122 lines
3.3 KiB
ReStructuredText
.. _nothread:
|
|
|
|
Operation without Threads
|
|
#########################
|
|
|
|
Thread support is not necessary in some applications:
|
|
|
|
* Bootloaders
|
|
* Simple event-driven applications
|
|
* Examples intended to demonstrate core functionality
|
|
|
|
Thread support can be disabled by setting
|
|
:kconfig:option:`CONFIG_MULTITHREADING` to ``n``. Since this configuration has
|
|
a significant impact on Zephyr's functionality and testing of it has
|
|
been limited, there are conditions on what can be expected to work in
|
|
this configuration.
|
|
|
|
What Can be Expected to Work
|
|
****************************
|
|
|
|
These core capabilities shall function correctly when
|
|
:kconfig:option:`CONFIG_MULTITHREADING` is disabled:
|
|
|
|
* The :ref:`build system <application>`
|
|
|
|
* The ability to boot the application to ``main()``
|
|
|
|
* :ref:`Interrupt management <interrupts_v2>`
|
|
|
|
* The system clock including :c:func:`k_uptime_get`
|
|
|
|
* Timers, i.e. :c:func:`k_timer`
|
|
|
|
* Non-sleeping delays e.g. :c:func:`k_busy_wait`.
|
|
|
|
* Sleeping :c:func:`k_cpu_idle`.
|
|
|
|
* Pre ``main()`` drivers and subsystems initialization e.g. :c:macro:`SYS_INIT`.
|
|
|
|
* :ref:`kernel_memory_management_api`
|
|
|
|
* Specifically identified drivers in certain subsystems, listed below.
|
|
|
|
The expectations above affect selection of other features; for example
|
|
:kconfig:option:`CONFIG_SYS_CLOCK_EXISTS` cannot be set to ``n``.
|
|
|
|
What Cannot be Expected to Work
|
|
*******************************
|
|
|
|
Functionality that will not work with :kconfig:option:`CONFIG_MULTITHREADING`
|
|
includes majority of the kernel API:
|
|
|
|
* :ref:`threads_v2`
|
|
|
|
* :ref:`scheduling_v2`
|
|
|
|
* :ref:`workqueues_v2`
|
|
|
|
* :ref:`polling_v2`
|
|
|
|
* :ref:`semaphores_v2`
|
|
|
|
* :ref:`mutexes_v2`
|
|
|
|
* :ref:`condvar`
|
|
|
|
* :ref:`kernel_data_passing_api`
|
|
|
|
.. contents::
|
|
:local:
|
|
:depth: 1
|
|
|
|
Subsystem Behavior Without Thread Support
|
|
*****************************************
|
|
|
|
The sections below list driver and functional subsystems that are
|
|
expected to work to some degree when :kconfig:option:`CONFIG_MULTITHREADING` is
|
|
disabled. Subsystems that are not listed here should not be expected to
|
|
work.
|
|
|
|
Some existing drivers within the listed subsystems do not work when
|
|
threading is disabled, but are within scope based on their subsystem, or
|
|
may be sufficiently isolated that supporting them on a particular
|
|
platform is low-impact. Enhancements to add support to existing
|
|
capabilities that were not originally implemented to work with threads
|
|
disabled will be considered.
|
|
|
|
Flash
|
|
=====
|
|
|
|
The :ref:`flash_api` is expected to work for all SoC flash peripheral
|
|
drivers. Bus-accessed devices like serial memories may not be
|
|
supported.
|
|
|
|
*List/table of supported drivers to go here*
|
|
|
|
GPIO
|
|
====
|
|
|
|
The :ref:`gpio_api` is expected to work for all SoC GPIO peripheral
|
|
drivers. Bus-accessed devices like GPIO extenders may not be supported.
|
|
|
|
*List/table of supported drivers to go here*
|
|
|
|
UART
|
|
====
|
|
|
|
A subset of the :ref:`uart_api` is expected to work for all SoC UART
|
|
peripheral drivers.
|
|
|
|
* Applications that select :kconfig:option:`CONFIG_UART_INTERRUPT_DRIVEN` may
|
|
work, depending on driver implementation.
|
|
|
|
* Applications that select :kconfig:option:`CONFIG_UART_ASYNC_API` may
|
|
work, depending on driver implementation.
|
|
|
|
* Applications that do not select either :kconfig:option:`CONFIG_UART_ASYNC_API`
|
|
or :kconfig:option:`CONFIG_UART_INTERRUPT_DRIVEN` are expected to work.
|
|
|
|
*List/table of supported drivers to go here, including which API options
|
|
are supported*
|