www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mit Strings arbeiten


Autor: Nils Korf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
sollst du nicht c als "unsigned char" und nicht als "unsigned
int" definieren? :-)))

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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. ;)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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';

Autor: Nils Korf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch vielmals für die schnelle Antwort an einen offensichtlichen
anfänger - werd mich gleich noch mal dransetzen

Nils

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.