hallo Leute, ich versuche seit einigen Tagen meine allgemeinen C Kenntnisse auf die Mikrokontroller Programmierung anzuwenden stecke aber im Moment etwas fest. Mir geht es drum Zeichen, die ich über den uart zugeschickt bekomme auf dem AVR auszuwerten. Sprich ich will die empfangenen Zeichen zusammensetzen und dann aus diesen Strings Befehle,Parameter,... rausfischen. die Einzelzeichen empfang ich schon wunderbar. Probleme bereitet mir im Moment das Zusammenfügen. unsigned int c; // in dieser Variable erhalte ich mein zeichen von dem PC char buffer[10]; strcpy (buffer,""); c = uart_getc(); switch (c) { case '(': uart_putc ('S'); break; case ')': uart_putc ('E'); break; default:{ strcat (buffer, (unsigned char) c); uart_puts (buffer); break;} } mir ist klar, das das ganze noch ziemlich am Anfang steht und so wohl noch längere Zeit nicht funktioniert. Mir gehts im Moment nur um den Ausdruck mit strcat. Da bekomme ich nämlich folgendes warning: warning: passing arg 2 of `strcat' makes pointer from integer without a cast und am ende funktioniert gar nichts. Nils
hi, sollst du nicht c als "unsigned char" und nicht als "unsigned int" definieren? :-)))
"unsigned int c" sollte, wie schon oben beschrieben "unsigned char c" sein. "strcat (buffer, (unsigned char) c)" ist auch falsch. strcat() verkettet strings und keine einzelnen Zeichen. Den ganzen strcpy() und strcat() sollte man weglassen. Hier verarbeitest Du ja nirgends wirklich Strings. Also: strcpy (buffer,""); -> weglassen und strcat (buffer, (unsigned char) c); -> unsigned char pos = 0; (oder int) buffer[pos] = c; pos++; buffer[pos] = '\0'; Und vor allem noch überprüfen, ob der Puffer nicht überläuft. Es scheitert also eher weniger an der Mikrocontrollertechnik, sondern vielmehr an den allgemeinen C-Kenntnissen. ;)
Bei der Definition von buffer evtl. noch initialisieren, wenn es sich um ein Stack-Array handelt (also temporäre Variable innerhalb einer Funktion). char buffer[10] = { '\0' }; oder char buffer[10]; buffer[0] = '\0';
Danke euch vielmals für die schnelle Antwort an einen offensichtlichen anfänger - werd mich gleich noch mal dransetzen Nils
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.