jueves, 16 de julio de 2015

Eventos con MQX KDS 3.0 SDK 1.2

Descripción del Programa


El programa demuestra el uso de eventos para coordinar tres tareas que iluminan el LED RGB en rojo, verde y azul, mediante los comandos _lwevent_wait_for()_lwevent_set().

Código


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

/* Task IDs */
/* Task IDs */
#define INIT_TASK  5
#define RED_TASK  6
#define GREEN_TASK  7
#define BLUE_TASK  8
#define ROJO 1
#define VERDE 2
#define AZUL 4
#define t_out      200

LWEVENT_STRUCT lwevent;

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,  1000,    8,        "init",   MQX_AUTO_START_TASK, 0,     0 },
    { RED_TASK,     red_task,   1000,    9,        "red",    MQX_AUTO_START_TASK, 0,     0 },
    { GREEN_TASK,   green_task, 1000,    9,        "green",  MQX_AUTO_START_TASK, 0,     0 },
    { BLUE_TASK,    blue_task,  1000,    9,        "blue",   MQX_AUTO_START_TASK, 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");
   }

   int counter = 0;
   _lwevent_create(&lwevent,LWEVENT_AUTO_CLEAR);  //Poneencero a los bits delevento
   _lwevent_set(&lwevent,ROJO);                    //activa el bit ROJO
   _task_abort(_task_get_id());

   while(1) {
       counter++;
   /* Write your code here ... */
     }

}


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

void red_task
   (
      uint32_t initial_data
   )
{
int counter = 0;
_lwevent_wait_for(&lwevent,ROJO,FALSE,NULL);
printf("Rojo\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(t_out);
_lwevent_set(&lwevent,VERDE);
}

void green_task
   (
      uint32_t initial_data
   )
{
int counter = 0;
_lwevent_wait_for(&lwevent,VERDE,FALSE,NULL);
printf("Verde\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(t_out);
_lwevent_set(&lwevent,AZUL);
}

void blue_task
   (
      uint32_t initial_data
   )
{
int counter = 0;
_lwevent_wait_for(&lwevent,AZUL,FALSE,NULL);
printf("Azul\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(t_out);
_lwevent_set(&lwevent,ROJO);
}


/* EOF */

Referencias

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

Essentials of MQX RTOS, LWEvents

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

Essentials Course of MQX

1 comentario:

  1. Hotel Casinos & Gambling - MapYRO
    A full-service casino resort is on 경산 출장샵 the Vegas Strip. This 충주 출장안마 casino resort is within a 성남 출장샵 5-minute drive of the 진주 출장안마 Fremont Street Experience. The 경산 출장안마 hotel offers

    ResponderEliminar