Hallo zusammen,
ich sitze gerade vor einem Problem, das ich mir nicht erklären. Ich
definiere eine Variable i mit 2 Byte Länge ohne Vorzeichen. Dieser weiße
ich einmal über die RS232 einen Wert (0x55). Das Funktioniert. Danach
möchte ich der Variable den Wert 0x0800 zuweisen und der Debugger sagt
mir beim ausführen, dass die Variable den Wert 0x40 hat.
1 | int main (void)
|
2 | {
|
3 | // Scheduler initialisieren und Funktionen übergeben-------
|
4 | TASK_init();
|
5 | MAIN_taskInit();
|
6 | uart_init();
|
7 |
|
8 | uint16_t i = 0;
|
9 |
|
10 | sei();
|
11 |
|
12 |
|
13 | while(1) // Hintergrundtask
|
14 | {
|
15 | //Abfrage auf Updateprogrammierung
|
16 | i=uart_getc_wait ();
|
17 |
|
18 | if (i==0x55) //Hier hat die Variable den richtigen Wert 0x55
|
19 | { uint8_t flash_data[SPM_PAGESIZE+2];
|
20 | //Löschen des Flashspeichers
|
21 | memset(flash_data, 0xFF, sizeof(flash_data));
|
22 | i=0;
|
23 | for (i=0x800; i<0x1FFF; i=i+64) //Hier hat die Variable den Wert 0x40 statt 0x800
|
24 | {
|
25 | program_page((uint16_t)i, flash_data);
|
26 | }
|
27 |
|
28 | }
|
29 | uart_putc (0xA1);
|
30 | }
|
31 | //Bootloader ohne flashen verlassen
|
32 | else uart_putc(0x11);
|
33 |
|
34 | }
|
35 |
|
36 |
|
37 |
|
38 | return 0;
|
39 |
|
40 | }
|
Hoffe ihr könnt mir das erklären.
Vielen Dank für eure Hilfe!
Gruss
sz1985