Forum: Compiler & IDEs Ausgabe mit switch -case


von Anfänger (Gast)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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.

von manoh (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.