Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)
Diff: Hexacopter/processes.h
- Revision:
- 0:9b057566f9ee
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Hexacopter/processes.h Mon Nov 01 20:39:01 2010 +0000 @@ -0,0 +1,105 @@ +#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 + +