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


von samuel (Gast)


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;
}

von Rufus T. Firefly (Gast)


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.

von samuel (Gast)


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....

von Rufus T. Firefly (Gast)


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.

von samuel (Gast)


Lesenswert?

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

von samuel (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.