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
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.
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.
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
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.