strtok geht nicht beim Atmega168p

OP #4534531
Hallo,

ich habe hier ein Problem mit strtok.
Ich habe einen Atmega168p mit AVR Studio 5.1.

Es ist im EEPROM ein String von Telefonnummern der mit "," Delimiter 
geteilt werden muss.

z.B.: "+49155151,+495151515"


1
  // read telephone numbers for SMS receivers
2
  uint8_t volatile tel_len;
3
  eeprom_read_block((void *)&tel_len, (uint8_t *)0 + sizeof(SIM_PIN), sizeof(tel_len));
4
  char volatile TeleNumbers[45] = {0};
5

6
  // max of 3 telephone numbers
7
  if (tel_len <= sizeof(TeleNumbers))
8
    eeprom_read_block((void *)TeleNumbers, (uint8_t *)0 + sizeof(SIM_PIN) + sizeof(tel_len), tel_len);

Debuggen tu ich mit dem JTAGICE mkII und wenn ich mir dann Online im 
IRAM das Array TeleNumbers ansehe passt alles: 2B 34 ..... 2C 2B 34 ... 
00

Nun parse ich den String mit strtok (oder auch schon mit strtok_r 
probiert):
1
  char *last;
2
  char *token;
3
  
4
  token = strtok_r(TeleNumbers, ",", &last);
5
  while (token) {
6
    token = strtok_r(NULL, ",", &last);
7
  }

Beim ersten Aufruf von strtok(_r) steht das in der Memory:
2B 34 ..... 06 2B 34 ... 00

D.H. der Delimiter wird nicht von 0x2C auf 0x00 sondern auf 0x06 
geändert.
Wenn ich den Code im AVR Simulator laufen lasse steht 0x00 statt 0x2C.

Nun ist natürlich das Problem, dass im token der ganze String steht da 
0x06 != 0x00.

Ich komme einfach nicht drauf woran das liegen könnte das es im 
Simulator geht und am Atmega168p nicht!

Kann ein Compiler Flag daran schuld sein?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.