eprintf mit irq
Revision 5:8d716aa183dc, committed 2012-02-28
- Comitter:
- est2fe
- Date:
- Tue Feb 28 20:20:53 2012 +0000
- Parent:
- 4:5138a20c4989
- Commit message:
- V03.4 mit #ifdef MODULE_MBOS
Changed in this revision
eprintf.c | Show annotated file Show diff for this revision Revisions of this file |
diff -r 5138a20c4989 -r 8d716aa183dc eprintf.c --- a/eprintf.c Thu Jul 21 07:38:51 2011 +0000 +++ b/eprintf.c Tue Feb 28 20:20:53 2012 +0000 @@ -2,9 +2,13 @@ #define __EPRINTF_C__ #include "eprintf.h" -#include "mbos.h" +#ifdef MODUL_MBOS + #include "mbos.h" +#endif -extern mbos os; +#ifdef MODUL_MBOS + extern mbos os; +#endif extern Serial pc; // extern int eprintf_fehlerzaehler = 0; @@ -17,7 +21,9 @@ void TX_irq_eprintf (void) { // Wird bei Tx-Empty oder explizit aufgerufen - os.SetEvent (EV_EPRINTF, TASK_EPRINTF_ID); + #ifdef MODUL_MBOS + os.SetEvent (EV_EPRINTF, TASK_EPRINTF_ID); + #endif return; } @@ -26,11 +32,14 @@ // Returnwert: // 0 = ok // !0 = Fehler -> siehe defines + #ifdef MODUL_MBOS int zeit; + #endif int letzter_Fehler = 0; Timer tout; tout.reset(); tout.start(); + #ifdef MODUL_MBOS while (os.TestResource (RESOURCE_EPRINTF)) { // warten bis Resource (eprintf selber) wieder frei ist. @@ -65,6 +74,7 @@ // warten } } + #endif if ((printbuf->flags & FAST_VOLL)) { // Wenn der Stecker raus ist, laeuft der Buffer voll -> nichts mehr drucken! @@ -82,7 +92,7 @@ slen = strlen (cb); if (slen > (printbuf->buflen - printbuf->bufcnt - 2)) { - // wenn es nicht reinpasst, gleich mit Fehler zurück + // wenn es nicht reinpasst, gleich mit Fehler zur�ck letzter_Fehler = FEHLER_EPRINTF_STRING_ZU_GROSS; goto eprintf_end_fehler; } @@ -103,24 +113,32 @@ } // Fertig! Nun noch melden, dass neue druckbare Zeichen // da sind und per Interrupt ausgegeben werden koennen. - os.SetEvent (EV_EPRINTF, TASK_EPRINTF_ID); + #ifdef MODUL_MBOS + os.SetEvent (EV_EPRINTF, TASK_EPRINTF_ID); + #endif } } + #ifdef MODULE_MBOS os.FreeResource (RESOURCE_EPRINTF); - TX_irq_eprintf (); // Und das erste Zeichen, falls möglich, gleich ausgeben + #endif + TX_irq_eprintf (); // Und das erste Zeichen, falls m�glich, gleich ausgeben return 0; // 0 = kein Fehler eprintf_end_fehler: eprintf_fehlerzaehler++; + #ifdef MODULE_MBOS os.FreeResource (RESOURCE_EPRINTF); - return letzter_Fehler; // Mit Fehler zurück + #endif + return letzter_Fehler; // Mit Fehler zur�ck } void task_eprintf_verarbeitung (void) { // Grundsaetzlich gilt: Immer nur per os warten, wenn es nichts zu tun gibt! while (1) { eprintf_wait_event: // Bruch der Schleife while (printbuf->bufcnt > 0) + #ifdef MODULE_MBOS os.WaitEvent (EV_EPRINTF); + #endif while ((printbuf->bufcnt > 0) && (pc.writeable ())) { // So lange was ausgeben bis nicht mehr moeglich