Hallo, die Funktion eeprom_wriet_word() funktioniert nicht. Nach dem lesen der Flags wird in diesem Fall nur das Bit "Erststart" in der Struktur "bit" auf 0 gesetzt und anschließend ins EEPROM geschrieben. Im EEPROM steht nach dem zurückschreiben der geänderter Struktur (Wert vorher 0x005C nacher 0x0054) immer noch 0x005C. Selbst wenn ich im Single Step das Programm durchlaufe, so daß das EEPROM genügend Zeit hat um schreibbereit zu sein funktioniert die Funktion nicht. Kann mir hierbei jemand weiterhelfen? Vielen Dank schon mal. Gruß Rufus357
1 | volatile struct uint16_t |
2 | {
|
3 | unsigned int bfrei_5:1; |
4 | unsigned int BetrArt:2; |
5 | unsigned int Erststart:1; |
6 | unsigned int SMS_by_Call:1; |
7 | unsigned int Rel_EA_Al:2; |
8 | unsigned int Relaisstatus:1; |
9 | unsigned int bfrei_1:1; |
10 | unsigned int bfrei_2:1; |
11 | unsigned int bfrei_3:1; |
12 | unsigned int bfrei_4:1; |
13 | unsigned int GSM_aktiv:1; |
14 | unsigned int NoCarrier:1; |
15 | unsigned int Ring:1; |
16 | unsigned int GSM_error:1; |
17 | }bit; |
18 | |
19 | int main(void) |
20 | {
|
21 | StatCarrier = 0; |
22 | init(); |
23 | usart_init(); |
24 | init_Int0(); |
25 | GSM_OFF(); |
26 | |
27 | ptr_flags = &bit; |
28 | *ptr_flags = (eeprom_read_word(&eeFlags) & 0x00FF); //Flags aus EEPROM lesen |
29 | |
30 | if (bit.Erststart ==1) |
31 | { //unkontrolierte Kalibrierung nach Programierung verhinden. |
32 | bit.Erststart = 0; |
33 | _delay_ms(20); |
34 | eeprom_write_word(&eeFlags, *ptr_flags); //Flags sichern; |
35 | while(1){;} |
36 | }
|
37 | .
|
38 | .
|
39 | .
|