round-robin-rtos
Published 09 Sep 2010, by
Tim Exton-McGuinness

No tags
« Back to documentation index
Show/hide line numbers
rtos.c Source File
rtos.c
00001 #include "globals.h"
00002
00003 extern "C" int itask( unsigned int *, void (void) );
00004 extern "C" int run_task( unsigned int *, unsigned int);
00005 extern "C" int sleep_task( unsigned int, unsigned int * );
00006
00007 extern "C" {
00008
00009 void install_task0( void task(void) )
00010 {
00011 sp0 = itask( &taskstack0[255], task);
00012 }
00013 }
00014
00015
00016 extern "C" {
00017 void install_task1( void task(void) )
00018 {
00019 sp1 = itask( &taskstack1[255], task);
00020 }
00021 }
00022
00023
00024 extern "C" {
00025 void install_task2(void task(void) )
00026 {
00027 sp2 = itask( &taskstack2[255], task);
00028 }
00029 }
00030
00031
00032 extern "C" {
00033 void install_task3( void task(void) )
00034 {
00035 sp3 = itask( &taskstack3[255], task);
00036 }
00037 }
00038
00039
00040 extern "C" {
00041 void install_task4( void task(void) )
00042 {
00043 sp4 = itask( &taskstack4[255], task);
00044 }
00045 }
00046
00047
00048 extern "C" {
00049 void install_task5( void task(void) )
00050 {
00051 sp5 = itask( &taskstack5[255], task);
00052 }
00053 }
00054
00055
00056 extern "C" {
00057 void run_task0( void )
00058 {
00059 task_number = 0;
00060 run_task( &savesp, sp0 );
00061 }
00062 }
00063
00064
00065 extern "C" {
00066 void run_task1( void )
00067 {
00068 task_number = 1;
00069 run_task( &savesp, sp1 );
00070 }
00071 }
00072
00073
00074 extern "C" {
00075 void run_task2( void )
00076 {
00077 task_number = 2;
00078 run_task( &savesp, sp2 );
00079 }
00080 }
00081
00082
00083 extern "C" {
00084 void run_task3( void )
00085 {
00086 task_number = 3;
00087 run_task( &savesp, sp3 );
00088 }
00089 }
00090
00091
00092 extern "C" {
00093 void run_task4( void )
00094 {
00095 task_number = 4;
00096 run_task( &savesp, sp4 );
00097 }
00098 }
00099
00100
00101 extern "C" {
00102 void run_task5( void )
00103 {
00104 task_number = 5;
00105 run_task( &savesp, sp5 );
00106 }
00107 }
00108
00109
00110 extern "C" {
00111 void sleep( void ) {
00112 switch( task_number )
00113 {
00114 case 0:
00115 sleep_task( savesp, &sp0 );
00116 break;
00117
00118 case 1:
00119 sleep_task( savesp, &sp1 );
00120 break;
00121
00122 case 2:
00123 sleep_task( savesp, &sp2 );
00124 break;
00125
00126 case 3:
00127 sleep_task( savesp, &sp3 );
00128 break;
00129
00130 case 4:
00131 sleep_task( savesp, &sp4 );
00132 break;
00133
00134 case 5:
00135 sleep_task( savesp, &sp5 );
00136 break;
00137 }
00138 }
00139 }
00140
00141