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üß
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.