Probleme beim senden von strings über seriell

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren