www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stringverarbeitung mit AVR


Autor: shpank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen.

Seit einigen Tagen versuche ich, eine RS232-Schnittstelle für eine 
Kaffeemaschine zu basteln. Das ganze ist Teil eines Schulprojektes, wo 
es darum geht, den Kaffeekonsum in einer Firma zu erfassen und eine 
bargeldlose Bezahlmöglichkeit zu realisieren. Dies ist mein erstes 
Projekt mit AVRs

Aber bereits beim Befehle auswerten hapert es. Das Ding macht nicht das 
was es sollte/ich will.

Der UART selbst geht, das hab ich durch ein lokales Echo-Testprogramm 
auf dem AVR getestet.

Nur das strcmp-verzweigungs-konstrukt treibt mich in den Wahnsinn. 
Irgendwie blick ich da noch nicht so ganz durch.

Könnte mir da bitte jemand sagen welch groben Fehler ich da begangen 
habe?

Kompiliert wird mit AVR-GCC.

Danke im Voraus,

shpank

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon recvstr() ist ziemlicher Unsinn. Mal in ein C-Buch geguckt?

Autor: Mano Wee (Firma: ---) (manow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab's nur kurz überflogen, aber in recvstr() machst Du einen groben 
Fehler!
void recvstr(unsigned char * text)
{
  unsigned int next;
    unsigned char * tmp;
  text = tmp;                             
    do
  {
    next = USART_Receive();
      *tmp++ = next;
    }while( next != '\r');

    *tmp = '\0';
}

Zeiger angelegt, aber keinen Speicher => Du schreibst deine Sachen 
irgendwo hin, kann gut gehen, aber idR macht das nur Probleme.

C-Buch Stichwörter: Zeiger, Array, malloc

Autor: shpank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre es für den Anfang vielleicht besser, das ganze mit einem großen 
char-Array mit fixer größe zu machen, wo ich einfach alles reinschreibe?

Tut mir leid wenn ich euch auf den Wecker gehe. So wirklich viel Ahnung 
hab ich von dem Zeugs hier noch nicht, da ich aus der schönen bunten 
Welt der objektorientierten Programmierung (C#, Java) komme.

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mach dir nen kleinen Zeilenpuffer (so klein wie möglich, aber so 
groß wie nötig) und schreib da rein.

Irgendwie sowas in der Art:
char zeile[32];

void recvstr()
{
  int i;
  char c;

  for(i=0; i<(32 - 1); i++)
  {
    c = usart_getc();

    // Zeilenende erreicht?
    if(c == '\r')
    {
      // ja: dann String terminieren
      zeile[i] = '\0';
      break;
    }
    else
    {
      // nein: empfangenes Zeichen anhängen
      zeile[i] = c;
  }

  zeile[31] = '\0';   // zwingende Terminierung
}

MfG
Marius

Autor: shpank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Marius!

Ich werd das heute mal ausprobieren.

gibts sonst noch grobe fehler? jaja... ich weiß, meine main-methode 
sieht grauenhaft aus. das kommt vom rumfrickeln. das werd ich heute noch 
bereinigen.

schönen sonntag noch.

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.