www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme beim senden von strings über seriell


Autor: samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
mit folgenden beiden Funktionen will ich strings vom uC über UART an
hyperterminal schicken. wenn ich das so wie unten schreibe fehlt immer
das erste Zeichen des strings...wieso?
danke



void put_string(char* complete_send_string_intern)

{

  char send_character;
  int string_size=0;
  put_char('\n');
  string_size=strlen(complete_send_string_intern);

  while(string_size)
    {
    send_character = *complete_send_string_intern;
    put_char(send_character);
    for(i=0;i<500;i++){};
    *complete_send_string_intern++;
    string_size--;

  }
  put_char('\n');

}


void put_char(u08 SendChar)
{
   while(!SciaRegs.SCICTL2.bit.TXRDY); //wait here till the last char
was transmitted
   SciaRegs.SCITXBUF=SendChar;
}

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*complete_send_string_intern++;

Auch hier hast Du offensichtliche Probleme Pointer und anderes
auseinanderzuhalten.
Schon mal in einem Buch nachgelesen, das sich mit C beschäftigt?

(Du solltest den * weglassen)

Auch lässt sich Deine Schleife anders formulieren:

char* p;

p = complete_send_string_intern;

while (p)
  {
    put_char(*(p++));
    // warten wie auch immer
  }

Das reicht.

Autor: samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke....wenn ich das so mache, dann wird nicht am ende des strings
abgebrochen,. sondern weiter geschrieben....was hab ich jetzt schon
wieder falsch gemacht?ja ich hab schon mal ein buch über c
gelesen...allerdings vieles nicht richtig kapiert....

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja - auch mir geschehen gelegentlich Tippfehler. War nicht
beabsichtigt.

Ersetze

  while (p)

durch

  while (*p)

und die Sache sieht besser aus.

(Damit wird das Stringende erkannt, das bekanntlich durch '\0'
gekennzeichnet ist).

Diese Art des Umgangs mit Strings etc. ist gar nicht schlecht in der
zweiten Auflage des K&R beschrieben - Du solltest mal das eine oder
andere Beispiel daraus in einem Debugger laufen lassen und Dir
Variableninhalte ansehen. Dadurch kann man auch was lernen.

Autor: samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha...für die Tips...:-)
hoffe dass ich das irgendwann noch alles kapier...sonst muss ich
nochmals was anderes als ingenieur studieren....

Autor: samuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich erreichen, dass wenn der string gesendet wurde, der cursor
im hyperterminal in die nächste zeile springt?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach nee.

\r\n senden.

Lies Dir mal die Beschreibung von Terminals, namentlich DEC VT100 durch
- und was sogenannte Steuerzeichen so alles anrichten können.

Nimmst Du zwei Instanzen von Hyperterminal und verbindest diese mit
einem Nullmodem, kannst Du auch ausprobieren, was geschieht.
\r (0x0d) ist Ctrl+M, \n (0x0a) ist Ctrl+L

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.