Forum: Mikrocontroller und Digitale Elektronik ATTiny85 EEPROM mit avrdude in Datei ausgelesen > hexeditor Verständnis


von mgolbs (Gast)


Lesenswert?

Hallo,

ich schreibe nach der Anleitung im AVR-GCC bei einem ATTiny85 8bit Werte 
in den EEPROM. Nun habe ich mir den EEPROM Inhalt nach Programmlauf per 
avrdude ausgelesen und verstehe einiges nicht.

# laut Datenblatt soll der ATTiny85 512byte für EEPROM haben. Ich dachte 
das wären maximal z.B. 512 8bit Variablen im EEPROM hex File???

Im hexfile sind es aber deutlich mehr als 512 byte Einträge, sogar mehr 
als 1024. Wie ist das zu verstehen?

Auch habe ich Verständnisprobleme für die Schreibreihenfolgen. Arrays 
werden mit der "Nummerrierung" und die Variablen (Platzhalter) gegen die 
Reihenfolge der Definition geschrieben.

Nur welchen Zustand hat der EEPROM (wenn nicht leer) und wie wird dann 
in die jeweiligen Adressen geschrieben. Beim Auslesen habe ich das 
Gefühl, dass die Variablen von den Speicheradressen her nicht einfach 
nacheinander geschrieben wurden...

Über z.B.
1
#include <stdint.h>
2
#include <avr/eeprom.h>
3
..
4
/* Byte */
5
uint8_t eeFooByte11 EEMEM = 0;
6
uint8_t eeFooByte12 EEMEM = 0;
7
..
8
eeprom_write_byte(&eeFooByte11, Bytewert1);
9
eeprom_write_byte(&eeFooByte12, Bytewert2);
10
..

mit den AVR-GCC Tutorial sollte man ja auch direkt in die Adressen des 
EEPROM schreiben können.
1
// Byte in das EEPROM schreiben
2
void EEPWriteByte(uint16_t addr, uint8_t val)
3
{
4
  eeprom_write_byte((uint8_t *)addr, val);
5
}
6
7
oder als Makro: 
8
#define   EEPReadByte(addr)         eeprom_read_byte((uint8_t *)addr)     
9
#define   EEPWriteByte(addr, val)   eeprom_write_byte((uint8_t *)addr, val)
10
11
Verwendung: 
12
EEPWriteByte(0x20, 128);   // Byte an die Adresse 0x20 schreiben

Kann ich die erste 8bit Variable auf Adresse 0x00, die zweite 8bit dann 
auf 0x08, 0x10 ... schreiben?

Über Tipps und Infos wäre ich sehr dankbar.

Gruß und Dank Markus

von holger (Gast)


Lesenswert?

>Im hexfile sind es aber deutlich mehr als 512 byte Einträge, sogar mehr
>als 1024. Wie ist das zu verstehen?

Du hast den Aufbau eines HEX Files nicht verstanden.
Suche bei google nach "Intel HEX".

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

holger schrieb:
> Du hast den Aufbau eines HEX Files nicht verstanden.
> Suche bei google nach "Intel HEX".

Genauer, du verwechselt HEX mit BIN. In einem BIN wären tatsächlich so 
viele Bytes, wie du im EEPROM benutzt. HEX ist ein Transportformat, 
indem nur Standard ASCII benutzt wird.

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:

> # laut Datenblatt soll der ATTiny85 512byte für EEPROM haben. Ich dachte
> das wären maximal z.B. 512 8bit Variablen im EEPROM hex File???

Ganz genau

> Im hexfile sind es aber deutlich mehr als 512 byte Einträge, sogar mehr
> als 1024. Wie ist das zu verstehen?

Das Hex-File hat einen Overhead. Zum einen stehen da zb ja auch die 
Adressen drinn, wo jedes Byte hinkommt bzw. herkommt. Zum anderen sind 
da Prüfsummen drinnen, die der Empfänger prüfen kann um eine korrekte 
Übertragung sicher zu stellen. Zum dritten ist ein Hex-File eigentlich 
mehr als ein File mit Anweisungen zu verstehen, was ein Empfänger mit 
den Daten machen soll.

Das Verhätlnis von reinen Nutzdaten zu der tatsächlichen Dateigröße der 
Datei (jeweils gemessen in Bytes) ist ca. 2.3 bis 2.5


