Forum: Compiler & IDEs eep-Datei erzeugen ohne AVR-Studio


von Sepp (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade ein Struct-Array ein bißchen auszulagern. Mein Ziel 
ist es, dieses Struct Array später immer wieder auszutauschen baer ohne, 
dass ich immer wieder den Quellcode konvertieren muss.
Meine Idee wäre somit, dass man aus dieses Array in das Eeprom legt und 
später einfach nur das Eeprom neu beschreibt.

Nur wie geht das. Ich würde dafür eine Methode suchen mit der ich 
einfach *.eep Dateien ohne Neukompilieren des Quellcodes erzeuge und 
danach schreibe.
Geht das? Bis jetzt hab ich nur gelesen, dass das makefile immer ne 
extra *.eep Datei erzeugt, falls nötig.
Kann ich alternativ dazu incht einfach eine hex-Datei aus meiner 
Struct-Array definition machen?

Bin etwas verwirrt. Mit sowas hab ich noch nie zu tun gehabt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Klar, das müsste gehen. Das Tool der Wahl ist OBJCOPY aus dem avr\bin 
Verzeichnis.

Wenn du eine Binärdatei mit dem Inhalt für das EEPROM hast, die sepp.bin 
heisst, kannst du daraus eine IHEX formatierte Datei sepp.eep machen, 
die du mit einem ISP Programmer in das EEPROM schreiben kannst. Die 
Kommandozeile dafür lautet:
1
d:\winavr\avr\bin\objcopy -I binary sepp.bin -O ihex sepp.eep

Umgekehrt geht es natürlich auch z.B. wenn du die erste *.eep Datei (die 
aus dem Sourcecode erzeugt wurde) in Binärform haben willst, um 
Binärpatches darauf anzuwenden.
1
d:\winavr\avr\bin\objcopy -I ihex sepp.eep -O binary sepp.bin

von Sepp (Gast)


Lesenswert?

Hört sich gut an. Das wär dann also mal nen Test wert. Noch ne Frage am 
Rande:
In dem Struct liegt auch ein Pointer, der auf was außerhalb vom Eeprom 
zeigen soll zwecks Schreibzugriffe und so. Das ganze sieht dann etwa so 
aus:

EEPROM:
static const def_struct varname[] = {
  {0xFFFF, (UNS8 *) &anderesstruct.daten},
  {0x0000, (UNS8 *) &anderesstruct.daten}
};

PROG:
anderesstruct_struct anderesstruct;

Kann das funktionieren?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kann funktionieren. Die Betonung liegt auf kann und es steht da nicht 
wird.

Ob die eingetragene Adresse stimmt, hängt davon ab, wie der Rest des 
Programms jeweils übersetzt ist. Wenn das Restprogramm neu übersetzt 
wird, ist zu prüfen, ob die Adresse sich geändert hat. Die Überprüfung 
kann mit dem MAP-Ausgabefile von der Übersetzung her erfolgen.

Meiner Ansicht nach ist bei der Definition des Feldes von Strukturen 
noch was im Argen. Im ARV-GCC-Tutorial steht was von bestimmten 
Schlüsselworten, die die Toolchain veranlassen die Daten in Nicht-RAM 
Bereiche zu legen. So wie es hier steht, steht das Feld im RAM.

von Sepp (Gast)


Lesenswert?

Ok. Danke. Hab mir schon sowas gedacht. Werd das evtl doch anders zu 
lösen versuchen. Das wird mir zu unübersichtlich. Da gibts sicher was 
besseres ;)

von Andreas M. (chillymu)


Lesenswert?

Mal ne Frage zu der sepp.bin Datei.

Wie muss denn solch eine Datei aussehen?

Gruß Andreas

von Stefan E. (sternst)


Lesenswert?

Andreas Müller schrieb:

> Wie muss denn solch eine Datei aussehen?

Die muss gar nicht irgendwie "aussehen".
Die einzige Bedingung, die die Datei erfüllen muss: sie darf natürlich 
nicht größer sein als das EEPROM.

von Andreas M. (chillymu)


Lesenswert?

Kannst du mir da mal ein beispiel zeigen. Schreib ich da einfach z.b. 
define anweisungen oder arrays mit inhalten die ich brauche oder wie 
kann so etwas aussehen.

von Stefan E. (sternst)


Lesenswert?

Andreas Müller schrieb:
> Kannst du mir da mal ein beispiel zeigen. Schreib ich da einfach z.b.
> define anweisungen oder arrays mit inhalten die ich brauche oder wie
> kann so etwas aussehen.

Nein. Der komplette Inhalt der Datei wird so wie er ist ins EEPROM 
geschrieben. Die hier im Thread genannte Methode ist z.B. dazu gut, 
Bilddaten ins EEPROM zu bekommen. Wenn du im EEPROM einfach nur ein paar 
Initialisierungswerte für ein Array haben möchtest, brauchst du eine 
solche Datei gar nicht.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

von Andreas M. (chillymu)


Lesenswert?

ich möchte aber eine seperate eep-Datei generieren in denen der Inhalt 
eines Displays steht.
Bsp: demo_test[] =  "Test hallo;" "12345";

von Stefan E. (sternst)


Lesenswert?

Dann ließ dir den Text hinter dem Link durch. Die eep Datei wird dann 
beim Übersetzen des Programms automatisch mit generiert (sofern du eines 
der "normalen" Makefiles benutzt). Wenn die dort gezeigte Vorgehensweise 
für dich nicht in Frage kommt, dann musst du schon etwas spezifischer 
werden.

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.