www.mikrocontroller.net

Forum: Compiler & IDEs String senden


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich versuche einen String über den UART zu senden. Er kommt heraus,
aber am Schluss des Strings kommen noch kosmische Zeichen. Der zu
sendene ist:
"$PSRF103,01,01,01,01*25"
Herauskommt jedoch, wobei beim $ der nächste wieder beginnt:
"$PSRF103,01,01,01,01*25<0>ÃA"¥%5´3£#ÆÆƦ&VlS"‚š’3‹ƒšbƒŠcƒŠcƒŠc 
ƒŠS“«6$PSRF103,01,01,01,01*25"

Ausserdem sollte der String mit CR und LF terminiert sein, dies
funktioniert jedoch nicht :-(.

kann mir jemand helfen?? übrigens die routine ist im file sendstrng.c
angehängt.

besten Dank und Gruss Martial

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde ja mal vermuten, daß es an Deiner USART_Transmit-Routine
liegt.

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo OldBug
ich habe diese Transmit funktion eigentlich getestet und sie hat
funktioniert, aber evt. war das ja zufall das es funktioniert hat.
Darum gebe ich sie dir mal.
Gruss Martial

void USART_Transmit( unsigned char data )
{
   // ueberprüfung ob register leer
   while ( !( UCSRA & (1<<UDRE)) );

   // daten in das register schreiben um zu senden
   UDR = data;
}

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

oder an falsch berechnetem length. Warum denn nicht:

void USART_SendString(unsigned char* data)
{
   //Alle zeichen nacheinander ausgeben
   while (*data)
   {
  USART_Transmit(*data++);
   }

   USART_Transmit(0x0D); //CR
   USART_Transmit(0x0A); //LF
}

Solte für 0-terminierten String problemlos funktionieren.

Matthias

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Matthias

mein String "$PSRF103,01,01,01,01*25" ist nicht 0 terminert, kann ich
dann dem String einfach eine 0 anhängen?

Gruss Martial

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, scheint dann wohl doch an der Länge zu liegen!?!?

Wenn Du Matthias Variante verwenden möchtest, dann musst Du das so
machen:

USART_SendString("\"$PSRF103,01,01,01,01*25\"");

Die "" terminieren den String entsprechend...

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

Bewertung
0 lesenswert
nicht lesenswert
Ich geb Dir noch nen Tipp: sowas lässt sich recht einfach auf dem PC
Testen. Siehe Anhang.

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

ich habe jetzt die funktion von Matthias genommen und die termination
von OldBug, aber es sendet immer noch die gleichen zeichen zum
schluss.

gruss Martial

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, OK.
Also auf dem PC läuft das Einwandfrei, da bleibt dann eigentlich nur
noch übrig, daß Du uns den gesamten Code zeigst. Ansonsten würde das
heir in Rate-Spielchen ausarten...

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe es jetzt geschafft, ich musste den terminator anders setzen.
Danke für Eure Hilfe.

gruss Martial

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte was?

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen

sorry das ich das nicht gleich geschrieben habe :o)..

Ich musste den Sendstring folgendermassen ausführen:

USART_SendString("$PSRF103,01,01,01,01*25 \n\r\0");

eigentlich sollte das \n den cr und lf machen, doch dies ging nicht
darum noch den \r.

Das \0 ist die 0 ternimierung.

Gruss Martial

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Also "xxxxxxxx" sollte eigentlich immer einen Null-terminierten
String, auch ohne \0, erzeugen.

Matthias

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht es auch, habe ich schon ausprobiert.
Er hat jetzt das Problem, daß er zwei \0 in seinem String hat.
Naja, wer Bytes verschwenden mag... ;)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.: Dein String sieht jetzt überigens ganz anders aus: die "" werden
nicht mehr übertragen!

Autor: Martial (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das wollte ich auch nicht

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha... gut zu wissen, ich hab sie nämlich aufgrund Deines ersten
Postings überhaupt erst in den String mit eingebaut...

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.