strtok_r funktioniert nicht

Gast #177903
Hallo,

ich versuche einen string zu parsen, leider jedoch ohne Erfolg. Der
Code ist angehängt.
Der erste Teil ($GPGLL) wird korrekt abgeschnitten und der Pointer
dummie zeigt auch darauf. Doch die weiteren Pointer zeigen irgendwohin,
nur nicht auf den string.

Laut Doku sollte diese Funktion aber schon so irgendwie funktionieren:

"strtok_r parses the string s into tokens. The first call to strtok_r
should have string as its first argument. Subsequent calls should have
the first argument set to NULL. If a token ends with a delimiter, this
delimiting character is overwritten with a '\0' and a pointer to the
next character is saved for the next call to strtok_r. The delimiter
string delim may be different for each call. last is a user allocated
char* pointer. It must be the same while parsing the same string.
strtok_r is a reentrant version of strtok(). The strtok_r() function
returns a pointer to the next token or NULL when no more tokens are
found."

Kann mir irgendwer sagen warum das nicht geht?!?


Vielen Dank
Angehängte Dateien:
Gast #177904
Null problemo hier:

(gdb) targ rem :1212
Remote debugging using :1212
0x00000000 in __vectors ()
(gdb) load
Loading section .data, size 0x32 lma 0x1c6
Loading section .text, size 0x1c6 lma 0x0
Start address 0x0, load size 504
Transfer rate: 4032 bits in <1 sec, 31 bytes/write.
(gdb) b main
Breakpoint 1 at 0xd2: file foo.c, line 17.
(gdb) c
Continuing.

Breakpoint 1, main () at foo.c:17
(gdb) n
(gdb) p dummie
$1 = 0x800100 "$GPGLL"
(gdb) p data
$2 = 0x800100 "$GPGLL"
(gdb) p savept
$3 = 0x800107 "4700.2475,N,800.3416,W,161229.487,A*2C"
(gdb) n
(gdb) p st_latitude
$4 = 0x800107 "4700.2475"
(gdb) n
(gdb) p N_S
$5 = 0x800111 "N"
(gdb) n
(gdb) p st_longitude
$6 = 0x800113 "800.3416"
(gdb) n
(gdb) p O_W
$7 = 0x80011c "W"
Gast #177906
Hallo Jörg,

vielen Dank für Deine Antwort. Sorry, dass ich nicht angegeben habe mit
welchem System ich arbeite. Bei Dir scheints ja wirklich zu
funktionieren.
Ich verwende einen ATMEGA32. Compilieren tut es auch ohne Probleme,
aber ich erhalte leider nicht die erwarteten Strings zurück.

Bisher habe ich nicht herausgefunden, wie ich mit einem ATMEGA32
debuggen kann. Sehe ich das richtig, dass Du einen Simulator einsetzt?
Gibt es sowas auch für Windows?


Vielen Dank und Gruss     Reto
Gast #177907
> Sehe ich das richtig, dass Du einen Simulator einsetzt?

Ja.

> Gibt es sowas auch für Windows?

Ich habe hier einfach simulavr verwendet.  Ja, gibt's auch für
Windows, ist bei WinAVR mit dabei.  Ansonsten hast Du ja unter Windows
auch AVR Studio als Simulator sowie (gegen Entgeld) VMLAB.
Gast #177908
... bei WinAVR ist das dabei?!? Ich hab damit bis jetzt nur compiliert
und geladen. Kann mir jemand eine kurze Anleitung geben wie ich damit
debuggen kann? Ich find das irgendwie nicht raus... Der muss die object
files haben, oder?

Und wie geht das mit dem AVR Studio? Ich hab das eben am Anfang gleich
zur Seite gelegt, da man dort nur Assembler Code verarbeiten kann. Das
muss ja irgendwie auch die object files kriegen. Doch wenn ich die
öffne erscheinen nur kryptische Zeichen...


Vielen Dank
Gast #177909
$ simulavr -g -d atmega128
  $ avr-insight foo.elf

Im insight dann im Menü "Run->Connect to target"

Target: Remote/TCP
Hostname: localhost
Port: 1212

"OK"
"Run->Download"

Sieht ganz nett aus...

Oder halt

  $ make all extcoff

Und die foo.cof im AVRStudio öffnen.
Gast #177910
Ich nehme zwar AVR Studio nicht (hab' kein Windows), aber besser als
der alte COFF-Krempel sollte wohl das neue Beta-Test-Programm für
deren ELF-Unterstützung allemal sein.
Gast #177911
Das hab ich leider noch nicht getestet, deshalb "nur" der Hinweis
meinerseits auf extcoff ;)

Vielleicht schreibt ja mal jemand, der das ausprobiert hat, etwas
dazu...?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.