-         

Ergebnis 1 bis 8 von 8

Thema: Probleme mit Strings & USART

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2005
    Ort
    Seewalchen
    Alter
    30
    Beiträge
    10

    Probleme mit Strings & USART

    Anzeige

    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
    Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null - und das nennen sie dann ihren Standpunkt.
    Albert Einstein

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    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.
    Disclaimer: none. Sue me.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.10.2005
    Beiträge
    48
    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
    http://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

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.10.2005
    Beiträge
    48
    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

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Der Name "C" kommt von "casten". Mach Folgendes
    strcpy( (char*)&string1[strlen((char*)&string1)], (char*)string2);
    if (strcmp((char*)&string1[5] , "ABC") == 0)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    27.10.2005
    Beiträge
    48
    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
    Angehängte Dateien Angehängte Dateien

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.10.2005
    Beiträge
    48
    Sorry, ich hatte die wichtige void vergessen,
    im Anhang nochmal. Sorry
    Angehängte Dateien Angehängte Dateien

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •