Forum: Compiler & IDEs AVR Studio 5 EEPROM File Intel Hex Format Datenlänge RECLEN einstellen per Option avr-objcopy.ex


von NewWay (Gast)


Lesenswert?

Hallo Gemeinde,

ich arbeite grad mit AVR STudio 5 und versuche eine
EEProm File zu erstellen. Das klappt ansich auch wunderbar.

Nut leider ist das Format im EEprom anderst wie ich es
gerne hätte.

(Ausschnitt)
IST (AVR STudio 5):
:1000000000000000000000000000000000000000F0..
:10001000000090019001640064006400640000002E..

SOLL (ICCAVR 7):
:0E0000000000000000000000000000000000F2..
:0E000E00000000009001900164006400640096..

Nach längerem suchen und prüfen ist mir bewusst geworden
das der Dateninhalt der gleiche ist. "Nur" die Recordlänge
(RECLEN) vom Intelhex Format ist auf HEX 10 (Dez. 16) vor eingestellt
und ich möchte aber HEX 0E (Dez. 14) haben, da jeder Eintrag
im EEprom 14 Werte hat. Der Code wurde ursprünglich mal für
ICCAVR 7 geschrieben und ich portiere den gerade aufs AVR STudio 5
um. Im ICCAVR 7 gehts irgendwie automatisch mit 14 Einträgen.

Ich habe auch schon diverse Options der avr-objcopy.exe ausgetestet.
--srec-len <number>
 -b --byte <num>

Leider ohne Erfolg. Die unterschiedlichen Bezeichnung für
die Datenlänge verwirren mich auch sehr und erschweren
nur das Filtern der Suchergebnisse. Ich konnte auch nicht
finden, wo ich ausschließlich für .EEP File Paramter angeben kann.

In den Options im AVR Studio 5 habe ich auch noch
keine Änderungsmöglichkeit dazu finden können. Bzw. die
die ich probierte führten nicht zum Erfolg. Dann
wollte ich die interne Hilfe Seite aufmachen aber
es kommt nur "Page not found" 
http://msdn.microsoft.com/EN-US/library/AVR_STUDIOUSERGUIDE

Bitte liebe Gemeinde, zeigt oder erklärt mir jemand wie ich
das einstellen kann.

Grüßle

NewWay

von Karl H. (kbuchegg)


Lesenswert?

NewWay schrieb:


> das der Dateninhalt der gleiche ist. "Nur" die Recordlänge
> (RECLEN) vom Intelhex Format ist auf HEX 10 (Dez. 16) vor eingestellt
> und ich möchte aber HEX 0E (Dez. 14) haben, da jeder Eintrag
> im EEprom 14 Werte hat.

Das sollte aber einem ordentlich geschriebenm Code zum Einlesen eines 
Hex-Files keinerlei Schwierigkeiten machen.


> Leider ohne Erfolg. Die unterschiedlichen Bezeichnung für
> die Datenlänge verwirren mich auch sehr und erschweren
> nur das Filtern der Suchergebnisse.

Machst du das händisch, oder wie muss man sich das Vorstellen?

> Bitte liebe Gemeinde, zeigt oder erklärt mir jemand wie ich
> das einstellen kann.

Du verschwendest deine Zeit. Nimm einen ordentlichen Hex-File Leser oder 
ändere deinen Code zum Einlesen entsprechend um, dann ist das alles kein 
Problem mehr.

Genau solche Nachlässigkeiten und Annahmen rächen sich immer. 
Irgendwann. Und zwar jede Einzelne.

von Oliver (Gast)


Lesenswert?

NewWay schrieb:
> ich möchte aber HEX 0E (Dez. 14) haben, da jeder Eintrag
> im EEprom 14 Werte hat.

So lange die Einträge im EEPROM direkt hintereinander angeordnet werden 
(und warum sollte das nicht so sein?), ist das doch völlig egal.

Oliver

von NewWay (Gast)


Lesenswert?

Guten Morgen Karl Heinz Buchegger und Oliver,

vielen Dank für euer rasches Feedback.

Ich befürchte die Problemstellung hast Du etwas missverstanden!?

Bitte lasses es mich noch einmal versuchen:

