0% found this document useful (0 votes)
19 views

Código Fuente de La Secuencia Circular de Leds Activada Por El Switch 1

This document contains the source code for a circular LED sequence activated by Switch 1. It defines tasks to initialize devices, run the LED sequence periodically, and check the switch periodically. The main task starts the operating system. When the switch is pressed, it toggles the LED sequence on or off by changing the value of SecuenciaON.

Uploaded by

Carit018
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

Código Fuente de La Secuencia Circular de Leds Activada Por El Switch 1

This document contains the source code for a circular LED sequence activated by Switch 1. It defines tasks to initialize devices, run the LED sequence periodically, and check the switch periodically. The main task starts the operating system. When the switch is pressed, it toggles the LED sequence on or off by changing the value of SecuenciaON.

Uploaded by

Carit018
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Cdigo fuente de la secuencia circular de Leds

activada por el Switch 1


/*==================[inclusions]=============================================
*/
#include "os.h" /* <= operating system header */
#include "ciaaPOSIX_stdio.h" /* <= device handler header */
#include "ciaaPOSIX_string.h" /* <= string header */
#include "ciaak.h" /* <= ciaa kernel header */
#include "myproject.h" /* <= own header */
/*==================[macros and
definitions]=================================*/
#define CantLeds 5
/*==================[internal data
declaration]==============================*/
/*==================[internal functions
declaration]=========================*/
/*==================[internal data
definition]===============================*/
/** \brief File descriptor for digital output ports
* Device path /dev/dio/out/0
* File descriptor for digital input ports
* Device path /dev/dio/in/0
*/
static int32_t fd_out, fd_in;
static uint32_t Periodic_Task_Counter;
static uint8 SecuenciaON=0;
/*==================[external data
definition]===============================*/
/*==================[internal functions
definition]==========================*/
/*==================[external functions
definition]==========================*/

/** \brief Main function


*
* This is the main entry point of the software.
*
* \returns 0
*
* \remarks This function never returns. Return value is only to avoid
compiler
* warnings or errors.
*/
int main(void)
{
/* Starts the operating system in the Application Mode 1 */
/* This example has only one Application Mode */
StartOS(AppMode1);
/* StartOs shall never returns, but to avoid compiler warnings or errors
* 0 is returned */
return 0;
}
/** \brief Error Hook function
*
* This fucntion is called from the os if an os interface (API) returns an
* error. Is for debugging proposes. If called this function triggers a
* ShutdownOs which ends in a while(1).
*
* The values:
* OSErrorGetServiceId
Cdigo fuente de la secuencia circular de Leds
activada por el Switch 1
* OSErrorGetParam1
* OSErrorGetParam2
* OSErrorGetParam3
* OSErrorGetRet
*
* will provide you the interface, the input parameters and the returned
value.
* For more details see the OSEK specification:
* http://portal.osek-vdx.org/files/pdf/specs/os223.pdf
*
*/
void ErrorHook(void)
{
ciaaPOSIX_printf("ErrorHook was called\n");
ciaaPOSIX_printf("Service: %d, P1: %d, P2: %d, P3: %d, RET: %d\n",
OSErrorGetServiceId(), OSErrorGetParam1(), OSErrorGetParam2(),
OSErrorGetParam3(), OSErrorGetRet());
ShutdownOS(0);
}
/** \brief Initial task
*
* This task is started automatically in the application mode 1.
*/
TASK(InitTask)
{
/* init CIAA kernel and devices */
ciaak_start();

/* print message (only on x86) */


ciaaPOSIX_printf("Init Task...\n");
/* open CIAA digital outputs */
fd_out = ciaaPOSIX_open("/dev/dio/out/0", O_RDWR);
/* open CIAA digital inputs */
fd_in = ciaaPOSIX_open("/dev/dio/in/0", O_RDONLY);
/* activate periodic task:
* - for the first time after 350 ticks (350 ms)
* - and then every 250 ticks (250 ms)
*/
Periodic_Task_Counter = 0;
SetRelAlarm(ActivatePeriodicTask, 350, 250);
/* activate periodic switches task:
* - for the first time after 350 ticks (350 ms)
* - and then every 100 ticks (50 ms)
*/
SetRelAlarm(ActivateSwitchesTask, 350, 50);
/* terminate task */
TerminateTask();
}
/** \brief Periodic Task
*
* This task is started automatically every time that the alarm
* ActivatePeriodicTask expires.
*
*/
TASK(PeriodicTask)
{
uint8 outputs;
/* Circular sequence */
if(SecuenciaON == 1){
Cdigo fuente de la secuencia circular de Leds
activada por el Switch 1
ciaaPOSIX_read(fd_out, &outputs, 1);
outputs ^= 1<<Periodic_Task_Counter;
ciaaPOSIX_write(fd_out, &outputs, 1);
Periodic_Task_Counter++;
if(Periodic_Task_Counter>CantLeds){
Periodic_Task_Counter=0;
}
}
/* terminate task */
TerminateTask();
}/** \brief Switches Task
*
* This task is started automatically every time that the alarm
* ActivateSwitchesTask expires.
*
*/
TASK(SwitchesTask)
{
uint8 inputs;
/* Read Switch 1 and change state of variable pulsador */
ciaaPOSIX_read(fd_in, &inputs, 1);
if((inputs&0x01) == 1){
SecuenciaON=1;
}
if((inputs&0x02) == 2){
SecuenciaON=0;
}
/* terminate task */
TerminateTask();
}
/** @} doxygen end group definition */
/** @} doxygen end group definition */
/** @} doxygen end group definition */
/*==================[endoffile]============================================*/

Agregado en el archivo myproject.oil


TASK SwitchesTask {
PRIORITY = 2;
ACTIVATION = 1;
STACK = 512;
TYPE = EXTENDED;
SCHEDULE = NON;
RESOURCE = POSIXR;
EVENT = POSIXE;
}
ALARM ActivateSwitchesTask {
COUNTER = HardwareCounter;
ACTION = ACTIVATETASK {
TASK = SwitchesTask;
}
}

You might also like