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.
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 |
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?
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.
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 ;)
Mal ne Frage zu der sepp.bin Datei. Wie muss denn solch eine Datei aussehen? Gruß Andreas
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.
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.
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
ich möchte aber eine seperate eep-Datei generieren in denen der Inhalt eines Displays steht. Bsp: demo_test[] = "Test hallo;" "12345";
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.