Guten leute, ich versuche seit gestern,meine alte Routine für die Datenausgabe am Hyper Terminal umzuformen. beim alter Rotine gebe ich ein string mit sprintf aus.Nur dies sehr viel Zeit kostet und verfälscht meine Meswerte und das Ganz Algo. Ich will jetzt die Ausgabe mit State Maschine machen und zwar ein Character pro zykluszeit ausgeben. Da ich nicht so viel über state maschine kenne, zeige ich hier meine Meinung und hoffe , dass ein nett mir das Program anschaut, und sag was richtig ist oder wäre, int x=0; // variable zustand char my_string[100]; ISR() { ADC_Ready Berechnung } Main() { init UART Interrupt enable while() { switch(x) case 0: break; //string aufbauen case 1: sprintf(my_tring,"s=%d\n, t=%d\n, u=%d\n"s,t,u); beak; case 2: putchar(my_string[x-1]); // character senden if(my_strin[x]==0) x=1; else x++; } } ich will pro durchlauf nur ein character senden. dh heibt jedes mal, wenn das Interrupt kommt wird ein character raus un soweiter bis das ganze string rauskommt.ist so richtig oder wie grüß
:
Verschoben durch User
Der ganze Ansatz ist irgendwie zweifelhaft. Eigentlich wäre für solche Sachen ein Ringbuffer das Konzept der Wahl. Du stellst den String erst mal in den Ringbuffer von wo er durch die UART Routinen im Hintergrund abgearbeitet wird. Bei deinem Ansatz hast du ständig die ganze UART Verwaltung im Blickfeld und musst sie einplanen. Besser ist es aber, wenn du dich um die Ausgabe an sich bei deiner Problemstellung gar nicht kümmern musst. Du übergibst deinen String dem Ausgabemodul und wie es von dort dann tatsächlich auf die Leitung kommt interessiert dich auf deiner Problemebene nicht weiter. Das UART Modul vom Peter Fleury arbeitet zb so. Aber wie auch immer. Da deine state-machine im Grunde ja nur 2 Zustände hat, ist ein switch-case etwas überkandidelt. Ein simples if - else tuts auch.
1) wenn x dein Zustandstand sein soll, wird der auch mal auf 1 gesetzt? 2) ist putchar bei dir blockierend oder nicht-blockierend? 3) x beschreibt bei dir die Position im String und den Zustand der Statemachine. Welche Logic soll dahinter stecken?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.