.. _nanokernel_tasks:

Task Services
#############

Concepts
********

A :dfn:`task` is a preemptible thread of execution that implements a portion of
an application's processing. It is normally used to perform processing that is
too lengthy or too complex to be performed by a fiber or an ISR.

A nanokernel application can define a single application task, known as the
*background task*, which can execute only when no fiber or ISR needs to
execute. The entry point function for the background task is :code:`main()`,
and it must be supplied by the application.

.. note::
   The background task is very different from the tasks used by a microkernel
   application; for more information see :ref:`microkernel_tasks`.


Task Lifecycle
==============

The kernel automatically starts the background task during system
initialization.

Once the background task is started, it executes forever. If the task attempts
to terminate by returning from :code:`main()`, the kernel puts the task into
a permanent idling state since the background task must always be available
to execute.


Task Scheduling
===============

The nanokernel's scheduler executes the background task only when no fiber or
ISR needs to execute; fiber and ISR executions always take precedence.

The kernel automatically saves the background task's CPU register values when
prompted for a context switch to a fiber or ISR. These values are restored
when the background task later resumes execution.


Usage
*****

Defining the Background Task
============================

The application must supply a function of the following form:

.. code-block:: c

   void main(void)
   {
       /* background task processing */
       ...
       /* (optional) enter permanent idling state */
       return;
   }

This function is used as the background task's entry point function. If a
nanokernel application does not need to perform any task-level processing,
:code:`main()` can simply do an immediate return.

The :option:`CONFIG_MAIN_STACK_SIZE` configuration option specifies
the size, in bytes, of the memory region used for the background
task's stack and for other execution context information.

APIs
****

The nanokernel provides the following API for manipulating the background task.

:cpp:func:`task_sleep()`
   Put the background task to sleep for a specified time period.
