www.mikrocontroller.net

Forum: Compiler & IDEs Seltsames verhalten mega8


Autor: Spidii (Gast)
Datum:

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

Autor: Ulli (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: spidii (Gast)
Datum:

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

Autor: Hagen Re (hagen)
Datum:

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

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.