Hallo Ihr guten Menschen, ich habe da mal ein Problem mit der ablage meiner Programmeinstellung ins Eprom. Ziel ist die Konfiguration meines Programmes ins Eprom abzulegen um nach einen Stromausfall/ Reset nicht wieder alles neu einstellen zu müssen. Hier mal ein Teil meines Programms:
1 | #include <avr/eeprom.h> |
2 | |
3 | |
4 | //für eprom
|
5 | uint8_t eeprom_def_EEProm_beschrieben EEMEM; |
6 | uint16_t eeprom_def_Rel_out_mask EEMEM; |
7 | uint16_t eeprom_def_Rel_auto_mask EEMEM; |
8 | uint16_t eeprom_def_IO_Feld[20][5] EEMEM; |
9 | |
10 | int main(void) |
11 | {
|
12 | initMcu(); |
13 | menu_Init(); //Menu init |
14 | lesen(); //Eprom lesen |
15 | i2c_init(); //I2C-Bus einrichten |
16 | sei(); // Global Interrupts aktivieren |
17 | |
18 | |
19 | while(1) // MAIN Schleife // |
20 | {
|
21 | Wenn hier im Programm Konfiguriert wird, |
22 | wird schreiben(); aufgerufen. |
23 | }
|
24 | }
|
25 | |
26 | |
27 | void schreiben(void) |
28 | {
|
29 | eeprom_busy_wait (); |
30 | eeprom_update_byte(&eeprom_def_EEProm_beschrieben, 1); |
31 | eeprom_busy_wait (); |
32 | eeprom_update_word(&eeprom_def_Rel_out_mask, Rel_out_mask); |
33 | eeprom_busy_wait (); |
34 | eeprom_update_word(&eeprom_def_Rel_auto_mask, Rel_auto_mask); |
35 | eeprom_busy_wait (); |
36 | eeprom_update_block (IO_Feld, eeprom_def_IO_Feld, sizeof(IO_Feld)); |
37 | }
|
38 | |
39 | void lesen(void) |
40 | {
|
41 | // nur lesen wenn eprom beschrieben worden ist
|
42 | eeprom_busy_wait (); |
43 | if ((eeprom_read_byte (&eeprom_def_EEProm_beschrieben)) == 1) |
44 | {
|
45 | eeprom_busy_wait (); |
46 | Rel_out_mask =eeprom_read_word (&eeprom_def_Rel_out_mask); |
47 | eeprom_busy_wait (); |
48 | Rel_auto_mask = eeprom_read_word (&eeprom_def_Rel_auto_mask); |
49 | eeprom_busy_wait (); |
50 | eeprom_read_block (IO_Feld, eeprom_def_IO_Feld, sizeof(IO_Feld)); |
51 | }
|
52 | else
|
53 | {
|
54 | nop(); |
55 | }
|
56 | }
|
Wenn ich die Speierung von IO_Feld weg lasse funktioniert alles soweit, erst wenn ich IO_Feld ins eprom schreibe überschreibt er glaube meine vorherigen werte! Warum? Habt Ihr eine Idee? gruß Matthias und danke schon mal für eure hilfe.