Moin moin, ich bin etwas überrascht, dass die variable Adressangabe in eeprom_read_dword nicht funktioniert: Wenn sequenzNr==0 bekomme ich die den richtigen Wert aus dem Eeprom, ansonsten -1 !? Die Daten im Eeprom werden mit dem AVR-Studio geschrieben. Hat jemand eine Erklärung dafür? (Tiny13A)
1 | #define MAX_SEQUENZEN 8
|
2 | |
3 | ...
|
4 | |
5 | EEMEM uint8_t m_SequenzNr ; |
6 | EEMEM uint8_t m_Dummy_3; |
7 | EEMEM uint32_t m_Sequenz0 ; |
8 | EEMEM uint32_t m_Sequenz1 ; |
9 | EEMEM uint32_t m_Sequenz2 ; |
10 | EEMEM uint32_t m_Sequenz3 ; |
11 | EEMEM uint32_t m_Sequenz4 ; |
12 | EEMEM uint32_t m_Sequenz5 ; |
13 | EEMEM uint32_t m_Sequenz6 ; |
14 | EEMEM uint32_t m_Sequenz7 ; |
15 | |
16 | ...
|
17 | |
18 | static inline void ReadEEPROM() |
19 | {
|
20 | uint32_t* pAdd; |
21 | g_nSequenzNr = eeprom_read_byte(&m_SequenzNr); |
22 | if( g_nSequenzNr >= MAX_SEQUENZEN ) |
23 | g_nSequenzNr = 0; |
24 | // pAdd = &m_Sequenz0 + g_nSequenzNr*4; //liefert Müll
|
25 | // g_curSequenz = eeprom_read_dword(pAdd); //
|
26 | |
27 | // die Alternative per switch funktioniert:
|
28 | switch( g_nSequenzNr ) |
29 | {
|
30 | case 0: g_curSequenz = eeprom_read_dword(&m_Sequenz0);break; |
31 | case 1: g_curSequenz = eeprom_read_dword(&m_Sequenz1);break; |
32 | case 2: g_curSequenz = eeprom_read_dword(&m_Sequenz2);break; |
33 | case 3: g_curSequenz = eeprom_read_dword(&m_Sequenz3);break; |
34 | case 4: g_curSequenz = eeprom_read_dword(&m_Sequenz4);break; |
35 | case 5: g_curSequenz = eeprom_read_dword(&m_Sequenz5);break; |
36 | case 6: g_curSequenz = eeprom_read_dword(&m_Sequenz6);break; |
37 | case 7: g_curSequenz = eeprom_read_dword(&m_Sequenz7);break; |
38 | }
|
39 | }
|