> Auch habe ich Verständnisprobleme für die Schreibreihenfolgen. Arrays
> werden mit der "Nummerrierung" und die Variablen (Platzhalter) gegen die
> Reihenfolge der Definition geschrieben.

Ja. Macht ja nix.

> Nur welchen Zustand hat der EEPROM (wenn nicht leer) und wie wird dann
> in die jeweiligen Adressen geschrieben.

Das kann dir eigentlich ja egal sein.
Denn der Linker verteilt die im EEPROM, wenn man ihn lässt. Dein 
C-Programm greift ja auf das EEPROM immer über die Variablennamen zu. 
Und die sind ja immer gleich.

Wenn dir das nicht egal ist, dann musst du ein paar kleine Abstriche 
machen und dich selbst darum kümmern, dass bestimmte EEPROM Adressen für 
eine bestimmte 'Variable' reserviert werden.

Aber: da geht nur entweder - oder.
Entweder du überlässt das dem Compiler/Linker oder du machst alles 
selbst von Hand.

von mgolbs (Gast)


Lesenswert?

Hallo,

danke für den Tipp. Werde ich mir mal das Werk rund um "Intel Hex" zu 
Gemüte führen. Da ist ein normaler Texteditor das Werkzeug und nicht ein 
hex Editor?

Gruß Markus

von Karl H. (kbuchegg)


Lesenswert?

mgolbs schrieb:
> Hallo,
>
> danke für den Tipp. Werde ich mir mal das Werk rund um "Intel Hex" zu
> Gemüte führen. Da ist ein normaler Texteditor das Werkzeug und nicht ein
> hex Editor?

Ein Intel-Hex File ist eine Textdatei wie jede andere.

Ein Hex-Editor ist ein Werkzeug, welches so ein Hex-File lesen kann 
(unter anderem) und den Inhalt aufbereitet darstellt.
So wie Word eine Word-Datei lesen kann und dir den Inhalt präsentiert.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Um die Veriwrrung zu komplettieren... ;-)

avrdude kann Daten nicht nur im Intel-Hex-Format abspeichern, sondern 
auch in anderen Formaten. Beim Aufruf von avrdude einfach hinten statt 
":i" ein ":r" oder Ähnliches schreiben.

Auszug aus der avrdude-Hilfe:
1
 i    Intel Hex
2
3
 s    Motorola S-record
4
5
 r    raw binary; little-endian byte order, in the case of
6
      the flash ROM data
7
8
 m    immediate; actual byte values specified on the command
9
      line, separated by commas or spaces.  This is good for
10
      programming fuse bytes without having to create a sin
11
      gle-byte file or enter terminal mode.
12
13
 a    auto detect; valid for input only, and only if the
14
      input is not provided at stdin.
15
16
 d    decimal; this and the following formats are only valid
17
      on output.  They generate one line of output for the
18
      respective memory section, forming a comma-separated
19
      list of the values.  This can be particularly useful
20
      for subsequent processing, like for fuse bit settings.
21
22
 h    hexadecimal; each value will get the string 0x
23
      prepended.
24
25
 o    octal; each value will get a 0 prepended unless it is
26
      less than 8 in which case it gets no prefix.
27
28
 b    binary; each value will get the string 0b prepended.

von mgolbs (Gast)


Lesenswert?

Hallo,

vielen Dank an alle Schreibenden! Mit dem Texteditor kommt genau das 
raus, was ich von meinem Quelltext erwartet habe - prima! Das was der 
Hexeditor anzeigt ist für mich eher verwirrend. Sehr interessant sind 
auch die avr-dude Optionen zur Formatablage.

Vielen Dank und Gruß Markus

von Stefan E. (sternst)


Lesenswert?

Karl Heinz schrieb:
> Ein Hex-Editor ist ein Werkzeug, welches so ein Hex-File lesen kann
> (unter anderem) und den Inhalt aufbereitet darstellt.
> So wie Word eine Word-Datei lesen kann und dir den Inhalt präsentiert.

Nun ja, der "Standard" Hex-Editor macht das eher nicht. Er zeigt den 
binären Inhalt einer beliebigen Datei in Hex an.

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.