eprintf mit irq

Files at this revision

API Documentation at this revision

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
--- 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