Task Mechanics
For the first Linux example, we reuse the Blinking LED program. This example shows how to create a task to toggle the LED at a constant rate.
The task blinkLedTask delays
for 500 ms and then toggles the green LED. The task uses an infinite
loop that calls the function usleep
to suspend for the proper amount of time. The usleep function is passed the number of
microseconds to suspend, which in this case is 50,000 ms.
After the delay function call, the blinkLedTask is blocked and put in the waiting
state. The task is put in the ready state once the time has elapsed and
then has been run by the scheduler. After the delay, the ledToggle function toggles the green
LED.
#include <unistd.h>
#include "led.h"
/**********************************************************************
*
* Function: blinkLedTask
*
* Description: This task handles toggling the green LED at a
* constant interval.
*
* Notes:
*
* Returns: None.
*
**********************************************************************/
void blinkLedTask(void *param)
{
while (1)
{
/* Delay for 500 milliseconds. */
usleep(50000);
ledToggle();
}
}The main function’s job in this
example is to create the LED task. The task is created by calling the
function pthread_create. For this
example, the default task attributes are used, and no parameters are
passed to the task blinkLedTask.
The function pthread_join is
used to suspend the main function
until the blinkLedTask task
terminates. In this case, the blinkLedTask task runs forever, ...