Probleme beim senden von strings über seriell

Gast #132241
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;
}
Gast #132242
*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.
Gast #132243
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....
Gast #132244
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.
Gast #132247
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.