Binärdaten direkt in den Flash kopieren

OP #2025537
Lesenswert?
• ▲
▼
Hallo miteinander,

ich habe vor mit einem Atmaga644 ein EPROM (27c256) zu emulieren um den 
Inhalt bequem per ISP verändern zu können. Die Rohdaten liegen mir binär 
als .bin-Datei vor. Nun muss ich die Daten aber irgendwie in den Flash 
des Controllers bekommen. Dazu hab ich mich auch mal informiert: 
Beitrag "Rohdaten direkt in Flash übertragen" , 
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_binarydata . 
Leider klappt das bei mir überhaupt nicht. Ich arbeite gerade mit dem 
AVR-Studio unter Windows und verwende ein externes Makefile, das ich mir 
mit MFile (WinAVR) zusammengeklickt habe. Darin muss man ja dann 
folgenden Abschnitt reinkopieren:

$(OBJDIR)/%.o : %.bin
        @echo Converting $<
        @$(OBJCOPY) -I binary -O elf32-avr \
        --rename-section 
.data=.progmem.data,contents,alloc,load,readonly,data \
        --redefine-sym _binary_$*_bin_start=$* \
        --redefine-sym _binary_$*_bin_end=$*_end \
        --redefine-sym _binary_$*_bin_size=$*_size_sym \
        $(<) $(@)
        @echo "extern const char" $(*)"[] PROGMEM;" > $(*).h
        @echo "extern const char" $(*)_end"[] PROGMEM;" >> $(*).h
        @echo "extern const char" $(*)_size_sym"[];" >> $(*).h
        @echo "#define $(*)_size ((int)$(*)_size_sym)" >> $(*).h

Das hab ich ganz unten, wo auch die C Files in o Files umgewandelt 
werden reinkopiert. Die rom.bin liegt in meinem Projektordner. Das 
funktioniert bei mir aber nicht. Die rom.bin wird nicht umgewandelt und 
mein Speicherverbrauch liegt auch nur bei ca. 150bytes. Wenn ich das 
ganze ein Stückchen höher ins Makefile kopiere und die % durch rom 
ersetze wird die Datei umgewandelt, aber der Compiler macht nicht mehr 
was er soll. Wäre nett wenn mir jemand grob beschreiben könnte was ich 
zu tun habe, ich bin langsam echt am verzweifeln.

Vielen Dank
Gruß Jannis
Persönliche Seite #2025544
Lesenswert?
• ▲
▼
Jannis N. schrieb:
> ich habe vor mit einem Atmaga644 ein EPROM (27c256) zu emulieren

Wie willst Du da vorgehen? Benutzt Du ein externes SRAM, das Du mit dem 
AVR befüllst, oder hast Du die Idee, das EPROM-Verhalten komplett in 
Software nachzuahmen? Letzeres dürfte eine ziemliche ... Herausforderung 
sein, sofern der Emulator halbwegs übliche Zugriffszeiten einhalten 
soll.
OP #2033088
Lesenswert?
• ▲
▼
Nach ewigem Rumprobieren ist es mir jetzt doch gelungen die Daten in den 
Flash zu bekommen. Für alle die auch damit Probleme haben sollten hab 
ich mal das Makefile angehängt.

Verändert oder ergänzt wurde:
BINF = rom.bin


# Define all object files.
OBJ = $(BINF:%.bin=$(OBJDIR)/%.o) $(SRC:%.c=$(OBJDIR)/%.o) 
$(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)

# Define all listing files.
LST = $(BINF:%.bin=$(OBJDIR)/%.lst) $(SRC:%.c=$(OBJDIR)/%.lst)


$(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
$(OBJDIR)/%.o : %.bin
  @echo Converting $<
  @$(OBJCOPY) -I binary -O elf32-avr \
  --rename-section .data=.progmem.data,contents,alloc,load,readonly,data 
\
  --redefine-sym _binary_$*_bin_start=$* \
  --redefine-sym _binary_$*_bin_end=$*_end \
  --redefine-sym _binary_$*_bin_size=$*_size_sym \
  $(<) $(@)
  @echo "extern const char" $(*)"[] PROGMEM;" > $(*).h
  @echo "extern const char" $(*)_end"[] PROGMEM;" >> $(*).h
  @echo "extern const char" $(*)_size_sym"[];" >> $(*).h
  @echo "#define $(*)_size ((int)$(*)_size_sym)" >> $(*).h
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.