Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)

Dependencies:   mbed

Hexacopter/processes.h

Committer:
jberry
Date:
2010-11-01
Revision:
0:9b057566f9ee

File content as of revision 0:9b057566f9ee:

#pragma once

#ifndef PROCESSES_H
#define PROCESSES_H
#include <event_flags.h>
//#include <Servo_Control.h>

//      Process types
//

/*
typedef OS::process<OS::pr0, 1400> PING_PROC;
typedef OS::process<OS::pr1, 1000> TProc2;
typedef OS::process<OS::pr2, 3000> Accelo_proc;
typedef OS::process<OS::pr3, 1000> Servo_control;
typedef OS::process<OS::pr4, 3000> Command_handler;
typedef OS::process<OS::pr5, 1000> Motor_controller;
typedef OS::process<OS::pr6, 4000> Serial_Out;
*/

typedef OS::process<OS::pr0, 2000> PING_PROC;
typedef OS::process<OS::pr1, 1400> TProc2;
typedef OS::process<OS::pr2, 3000> Accelo_proc;
typedef OS::process<OS::pr3, 2000> Servo_control;
typedef OS::process<OS::pr4, 3000> Command_handler;
typedef OS::process<OS::pr5, 2000> Motor_controller;
typedef OS::process<OS::pr6, 4000> Serial_Out;

//typedef OS::process<OS::pr3, 300> TProc4;

//---------------------------------------------------------------------------
//
//      Process objects
//
PING_PROC PING_PROCESS;
TProc2 Proc2;
Accelo_proc Accelerometer_process;
Servo_control Servo_process;
Command_handler Com_Handler;
Serial_Out Serial_Out_Proc;
Motor_controller M_cont_process;

//---------------------------------------------------------------------------



//      IO Pins
//
//DigitalOut led1(LED1);
//DigitalOut led2(LED2);


//---------------------------------------------------------------------------
 

//---------------------------------------------------------------------------
//extra declarations








BusOut leds(LED1, LED2, LED3, LED4);


//---------------------------------------------------------------------------
template<> OS_PROCESS void TProc2::Exec()
{
    for(;;)
    {
        Sleep(500); //suspend process
        //printf("e\n");
        //led1 = !led1;
        //leds = 0x1;
    }
}

//---------------------------------------------------------------------------



void OS::SystemTimerUserHook()
{
    static int cnt=0;
    if (++cnt == 2000)
    {
        cnt = 0;
        //led2.write(1);
        timerEvent.SignalISR();
    }
}

//---------------------------------------------------------------------------
void OS::IdleProcessUserHook()
{
    __WFI(); //sleep the ucontroller and wait for interrupt
}
//-----------------------------------------------------------------------------

#endif