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.