EE192 Team 4 / Mbed 2 deprecated FixedPWM

Dependencies:   FastAnalogIn MODSERIAL PID QEI RPCInterface Servo mbed-rtos mbed telemetry

Fork of Sequential_Timing by EE192 Team 4

Committer:
vsutardja
Date:
Tue Apr 05 18:30:41 2016 +0000
Revision:
10:716484b1ddb5
latest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsutardja 10:716484b1ddb5 1 /***********************************************************************/
vsutardja 10:716484b1ddb5 2 /* */
vsutardja 10:716484b1ddb5 3 /* printbuf.c: Low Level print ring buffer Routines */
vsutardja 10:716484b1ddb5 4 /* */
vsutardja 10:716484b1ddb5 5 /***********************************************************************/
vsutardja 10:716484b1ddb5 6 #include <stdio.h>
vsutardja 10:716484b1ddb5 7 #include <stdarg.h>
vsutardja 10:716484b1ddb5 8
vsutardja 10:716484b1ddb5 9 #define CR 0x0D
vsutardja 10:716484b1ddb5 10 #define TEMT 0x40 /* serial COMTX empty */
vsutardja 10:716484b1ddb5 11 extern int write (int file, char * ptr, int len);
vsutardja 10:716484b1ddb5 12 int putchar_buf(int);
vsutardja 10:716484b1ddb5 13 int putcharNB(int);
vsutardja 10:716484b1ddb5 14
vsutardja 10:716484b1ddb5 15
vsutardja 10:716484b1ddb5 16 /* Background non-blocking print using ring buffer */
vsutardja 10:716484b1ddb5 17 #define PRNBUFSZ 0x100
vsutardja 10:716484b1ddb5 18 char printbuffer[PRNBUFSZ];
vsutardja 10:716484b1ddb5 19 int prnbuf_count = 0; /* number of characters in buffer */
vsutardja 10:716484b1ddb5 20 int prnbuf_pos = 0; /* location to store characters */
vsutardja 10:716484b1ddb5 21
vsutardja 10:716484b1ddb5 22
vsutardja 10:716484b1ddb5 23 int printfNB(const char *format, ...)
vsutardja 10:716484b1ddb5 24 { char buffer[128]; int i;
vsutardja 10:716484b1ddb5 25 char c;
vsutardja 10:716484b1ddb5 26 int val;
vsutardja 10:716484b1ddb5 27 va_list args;
vsutardja 10:716484b1ddb5 28 va_start( args, format );
vsutardja 10:716484b1ddb5 29 val = vsprintf(buffer, format, args ); // print to string using variable arguments
vsutardja 10:716484b1ddb5 30 for(i = 0; i < 128 && buffer[i]!= '\0'; i++) // copy string to print buffer
vsutardja 10:716484b1ddb5 31 { putcharNB((int)buffer[i]); }
vsutardja 10:716484b1ddb5 32 return(val);
vsutardja 10:716484b1ddb5 33 }
vsutardja 10:716484b1ddb5 34
vsutardja 10:716484b1ddb5 35
vsutardja 10:716484b1ddb5 36 // overload putchar to use non-blocking print to ring buffer instead
vsutardja 10:716484b1ddb5 37 int putcharNB(int c) {
vsutardja 10:716484b1ddb5 38 if (c == '\n') putchar_buf(CR);
vsutardja 10:716484b1ddb5 39 putchar_buf(c);
vsutardja 10:716484b1ddb5 40 return(c); }
vsutardja 10:716484b1ddb5 41
vsutardja 10:716484b1ddb5 42
vsutardja 10:716484b1ddb5 43 /* routine to print using print ring buffer */
vsutardja 10:716484b1ddb5 44 /* does not block - allows over runs */
vsutardja 10:716484b1ddb5 45 int putchar_buf(int c)
vsutardja 10:716484b1ddb5 46 {
vsutardja 10:716484b1ddb5 47 if(prnbuf_count >= PRNBUFSZ) return(0); /* no room - drop character */
vsutardja 10:716484b1ddb5 48 printbuffer[prnbuf_pos] = c;
vsutardja 10:716484b1ddb5 49 prnbuf_pos++;
vsutardja 10:716484b1ddb5 50 prnbuf_count++; /* need to make uninterruptable? */
vsutardja 10:716484b1ddb5 51 if(prnbuf_pos > (PRNBUFSZ-1)) prnbuf_pos = 0; /* wrap index to beginning of
vsutardja 10:716484b1ddb5 52 buffer */
vsutardja 10:716484b1ddb5 53 return(c);
vsutardja 10:716484b1ddb5 54 }
vsutardja 10:716484b1ddb5 55
vsutardja 10:716484b1ddb5 56
vsutardja 10:716484b1ddb5 57
vsutardja 10:716484b1ddb5 58
vsutardja 10:716484b1ddb5 59 int write (int file, char * ptr, int len) {
vsutardja 10:716484b1ddb5 60 int i;
vsutardja 10:716484b1ddb5 61
vsutardja 10:716484b1ddb5 62 for (i = 0; i < len; i++) putcharNB(*ptr++);
vsutardja 10:716484b1ddb5 63 return len;
vsutardja 10:716484b1ddb5 64 }
vsutardja 10:716484b1ddb5 65