Forum: Mikrocontroller und Digitale Elektronik mit Strings arbeiten


von Nils Korf (Gast)


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

von emil (Gast)


Lesenswert?

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

von Ronny Schulz (Gast)


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

von OldBug (Gast)


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

von Nils Korf (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.