jueves, 16 de julio de 2015

Tareas con MQX KDS 3.0 SDK 1.2

Descripción del Programa

El objetivo es alternar los colores del LED RGB a rojo, verde y azul, mediante tres tareas y utilizando los comandos _task_ready() y _task_block().


Código



#include <stdio.h>
#include <mqx.h>
#include <bsp.h>

/* Task IDs */
/* Task IDs */
#define INIT_TASK  5
#define RED_TASK  6
#define GREEN_TASK  7
#define BLUE_TASK  8

extern void init_task(uint32_t);
extern void red_task(uint32_t);
extern void green_task(uint32_t);
extern void blue_task(uint32_t);

TD_STRUCT_PTR red_ptr, green_ptr, blue_ptr;

const TASK_TEMPLATE_STRUCT  MQX_template_list[] =
{
   /* Task Index,   Function,   Stack,  Priority, Name,     Attributes,          Param, Time Slice */
    { INIT_TASK,    init_task,  700,    9,        "init",   MQX_AUTO_START_TASK, 0,     0 },
    { RED_TASK,     red_task,   700,    8,        "red",    0,                   0,     0 },
    { GREEN_TASK,   green_task, 700,    8,        "green",  0,                   0,     0 },
    { BLUE_TASK,    blue_task,  700,    8,        "blue",   0,                   0,     0 },
    { 0 }
};

/*TASK*-----------------------------------------------------
*
* Task Name    : world_task
* Comments     :
*    This task creates rgb_task and then prints " World ".
*
*END*-----------------------------------------------------*/

void init_task
   (
      uint32_t initial_data
   )
{
   _task_id red_task_id, green_task_id,blue_task_id;
   GPIO_DRV_Init(switchPins,ledPins);

   red_task_id = _task_create(0, RED_TASK, 0);
   if (red_task_id == MQX_NULL_TASK_ID) {
      printf ("\n Could not create red_task\n");
   }

   green_task_id = _task_create(0, GREEN_TASK, 0);
   if (green_task_id == MQX_NULL_TASK_ID) {
      printf ("\n Could not create green_task\n");
   }

   blue_task_id = _task_create(0, BLUE_TASK, 0);
   if (blue_task_id == MQX_NULL_TASK_ID) {
      printf ("\n Could not create blue_task\n");
   }
   _task_block();

}


/*TASK*-----------------------------------------------------
*
* Task Name    : rgb_task
* Comments     :
*    This task prints " Hello".
*
*END*-----------------------------------------------------*/

void red_task
   (
      uint32_t initial_data
   )
{
_task_id red_task_id;
red_task_id = _task_get_id();
red_ptr = _task_get_td(red_task_id);

while(1){
printf("\n Red\n");
GPIO_DRV_ClearPinOutput(BOARD_GPIO_LED_RED);
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_GREEN);
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_BLUE);
_time_delay_ticks(100);
_task_ready(green_ptr);
_task_block();
}
}

void green_task
   (
      uint32_t initial_data
   )
{
_task_id green_task_id;
green_task_id = _task_get_id();
green_ptr = _task_get_td(green_task_id);
_task_block();

while(1){
printf("\n Green\n");
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_RED);
GPIO_DRV_ClearPinOutput(BOARD_GPIO_LED_GREEN);
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_BLUE);
_time_delay_ticks(100);
_task_ready(blue_ptr);
_task_block();
}
}

void blue_task
   (
      uint32_t initial_data
   )
{
_task_id blue_task_id;
blue_task_id = _task_get_id();
blue_ptr = _task_get_td(blue_task_id);
_task_block();

while(1){
printf("\n Blue\n");
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_RED);
GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_GREEN);
GPIO_DRV_ClearPinOutput(BOARD_GPIO_LED_BLUE);
_time_delay_ticks(100);
_task_ready(red_ptr);
_task_block();
}
}
/* EOF */


Referencias

Para mayor información sobre el uso de TAREAS, visita la página:

Essentials of MQX RTOS, Task Management

Para conocer el curso completo de Essentials Course of MQX, visita la página:

Essentials Course of MQX

No hay comentarios:

Publicar un comentario