Task Services

Concepts

A 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 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 Task Services.

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 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:

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, main() can simply do an immediate return.

The 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.

task_sleep()
Put the background task to sleep for a specified time period.