PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Strings & USART



n0Br4iN3r
17.11.2005, 13:23
Hallo,
ich hab folgendes Problem: Ich möchte per USART Strings senden, benutze dazu printf (vorher mit fdevopen umgeleitet). Dabei handelt es sich um relativ lange Strings (60 Zeichen, manchmal etwas mehr).
Ich habe eine if-Abfrage eingebaut, die je nach empfangenem String (gets) einige Befehle ausführt und einen String zurückschickt. Dieser String ist aber nicht der richtige (den ich im Aufruf von printf angegeben habe), sondern z.B. einer der in einem anderen Aufruf von printf an einer ganz anderen Stelle im Programm steht.
Kennt jemand dieses Problem und weiß eine Lösung?
Danke im Voraus
mfg n0Br4iN3r

SprinterSB
17.11.2005, 22:08
Irgendwas stimmt mit deinen Zeigern nicht.
Sind es Zeiger ins RAM, ins Flash?
Schau mal den asm an, dann fällt dir vielleicht was auf.
Hast du genug RAM?
Lass doch printf mas die Adresse des Strings schicken, dann weisst du evtl mehr.

Markusiii
23.12.2005, 23:36
Hallo !

Ich habe evtl. ein ähnliches Problem.

Ich kann immer nur einzelne Zeichen (eins nach dem anderen)
einlesenund zwar nur im Integer Format.
Nun besteht das Problem, dass ich diese Integer Zahl
zwar in einen ASCII Code umwandeln kann,
aber diesen ASCII Code kann ich nicht an einen bestehenden
String anfügen, sodass ich den gesamten String
nach der Übertragung auswerten könnte.

In meiner Verzweiflung hatte ich es nun geschafft,
die einzelnen Zahlen in ein Integer Array abzuspeichern,
da eben kein Puffer existiert, sodass ich mit einem Zeiger im gesamten Datenstring auswerten kann.
Ähnlich wie es Kaiser-F im Posting
https://www.roboternetz.de/phpBB2/viewtopic.php?t=9090
bereits gemacht hat.

Aber das ist ziemlich aufwändig, ständig schreiben zu müssen :

if (IntArray[5] = {65,66,67} )
{ Befehl erkannt }

anstatt einfach :

if (text [startZeichen 5] = "ABC" )
{ Befehl erkannt }

...oder ähnlich.

Hat jemand einen guten Rat, wie man Integer Zahlen
in einen ASCII String korrekt umwandelt,
und diesen dann schliesslich an einen bestehenden
String anfügt ?
Ähnlich wie im Basic :

Text = Text & chr$(xxx)


Grüsse,


Markus

PicNick
24.12.2005, 12:37
String anhängen in C
char string1[24]; // 24 ist irgendeine Länge
char string2[24];
strcpy( string1[strlen(string1)], string2);
beide stings müssen mit \0 abgeschlossen sein
Vergleich
if (strcmp(string1[5] , "ABC") == 0)

Markusiii
24.12.2005, 13:50
Hi Picknick !

Danke für Deinen Tip !
Nur leider bekomm ich da wieder Fehler wie
Type char is incompatible to type char*
oder zu char const*
und so weiter.
Ich hab nun mit strncat es soweit geschafft,
aber das Anfügen klappt nur das erste Mal, nach dem Starten,
und dann bringt er einen Data Abort.

char* text1;
char* text2;

text1 = "H";
text2 = "W12345";

strncat (text1, text2, 6);

printf("Text1 = %s\n", text1);

Output : Text1 = HW12345

Ich schätze mal, dass dann der Speicher nicht genügt.
Ich bin mit meinem Latein am Ende,
ich werde wahrscheinlich das Ganze dennoch mittels
Integerzahlen auswerten müssen.
Kann das dermassen kompliziert sein in C ?

Grüsse und fohes Fest !


Markus :-)

PicNick
25.12.2005, 09:36
Der Name "C" kommt von "casten". Mach Folgendes


strcpy( (char*)&string1[strlen((char*)&string1)], (char*)string2);
if (strcmp((char*)&string1[5] , "ABC") == 0)

Markusiii
25.12.2005, 18:34
Hallo !

Mit 'C' meinte ich die PRG-Sprache :-)
Jo also mit der vorherigen Erfahrung, ständig
irgendwelche Typenkonflikte zu haben, hab ich mich nun
doch so entschlossen, das alles in einem Integer Array
abzuspeichern und dann das Array zahlenmässig auszuwerten.
Es funktioniert tadellos.
Ist zwar etwas umständlich, aber ich hab es geschafft,
z.B. einen String "2300" ins Integer Array zu schreiben,
diesen String, welche ja Integerzahlen sind,
dann mittels 'minus 48' in einzelne verwertbare Zahlen
zu verwerten, dann mit einer Zehnerpotenz (10^x)
in eine komplett verwertbare Integerzahl zu wandeln,
mit der ich rechnen kann, in diesem Beispiel wäre das die Zahl 2300.

Viele Wege führen nach Rom :-)

Eine kurze Veranschaulichung des Codes im Anhang, wen es interessiert :-) (3Kb Textdatei)


Grüsse,

Markus

Markusiii
25.12.2005, 18:45
Sorry, ich hatte die wichtige void vergessen,
im Anhang nochmal. Sorry