Round robin Scheduler

Dependencies:   mbed

Committer:
timexton
Date:
Thu Sep 09 14:09:14 2010 +0000
Revision:
0:cf2d4c337b6f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
timexton 0:cf2d4c337b6f 1 //serial port receiver interrupt handler
timexton 0:cf2d4c337b6f 2
timexton 0:cf2d4c337b6f 3 #include "globals.h"
timexton 0:cf2d4c337b6f 4
timexton 0:cf2d4c337b6f 5 Serial Terminal(p9, p10 );
timexton 0:cf2d4c337b6f 6
timexton 0:cf2d4c337b6f 7 extern "C" void sleep( void );
timexton 0:cf2d4c337b6f 8
timexton 0:cf2d4c337b6f 9 //---------------------------------------------------------------------
timexton 0:cf2d4c337b6f 10 extern "C" {
timexton 0:cf2d4c337b6f 11 void serial_rx_isr( void )
timexton 0:cf2d4c337b6f 12 {
timexton 0:cf2d4c337b6f 13 rxbuffer[rxwr++] = Terminal.getc(); //get character
timexton 0:cf2d4c337b6f 14 rxwr &= 0xff; //range check index
timexton 0:cf2d4c337b6f 15 }
timexton 0:cf2d4c337b6f 16 } //end of extern "C"
timexton 0:cf2d4c337b6f 17
timexton 0:cf2d4c337b6f 18 //-----------------------------------------------------
timexton 0:cf2d4c337b6f 19 extern "C" {
timexton 0:cf2d4c337b6f 20 int put_char( char c )
timexton 0:cf2d4c337b6f 21 {
timexton 0:cf2d4c337b6f 22 while( !Terminal.writeable() ) sleep();
timexton 0:cf2d4c337b6f 23 Terminal.putc(c);
timexton 0:cf2d4c337b6f 24 if ( c == 0xa )
timexton 0:cf2d4c337b6f 25 {
timexton 0:cf2d4c337b6f 26 while( !Terminal.writeable() ) sleep();
timexton 0:cf2d4c337b6f 27 Terminal.putc(0xd);
timexton 0:cf2d4c337b6f 28 }
timexton 0:cf2d4c337b6f 29
timexton 0:cf2d4c337b6f 30 return( c );
timexton 0:cf2d4c337b6f 31 }
timexton 0:cf2d4c337b6f 32 } //end of extern "C"
timexton 0:cf2d4c337b6f 33
timexton 0:cf2d4c337b6f 34 //-------------------------------------------
timexton 0:cf2d4c337b6f 35 extern "C" {
timexton 0:cf2d4c337b6f 36 void sleepy_write( char *ptr)
timexton 0:cf2d4c337b6f 37 {
timexton 0:cf2d4c337b6f 38 char c;
timexton 0:cf2d4c337b6f 39
timexton 0:cf2d4c337b6f 40 while( c = *ptr++ ) put_char( c );
timexton 0:cf2d4c337b6f 41 }
timexton 0:cf2d4c337b6f 42 } //end of extern "C"
timexton 0:cf2d4c337b6f 43
timexton 0:cf2d4c337b6f 44 //----------------------------------------------------------------------
timexton 0:cf2d4c337b6f 45 extern "C" {
timexton 0:cf2d4c337b6f 46 int get_char( void )
timexton 0:cf2d4c337b6f 47 {
timexton 0:cf2d4c337b6f 48 char c;
timexton 0:cf2d4c337b6f 49
timexton 0:cf2d4c337b6f 50 while( (rxwr == rxrd) ) sleep();
timexton 0:cf2d4c337b6f 51
timexton 0:cf2d4c337b6f 52 c = rxbuffer[rxrd++];
timexton 0:cf2d4c337b6f 53 rxrd &= 0xff; //keep in range
timexton 0:cf2d4c337b6f 54 return(c);
timexton 0:cf2d4c337b6f 55 }
timexton 0:cf2d4c337b6f 56 } //end of extern "C"
timexton 0:cf2d4c337b6f 57
timexton 0:cf2d4c337b6f 58 //-----------------------------------------------------------------------
timexton 0:cf2d4c337b6f 59 extern "C" {
timexton 0:cf2d4c337b6f 60 int peekchar( void )
timexton 0:cf2d4c337b6f 61 {
timexton 0:cf2d4c337b6f 62 if( rxwr == rxrd ) return(0);
timexton 0:cf2d4c337b6f 63 return(1);
timexton 0:cf2d4c337b6f 64 }
timexton 0:cf2d4c337b6f 65 } //end of extern "C"
timexton 0:cf2d4c337b6f 66
timexton 0:cf2d4c337b6f 67 //------------------------------------------------------
timexton 0:cf2d4c337b6f 68 extern "C" {
timexton 0:cf2d4c337b6f 69 void crlf( void )
timexton 0:cf2d4c337b6f 70 {
timexton 0:cf2d4c337b6f 71 put_char(0xa);
timexton 0:cf2d4c337b6f 72 put_char(0xd);
timexton 0:cf2d4c337b6f 73 }
timexton 0:cf2d4c337b6f 74 } //end of extern "C"
timexton 0:cf2d4c337b6f 75
timexton 0:cf2d4c337b6f 76 //------------------------------------------------------
timexton 0:cf2d4c337b6f 77 extern "C" {
timexton 0:cf2d4c337b6f 78 void spaces( unsigned char i )
timexton 0:cf2d4c337b6f 79 {
timexton 0:cf2d4c337b6f 80 if ( i > 0 ) {while(i--) put_char(0x20);}
timexton 0:cf2d4c337b6f 81 }
timexton 0:cf2d4c337b6f 82 } //end of extern "C"
timexton 0:cf2d4c337b6f 83
timexton 0:cf2d4c337b6f 84 //-----------------------------------------------------------------
timexton 0:cf2d4c337b6f 85 // parse text line, converting ' ' and 'CR' to NULL
timexton 0:cf2d4c337b6f 86 // returns global argv and argc parameters set accordingly
timexton 0:cf2d4c337b6f 87 extern "C" {
timexton 0:cf2d4c337b6f 88 void parse( char *ptr )
timexton 0:cf2d4c337b6f 89 {
timexton 0:cf2d4c337b6f 90 argc = 0;
timexton 0:cf2d4c337b6f 91 while( *ptr )
timexton 0:cf2d4c337b6f 92 {
timexton 0:cf2d4c337b6f 93 argv[argc++] = ptr; //record start of parameter string
timexton 0:cf2d4c337b6f 94 while(*ptr != ' ') ptr++;
timexton 0:cf2d4c337b6f 95 *ptr++ = 0;
timexton 0:cf2d4c337b6f 96 }
timexton 0:cf2d4c337b6f 97 }
timexton 0:cf2d4c337b6f 98 } //end of extern "C"
timexton 0:cf2d4c337b6f 99
timexton 0:cf2d4c337b6f 100 //-----------------------------------------------------------------------
timexton 0:cf2d4c337b6f 101 extern "C" {
timexton 0:cf2d4c337b6f 102 void readln( char *ptr )
timexton 0:cf2d4c337b6f 103 {
timexton 0:cf2d4c337b6f 104 char key;
timexton 0:cf2d4c337b6f 105 int count = 0;
timexton 0:cf2d4c337b6f 106
timexton 0:cf2d4c337b6f 107 while(1)
timexton 0:cf2d4c337b6f 108 {
timexton 0:cf2d4c337b6f 109 key = get_char();
timexton 0:cf2d4c337b6f 110
timexton 0:cf2d4c337b6f 111 if ( key == 0xd )
timexton 0:cf2d4c337b6f 112 {
timexton 0:cf2d4c337b6f 113 *ptr++ = 0x20;
timexton 0:cf2d4c337b6f 114 *ptr = 0;
timexton 0:cf2d4c337b6f 115 return;
timexton 0:cf2d4c337b6f 116 }
timexton 0:cf2d4c337b6f 117
timexton 0:cf2d4c337b6f 118 if ( key == 0x1b ) //esc
timexton 0:cf2d4c337b6f 119 {
timexton 0:cf2d4c337b6f 120 *ptr++ = 'q';
timexton 0:cf2d4c337b6f 121 *ptr++ = 0x20;
timexton 0:cf2d4c337b6f 122 *ptr = 0;
timexton 0:cf2d4c337b6f 123 // put_char(0xa);
timexton 0:cf2d4c337b6f 124 return;
timexton 0:cf2d4c337b6f 125 }
timexton 0:cf2d4c337b6f 126
timexton 0:cf2d4c337b6f 127 if ( key == 0x8 ) //delete
timexton 0:cf2d4c337b6f 128 {
timexton 0:cf2d4c337b6f 129 if ( count )
timexton 0:cf2d4c337b6f 130 {
timexton 0:cf2d4c337b6f 131 put_char( 0x8 );
timexton 0:cf2d4c337b6f 132 put_char( 0x20 );
timexton 0:cf2d4c337b6f 133 put_char( 0x8 );
timexton 0:cf2d4c337b6f 134 ptr--;
timexton 0:cf2d4c337b6f 135 count--;
timexton 0:cf2d4c337b6f 136 }
timexton 0:cf2d4c337b6f 137 }
timexton 0:cf2d4c337b6f 138 else
timexton 0:cf2d4c337b6f 139 {
timexton 0:cf2d4c337b6f 140 *ptr++ = key;
timexton 0:cf2d4c337b6f 141 count++;
timexton 0:cf2d4c337b6f 142 put_char( key );
timexton 0:cf2d4c337b6f 143 }
timexton 0:cf2d4c337b6f 144 }
timexton 0:cf2d4c337b6f 145 }
timexton 0:cf2d4c337b6f 146 } //end of extern "C"
timexton 0:cf2d4c337b6f 147
timexton 0:cf2d4c337b6f 148 //--------------------------------------------------------------------------
timexton 0:cf2d4c337b6f 149 extern "C" {
timexton 0:cf2d4c337b6f 150 void goxy( int x, int y)
timexton 0:cf2d4c337b6f 151 {
timexton 0:cf2d4c337b6f 152 sprintf(sl_buff,"%c[%d;%dH", 27, y, x); sleepy_write( sl_buff);
timexton 0:cf2d4c337b6f 153 }
timexton 0:cf2d4c337b6f 154 } //end of extern "C"
timexton 0:cf2d4c337b6f 155
timexton 0:cf2d4c337b6f 156 //--------------------------------------------------------------------------
timexton 0:cf2d4c337b6f 157 extern "C" {
timexton 0:cf2d4c337b6f 158 void cursor( int x, int y, int spaces )
timexton 0:cf2d4c337b6f 159 {
timexton 0:cf2d4c337b6f 160 goxy( x, y );
timexton 0:cf2d4c337b6f 161 while( spaces-- ) put_char( ' ' );
timexton 0:cf2d4c337b6f 162 goxy( x, y );
timexton 0:cf2d4c337b6f 163 }
timexton 0:cf2d4c337b6f 164 } //end of extern "C"
timexton 0:cf2d4c337b6f 165
timexton 0:cf2d4c337b6f 166 //--------------------------------------------------------------------------
timexton 0:cf2d4c337b6f 167 extern "C" {
timexton 0:cf2d4c337b6f 168 void clear_screen( void )
timexton 0:cf2d4c337b6f 169 {
timexton 0:cf2d4c337b6f 170 sprintf(sl_buff,"%c[2J", 27); sleepy_write( sl_buff); /* erase screen */
timexton 0:cf2d4c337b6f 171 }
timexton 0:cf2d4c337b6f 172 } //end of extern "C"
timexton 0:cf2d4c337b6f 173
timexton 0:cf2d4c337b6f 174 //-------------------------------------------------------------------------
timexton 0:cf2d4c337b6f 175 extern "C" {
timexton 0:cf2d4c337b6f 176 int tohex( char c )
timexton 0:cf2d4c337b6f 177 {
timexton 0:cf2d4c337b6f 178 if ( c > 0x39 ) c-=7;
timexton 0:cf2d4c337b6f 179 return( c&0xf );
timexton 0:cf2d4c337b6f 180 }
timexton 0:cf2d4c337b6f 181 } //end of extern "C"
timexton 0:cf2d4c337b6f 182
timexton 0:cf2d4c337b6f 183 //-------------------------------------------------------------------------
timexton 0:cf2d4c337b6f 184 extern "C" {
timexton 0:cf2d4c337b6f 185 int atohex( char *ptr )
timexton 0:cf2d4c337b6f 186 {
timexton 0:cf2d4c337b6f 187 int acc = 0;
timexton 0:cf2d4c337b6f 188 int nibble;
timexton 0:cf2d4c337b6f 189
timexton 0:cf2d4c337b6f 190 while( nibble = *ptr++ )
timexton 0:cf2d4c337b6f 191 {
timexton 0:cf2d4c337b6f 192 acc*=16;
timexton 0:cf2d4c337b6f 193 acc+=tohex(nibble);
timexton 0:cf2d4c337b6f 194 }
timexton 0:cf2d4c337b6f 195
timexton 0:cf2d4c337b6f 196 return( acc );
timexton 0:cf2d4c337b6f 197 }
timexton 0:cf2d4c337b6f 198
timexton 0:cf2d4c337b6f 199 } //end of extern "C"