Forum: Compiler & IDEs struct und eeprom Auslesen Prob


von ... .. (docean) Benutzerseite


Lesenswert?

Moin,

laut dem Tut vergibt der AVR-GCC die Var. Adressen ja scheinbar 
zufällig.

Daher wollte ich einen Test einbauen ob meine struct auch da stehen wo 
ich sie vermute...(bzw. ob überhaupt schonmal gespeichert wurde)
1
static struct config_anzeige_struct anzeige[16];
2
static struct config_anzeige_struct anzeige_eemem[16] EEMEM;
3
4
static struct config_pfeil_struct pfeil;
5
static struct config_pfeil_struct pfeil_eemem EEMEM;
6
7
...
8
9
10
extern void config_nach_eemem()
11
{
12
  eeprom_write_block(anzeige,anzeige_eemem,sizeof(anzeige));
13
  eeprom_write_block(&pfeil,&pfeil_eemem,sizeof(pfeil));
14
}
15
16
extern void config_aus_eemem(void)
17
{
18
  //Wenn gültiger Wert im EEMEM
19
  if(eeprom_read_byte(&anzeige[0].aktiv) < 2) 
20
      eeprom_read_block(anzeige,anzeige_eemem,sizeof(anzeige));
21
 //Ganze struct auslesen
22
23
 //Wenn gültiger Wert im EEMEM
24
  if(eeprom_read_byte(&pfeil.aktiv) < 2)
25
    eeprom_read_block(&pfeil,&pfeil_eemem,sizeof(pfeil));
26
 //Ganze struct auslesen
27
28
}

Die Variable aktiv gibts in beiden Struct als uint8_t, diese kann nur 0 
oder 1 als Wert annehmen...

ist das so richtig? oder stimmt da was noch nicht? Weil irgendwie tut 
das nicht... kA ob er überhaupt speichert oder liest...

Danke für alle Antworten.

von Karl H. (kbuchegg)


Lesenswert?

Nix Nix wrote:

> das nicht... kA ob er überhaupt speichert

das lässt sich doch leicht rausfinden.
Jedes Brennprogramm kann auch den Inhalt des EEPROM auslesen.
Das machst du mal und siehst nach was so in den Bytes drinnsteht.

von ... .. (docean) Benutzerseite


Lesenswert?

das sieht gut aus...
1
:2000000001009CFF64006C4930000000000000011C9CFF64006C5347617300000000011DE7
2
:200020009CFF64006C534769657200000001039CFF64006C493300000000000000049CFFF1
3
:20004000640027000000000000000000059CFF640027000000000000000000069CFF6400E5
4
:2000600027000000000000000000079CFF640027000000000000000000089CFF64002700FE
5
:200080000000000000000000099CFF6400270000000000000000000A9CFF64002700000001
6
:2000A0000000000000000B9CFF6400270000000000000000010964009600394261740000BB
7
:2000C000000000011E9CFF640039534E69636B000000011F9CFF64003953526F6C6C0000AD
8
:2000E00000010F9CFF6400394931350000000000010003DC05011C011C00006400011C0069
9
:20010000006400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98
10
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
11
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
12
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F

von Εrnst B. (ernst)


Lesenswert?

Statt
1
  if(eeprom_read_byte(&anzeige[0].aktiv) < 2) 
2
      eeprom_read_block(anzeige,anzeige_eemem,sizeof(anzeige));
vielleicht
1
  if(eeprom_read_byte(&anzeige_eemem[0].aktiv) < 2) 
2
      eeprom_read_block(anzeige,anzeige_eemem,sizeof(anzeige));
?

von ... .. (docean) Benutzerseite


Lesenswert?

omg...

jetzt tuts Vielen Dank!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.