Hallöchen, folgendes Problem: Mein Programm besteht aus diesen Zeilen: volatile char intval= 0; volatile char val= 0; ... val = usart_receive(); intval= atoi(val); if(intval==1) { usart_puts("intval==1"); } else usart_puts("intval!=1\r\n"); usart_puts("intval = "); utoa(intval,s,10); usart_puts(s); ... Nachdem ich mit HTERM einen ASCII Wert von 1 gesendet habe, sieht die Ausgabe dann wie folgt aus: intval!=1 intval=0 wie bediene ich die Funktion(en) atoi richtig? Derzeit habe Ich den Fehler, passing argument 1 of 'atoi' makes pointer from integer without a cast ...muss man noch ein Endezeichen hinten dran senden? wenn welches?
atoi braucht einen string als input, du hast aber nur ein einzelnes zeichen (ohne 0-terminator am ende). Wenn Du eh nur einzelne Zahlen empfängst, geht es noch einfacher: intval = usart_receive() - '0'; Das "- '0'" bewirkt das der ASCII-Offset abgezogen wird.
hm...ok... damit kann ich erstmal weiterarbeiten... kann aber somit nun nur 256 unteschiedliche Steuersignale rausgeben, daher freue ich mich über zusätzliche Erklärungen zu folgenden Fragen: Wie müsste ich einen String denn aufnehmen? mitels for-Schleife ein Array füllen? Wie groß müsste so ein Array sein? für jeden Buchstaben des längstmöglich zu erwartenen Strings ein Fach? Muss ich beim Senden mit HTERM dann explizit einen Nullterminator am Ende einfügen, also meinen gewünschten String eintippen und dann "\0" am Ende?
Großes Fragezeichen schrieb: > Wie müsste ich einen String denn aufnehmen? Zeichen für Zeichen > mitels for-Schleife ein Array füllen? um eine for-Schleife einsetzen zu können, müsstest du wissen, wie lang der zu empfangende Text ist. Das weißt du aber nicht. > Wie groß müsste so ein Array sein? > für jeden Buchstaben des längstmöglich zu erwartenen Strings ein Fach? mindestens. > Muss ich beim Senden mit HTERM dann explizit einen Nullterminator am > Ende einfügen, also meinen gewünschten String eintippen und dann "\0" am > Ende? Irgendein Zeichen, welches dem Empfänger sagt: Jetzt ist der Text zu Ende. Üblich ist es zb, das Return zu benutzen (\n) Denn daran sind Benutzer gewöhnt, dass sie bei einer Texteingabe diese mit einem Druck auf Return abschliessen. D.h. Deine Empfangsroutine empfängt Zeichen für Zeichen, bis es ein Return bekommt. Die Zeichen hat es alle in einem char-Array zwischengespeichert und wenn der Return kommt, hängt die Empfangsroutine da noch einen \0 drann um daraus einen gültigen C-String zu machen und übergibt dann diesen String der weiteren Auswertung.
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.