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; }
*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.
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....
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.
aha...für die Tips...:-) hoffe dass ich das irgendwann noch alles kapier...sonst muss ich nochmals was anderes als ingenieur studieren....
wie kann ich erreichen, dass wenn der string gesendet wurde, der cursor im hyperterminal in die nächste zeile springt?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.