www.mikrocontroller.net

Forum: Compiler & IDEs Ausgabe mit switch -case


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: manoh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.