Ich erzeuge die Intel HEX File über eine Header File. Ich nutze einen
HEX Editor um den Inhalt zu überprüfen. Es ist ein Struct im Code
definiert.
1
typedef  struct
2
{
3
  unsigned char    ByteVar1;
4
  unsigned char    ByteVar2;
5
  unsigned char    ByteVar3;
6
  unsigned char    ByteVar4;
7
  unsigned char    ByteVar5;
8
  unsigned char    ByteVar6;
9
  unsigned char    ByteVar7;
10
  unsigned char    ByteVar8;
11
  unsigned char    ByteVar9;
12
  unsigned char    ByteVar10;
13
  unsigned char    ByteVar11;
14
  unsigned char    ByteVar12;
15
  unsigned char    ByteVar13;
16
  unsigned char    ByteVar14;
17
} BSP_daten;

Um meine EEPROM File vom AVR Studio erzeugen zu lassen habe ich
in einer H-File ein Define erstellt.
1
#define EEPROM __attribute__((section (".eeprom")))

und anschließende die Daten für ins EEPROM.EEP.
1
BSP_daten SpeicherOrt1 EEPROM = {0xAA,0x55,0xAA,0x55,
2
0xAA,0x55,0xAA,0x55,
3
0xAA,0x55,0xAA,0x55,
4
0xAA,0x55
5
};

Wie gesagt, das AVR Studio 5 compiliert mir das auch und erzeugt
mir ein EEPROM File.

Aber eben mit einer RECLEN von HEX 10. Aus historischen Gründen MÖCHTE / 
WILL ich aber HEX 0E als RECLEN. Nur weiß ich eben nicht WO und WIE
ich das dem AVR Studio oder sonst wo einstellen kann.

Bitte zeigt bzw. erklärt mir doch jemand wie das geht!?

Im ICCAVR ist dieses Define nicht vorhanden. Es wird mit Pragma
erstellt.
1
#pragma data:eeprom+3
2
3
BSP_daten SpeicherOrt1 = {0xAA,0x55,0xAA,0x55,
4
0xAA,0x55,0xAA,0x55,
5
0xAA,0x55,0xAA,0x55,
6
0xAA,0x55
7
};
8
9
#pragma data:data

Der ICCAVR erzeugt mir aber "einfach so" ein EEPROM File
mit RECLEN von HEX 0E bzw. DEZ 14 !!

Was das +3 soll weiß ich übrigens nicht.

> Machst du das händisch, oder wie muss man sich das Vorstellen?
Nun die "Specs" im Netz benutzen unterschiedliche Begriffe,
aber die eigentliche Intel HEX Spec nennt den Eintrag RECLEN.
- Datenlänge
- Byte count
- ...

Wenn man jetzt diese, in Kombination mit anderen wie z.B.
AVR Studio, EEPROM etc, als Suchbegriff Googled, findet man
unzählige Antworten dazu, aber viel zu viele die nicht
im Kontext dazu stehen, leider. Das erschwert, mir zumindest, das
Filtern der relevanten Informationen dies bezüglich.

Viele Grüße

NewWay

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

NewWay schrieb:
> Ich nutze einen
> HEX Editor um den Inhalt zu überprüfen.

Dann benutze eine bessere Verifikationsmethode.  Mit avr-objcopy
kannst du den Inhalt zumindest in eine Binärdatei umwandeln
(vorausgesetzt natürlich, er beginnt an Adresse 0 und hat keine
Lücken), die kannst du dann gegen den Soll-Inhalt vergleichen lassen.

von Oliver (Gast)


Lesenswert?

NewWay schrieb:
> Aus historischen Gründen MÖCHTE /
> WILL ich aber HEX 0E als RECLEN.

Dann nochmal ganz deutlich: WARUM?
Welcher Teil deiner Software oder deienr Tools funktioniert nur mit 
einer RECLEN von 14, und warum?

Lösung: Such oder schreib dir ein Tool, daß das bestehende ihex-file 
einliest, und dir den output liefert, den du möchtest. Im Studio 5 kann 
man m.E. post-procressing-Programme definieren, dort hängst du das 
Programm dann rein.

Oliver

von NewWay (Gast)


Lesenswert?

Hallo Jörg Wunsch,

auch Dir danke sehr für dein Feedback.

In der Tat, es hat geklappt. Vielen Dank.
Da war ich wohl echt auf dem Holzweg.

Viele Grüße

NewWay

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.