jueves, 12 de diciembre de 2013

SEMÁFORO [APUNTADORES] (código)


Programa principal.

/* ###################################################################
**     Filename    : ProcessorExpert.c
**     Project     : ProcessorExpert
**     Processor   : MKL25Z128VLK4
**     Version     : Driver 01.01
**     Compiler    : GNU C Compiler
**     Date/Time   : 2013-08-29, 14:26, # CodeGen: 0
**     Abstract    :
**         Main module.
**         This module contains user's application code.
**     Settings    :
**     Contents    :
**         No public methods
**
** ###################################################################*/
/*!
** @file ProcessorExpert.c
** @version 01.01
** @brief
**         Main module.
**         This module contains user's application code.
*/        
/*!
**  @addtogroup ProcessorExpert_module ProcessorExpert module documentation
**  @{
*/        
/* MODULE ProcessorExpert */


/* Including needed modules to compile this module/procedure */
#include "Cpu.h"
#include "Events.h"
#include "LED_ROJO.h"
#include "BitIoLdd1.h"
#include "LED_VERDE.h"
#include "BitIoLdd2.h"
#include "LED_AZUL.h"
#include "BitIoLdd3.h"
#include "TI1.h"
#include "TimerIntLdd1.h"
#include "TU1.h"
/* Including shared modules, which are used for whole project */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"

void f_LED(int);
void f_task_amarillo(void);
void f_task_verde(void);
void f_task_rojo(void);
void inicio(void);

#define T_ROJO 30 // En unidades de ms, por tanto = 3seg.
#define T_VERDE 50 // En unidades de ms, por tanto = 5seg.
#define T_AMARILLO 20 // En unidades de ms, por tanto = 2seg.
enum tareas {task_rojo, task_verde, task_amarillo};      //Enumera las tareas, por lo tanto, t_rojo=0, t_verde=1, t_amarillo=2
enum colores{negro, azul, verde, cyan, rojo, magenta, amarillo, blanco};
enum bit_color{b_azul=1,b_verde=2,b_rojo=4};
extern int timmer;
int sig_task;
int color_led;


void (*ap_func[3])(void)={f_task_rojo, f_task_verde, f_task_amarillo};


/* User includes (#include below this line is not maintained by Processor Expert) */

/*lint -save  -e970 Disable MISRA rule (6.3) checking. */
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
  /* Write your local variable definition here */

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */

  inicio();

  for(;;)
  {
 
  while(timmer)
  {}
 
  (*ap_func[sig_task])();

  /* 
  switch (sig_task)
  {
  case task_rojo:
            f_task_rojo();
            break;
  case task_verde:
            f_task_verde();
            break;
 
  case task_amarillo:
            f_task_amarillo();
            break;
  }            */

  }
 
  /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
  #ifdef PEX_RTOS_START
    PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of RTOS startup code.  ***/
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;){}
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

/* END ProcessorExpert */
/*!
** @}
*/
/*
** ###################################################################
**
**     This file was created by Processor Expert 10.2 [05.07]
**     for the Freescale Kinetis series of microcontrollers.
**
** ###################################################################
*/

void inicio(void)
{
      sig_task=task_rojo;
      timmer=0;
}


void f_task_rojo(void)
{
      timmer=T_ROJO;
      f_LED(rojo);
      sig_task=task_verde;
}


void f_task_verde(void)
{
      timmer=T_VERDE;
      f_LED(verde);
      sig_task=task_amarillo;
}


void f_task_amarillo(void)
{
      timmer=T_AMARILLO;
      f_LED(amarillo);
      sig_task=task_rojo;
}


void f_LED(int color_led)
{
      if (color_led&b_rojo)
            LED_ROJO_ClrVal();
      else
            LED_ROJO_SetVal();

      if (color_led&b_verde)
            LED_VERDE_ClrVal();
      else
            LED_VERDE_SetVal();

      if (color_led&azul)
            LED_AZUL_ClrVal();
      else
            LED_AZUL_SetVal();

}



Eventos

/* ###################################################################
**     Filename    : Events.c
**     Project     : ProcessorExpert
**     Processor   : MKL25Z128VLK4
**     Component   : Events
**     Version     : Driver 01.00
**     Compiler    : GNU C Compiler
**     Date/Time   : 2013-08-29, 14:26, # CodeGen: 0
**     Abstract    :
**         This is user's event module.
**         Put your event handler code here.
**     Settings    :
**     Contents    :
**         Cpu_OnNMIINT - void Cpu_OnNMIINT(void);
**
** ###################################################################*/
/*!
** @file Events.c
** @version 01.00
** @brief
**         This is user's event module.
**         Put your event handler code here.
*/        
/*!
**  @addtogroup Events_module Events module documentation
**  @{
*/        
/* MODULE Events */

#include "Cpu.h"
#include "Events.h"

#ifdef __cplusplus
extern "C" {
#endif

int timmer;

/* User includes (#include below this line is not maintained by Processor Expert) */

/*
** ===================================================================
**     Event       :  Cpu_OnNMIINT (module Events)
**
**     Component   :  Cpu [MKL25Z128LK4]
**     Description :
**         This event is called when the Non maskable interrupt had
**         occurred. This event is automatically enabled when the <NMI
**         interrupt> property is set to 'Enabled'.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
void Cpu_OnNMIINT(void)
{
  /* Write your code here ... */
}
/*
** ===================================================================
**     Event       :  TI1_OnInterrupt (module Events)
**
**     Component   :  TI1 [TimerInt]
**     Description :
**         When a timer interrupt occurs this event is called (only
**         when the component is enabled - <Enable> and the events are
**         enabled - <EnableEvent>). This event is enabled only if a
**         <interrupt service/event> is enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
void TI1_OnInterrupt(void)
{

  if(timmer>0)
        --timmer;
      /* Write your code here ... */
}

/* END Events */

#ifdef __cplusplus
}  /* extern "C" */
#endif

/*!
** @}
*/
/*
** ###################################################################
**
**     This file was created by Processor Expert 10.2 [05.07]
**     for the Freescale Kinetis series of microcontrollers.
**
** ###################################################################
*/

No hay comentarios:

Publicar un comentario