Seltsames verhalten mega8

Gast #364636
Lesenswert?

Hallo alle zusammen,

ich habe so ein kleines Menü geschrieben, um einige werte einzustellen
(über die Serielle Schnittstelle) jedoch wenn ich zu viel Texte
ausgebe, macht der Controller irgendetwas. Z.B. Hängt in einer Scheife,
und gibt den Selben Text immer aus. Obwohl da nirgends eine Schleife
ist. Oder er überschreibt alle werte, oder hängt sich auf.
Gebe ich jedoch eine Zeile weniger aus funktioniert alles perfekt.

Als Ausgebe Routine verwende ich:

int u_putc(unsigned char c)
  {
    while (!(UCSRA & (1<<UDRE)));
    UDR = c;
          return 0;
        }

void u_puts (char *s)
  {
    while (*s)
    {
      u_putc(*s);
      s++;
    }
  }

Texte gebe ich zb:

u_puts(" f...Geschwindigkeit       g...Relativen Wert anf.");
lfcr();
u_puts(" e...Motor ein/aus         s...Referenzen Speichern");
lfcr();

aus.

Was kann ich dagegen machen? Was könnte das sein? Läuft da irgend ein
Stak über? Aber wieso?

Danke in Voraus.

Mit freundlichen Grüßen
Gast #364637
Lesenswert?

hm.. mir kommt da deine Zeile mit "void u_puts (char *s)" spanisch
vor
bzw. den Text, den du der Funktion übergibst sollte ein char Array
sein. Ach ja und wozu bnötigt man ein INT für eine Rückgabe
return(0)(die dazu noch nicht mal ausgewertet wird) in einer Funktion
>int u_putc(unsigned char c)< ? .. und das unsigned kannst du auch
weglassen bei Text denke ich


mfg. Ulli
Gast #364639
Lesenswert?

Hallo,

vielen Danke für eure Hilfe!

Hab ich das richtig verstanden? Holt sich der uC jeden Text (String
nicht Zeichen) aus dem Flash in RAM und übergibt ihn dann einzeln an
das UART Register?

Danke.

@Ulli
Also ich habe den Ausgabeteil von "AVR-GCC-Tutorial". Ich habe mich
auch gefragt wozu man da 0 zurück schreibt?
Aber was soll an "void u_puts (char *s)" falsch sein?

Mit freundlichen Grüßen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren