#include "rtos.h"
#include "kernel.h"
#include "event.h"

extern "C" void __aeabi_unwind_cpp_pr0(void)
{
}

extern "C" void __aeabi_unwind_cpp_pr1(void)
{
}

extern "C" void __cxa_pure_virtual(void)
{
}

extern "C" void __cxa_end_cleanup(void)
{
}

extern "C" void *__gxx_personality_v0(void)
{
	return NULL;
}

typedef Process<pr0, 	300> TProc1;
typedef Process<pr1, 	300> TProc2;
typedef Process<pr2, 	300> TProc3;
typedef Process<prIDLE,	300> TIdleProcess;

TProc1 			Proc1;
TProc2 			Proc2;
TProc3 			Proc3;
TIdleProcess	IdleProcess;

Event	ef;
Event	TimerEvent;

TKernel Kernel;

int main()
{
	Kernel.Run();
}

template <>
OS_PROCESS void TProc1::Exec()
{
	for(;;) {
		Proc1.Sleep(1);
	}
}

template <>
OS_PROCESS void TProc2::Exec()
{
	for(;;) {
		Proc2.Sleep(1);
	}
}

template <>
OS_PROCESS void TProc3::Exec()
{
	for (;;) {
		Proc3.Sleep(1);
	}
}

template<>
OS_PROCESS void TIdleProcess::Exec()
{
	for(;;) {
	}
}
