Forum: Compiler & IDEs strtok geht nicht beim Atmega168p


von Hugo P. (portisch)


Lesenswert?

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?

: Verschoben durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nicht auszuschließen, dass das ein Bug ist.

Schreib doch mal einen Bugreport:

https://savannah.nongnu.org/bugs/?group=avr-libc

Bitte ein vollständiges, compilierfähiges Minimalbeispiel anhängen.
Von mir aus auch das generierte ELF-File, aber das Beispiel selbst
fände ich wichtiger.

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.