mikrocontroller.net

Forum: Compiler & IDEs Binärdaten direkt in den Flash kopieren


Autor: Jannis N. (vollmilch)
Datum:

Bewertung
0 lesenswert
nicht 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.htm... . 
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jannis N. (vollmilch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Timings dürfte schwierig werden, da hast du recht. Ich werde 
es einfach mal mit 20 MHz Controllertakt ausprobieren, wenns nicht 
hinhaut, werde ich mir was einfallen lassen müssen. Ich will halt erst 
mal die Daten in den Flash bekommen um damit zu experimentieren.

Autor: Jannis N. (vollmilch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.