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?