Forum: Compiler & IDEs Seltsames verhalten mega8


von Spidii (Gast)


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

von Ulli (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> jedoch wenn ich zu viel Texte
> ausgebe, macht der Controller irgendetwas.

Dein RAM ist vollgelaufen.  Die Strings gehen standardmäßig alle
in den RAM.  Guck dir das Kapitel über ROM-Strings in der
(avr-libc-)Doku an oder aber die entsprechenden Teile hier im
Tutorial.

von spidii (Gast)


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

von Hagen R. (hagen)


Lesenswert?

>>>
Also ich habe den Ausgabeteil von "AVR-GCC-Tutorial". Ich habe mich
auch gefragt wozu man da 0 zurück schreibt?
<<<

Damit diese Funktion als Callback in fdevopen() herhalten kann.

Gruß Hagen

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.