-
        

Ergebnis 1 bis 6 von 6

Thema: avr-gcc: unrecognized option '--ooformat=ihex'

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2006
    Beiträge
    13

    avr-gcc: unrecognized option '--ooformat=ihex'

    Anzeige

    Moin,

    ich und ein freund von mir machen gerade die ersten erfahrungen mit einem Atmel atmega8. Bei ihm haben wir mehr schlecht als recht mit hilfe von AtmelStudio4, WinAVR und PonyProg unseren Controller ansprechen können.

    Nun bin ich zu hause mehr unter linux oder mac als unter windows. Daher wollte ich mich mal mit dem avr-gcc beschäftigen.

    Nach mehreren Stunden intensiven lesens habe ich mir folgende anweisung zusammengelesen:
    Code:
    avr-gcc -mmcu=atmega8 -Wl,--ooformat=ihex -omain.hex main.c
    Ich hoffe das ist richtig. Ich möchte nur eine Binärdatei für den atmega8 erstellen (hex-format). Mehr nicht. In der main.c habe ich nur avr/io.h eingebunden und eine leere int main funktion.

    Mein problem ist das ich immer folgende fehler-meldung erhalte:
    Code:
    /usr/lib/gcc/avr/3.4.3/../../../../avr/bin/ld: unrecognized option '--ooformat=ihex'
    /usr/lib/gcc/avr/3.4.3/../../../../avr/bin/ld: use the --help option for usage information
    Ich verstehe nicht warum das so ist. Ich habe das ganze fast 1 zu 1 aus dieser eschreibung genommen: http://www.roboternetz.de/wissen/index.php/Avr-gcc

    Freue mich über hilfe.

    Wenn ich das ganze gerade sehr ungeschickt angehe bitte zeigt mir den "eleganteren" weg. Ich bin noch ziemlich unerfahren mit Commandozeilem compilation. Also bitte keine fremdwort gefüllten kurznachrichten die mehr fragen als antworten aufwerfen

    mfg Prophet05

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    46
    Beiträge
    2.236
    Ich verstehe nicht warum das so ist. Ich habe das ganze fast 1 zu 1 aus dieser Beschreibung genommen
    Ja eben fast 1 zu 1
    die Option heißt --oformat und nicht --ooformat

    Außerdem ist es besser/einfacher auf das make Programm zuzugreifen und sich ein Makefile erstellen, oder erstellen lassen, Stichwort
    mfile.
    Man muß sich ja nicht unnötig mit den ganzen Flags herumschlagen, es sei den man ist voll der Hardcore Programmierer

    Gruß Sebastian

    EDIT:
    Ich lese es gerade, Du möchtest keine Kurzbeschreibungen, ich persönlich benutze dieses Makefile:
    Code:
    MCU = atmega8
    
    
    #Tagret einstellen
    TARGET = display
    #Sourcefiles
    SRC = $(TARGET).c  
    
    SRC += 
    
    FORMAT = ihex
    
    #Assemblerfiles
    ASRC= 
    
    OPT = s
    
    #Compilerflags
    CFLAGS = -g -O$(OPT) \
    	-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
    	-Wall -Wstrict-prototypes \
    	-Wa,-ahlms=$(<:.c=.lst)
    
    #Assemblerflags
    ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs
    
    #Linkerflags
    
    LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
    
    # Additional libraries
    #
    # Minimalistic printf version
    #LDFLAGS += -Wl,-u,vfprintf -lprintf_min
    #
    # Floating point printf version (requires -lm below)
    #LDFLAGS +=  -Wl,-u,vfprintf -lprintf_flt
    #
    # -lm = math library
    LDFLAGS += -lm
    
    # Define programs and commands.
    SHELL = sh
    
    CC = avr-gcc
    
    OBJCOPY = avr-objcopy
    OBJDUMP = avr-objdump
    SIZE = avr-size
    
    REMOVE = rm -f
    COPY = cp
    
    HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
    ELFSIZE = $(SIZE) -A $(TARGET).elf
    
    FINISH = echo Errors: none
    BEGIN = echo -------- begin --------
    END = echo --------  end  --------
    
    
    
    
    # Define all object files.
    OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
    
    # Define all listing files.
    LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
    
    # Combine all necessary flags and optional flags.
    # Add target processor to flags.
    ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
    ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
    
    
    
    # Default target.
    all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
    	$(TARGET).lss sizeafter finished end
    
    
    # Eye candy.
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
    	@$(BEGIN)
    
    finished:
    	@$(FINISH)
    
    end:
    	@$(END)
    
    
    # Display size of file.
    sizebefore:
    	@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi
    
    sizeafter:
    	@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi
    
    
    
    # Display compiler version information.
    gccversion : 
    	$(CC) --version
    
    
    
    
    # Convert ELF to COFF for use in debugging / simulating in
    # AVR Studio or VMLAB.
    COFFCONVERT=$(OBJCOPY) --debugging \
    	--change-section-address .data-0x800000 \
    	--change-section-address .bss-0x800000 \
    	--change-section-address .noinit-0x800000 \
    	--change-section-address .eeprom-0x810000 
    
    
    coff: $(TARGET).elf
    	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
    
    
    extcoff: $(TARGET).elf
    	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
    
    # Create final output files (.hex, .eep) from ELF output file.
    %.hex: %.elf
    	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
    
    %.eep: %.elf
    	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
    
    # Create extended listing file from ELF output file.
    %.lss: %.elf
    	$(OBJDUMP) -h -S $< > $@
    
    
    
    # Link: create ELF output file from object files.
    .SECONDARY : $(TARGET).elf
    .PRECIOUS : $(OBJ)
    %.elf: $(OBJ)
    	$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
    
    
    # Compile: create object files from C source files.
    %.o : %.c
    	$(CC) -c $(ALL_CFLAGS) $< -o $@
    
    
    # Compile: create assembler files from C source files.
    %.s : %.c
    	$(CC) -S $(ALL_CFLAGS) $< -o $@
    
    
    # Assemble: create object files from assembler source files.
    %.o : %.S
    	$(CC) -c $(ALL_ASFLAGS) $< -o $@
    
    
    
    
    
    
    # Target: clean project.
    clean: begin clean_list finished end
    
    clean_list :
    	$(REMOVE) $(TARGET).hex
    	$(REMOVE) $(TARGET).eep
    	$(REMOVE) $(TARGET).obj
    	$(REMOVE) $(TARGET).cof
    	$(REMOVE) $(TARGET).elf
    	$(REMOVE) $(TARGET).map
    	$(REMOVE) $(TARGET).obj
    	$(REMOVE) $(TARGET).a90
    	$(REMOVE) $(TARGET).sym
    	$(REMOVE) $(TARGET).lnk
    	$(REMOVE) $(TARGET).lss
    	$(REMOVE) $(OBJ)
    	$(REMOVE) $(LST)
    	$(REMOVE) $(SRC:.c=.s)
    	$(REMOVE) $(SRC:.c=.d)
    
    
    # Automatically generate C source code dependencies. 
    # (Code originally taken from the GNU make user manual and modified 
    # (See README.txt Credits).)
    #
    # Note that this will work with sh (bash) and sed that is shipped with WinAVR
    # (see the SHELL variable defined above).
    # This may not work with other shells or other seds.
    #
    %.d: %.c
    	set -e; $(CC) -MM $(ALL_CFLAGS) $< \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
    	[ -s $@ ] || rm -f $@
    
    
    # Remove the '-' if you want to see the dependency files generated.
    -include $(SRC:.c=.d)
    
    
    
    # Listing of phony targets.
    .PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
    	clean clean_list program
    Hab es mal irgendwo so abgekupfert und benutze es bei jedem Programm
    das kannst Du so 1 zu 1 übernehmen, einfach alles per copy/paste
    in einen Editor Deiner Wahl und als Makefile speichern.
    das muß dann in das Projektverzeichnis rein, wo auch Dein Programm drin liegt.
    Das einzigste, was Du anpassen mußt ist die Zeile
    Code:
    TARGET = display
    MCU = atmega8
    anstatt von display schreibst Du den Namen deines Programmes dahin ohne .c z.B. main.c Target = main
    MCU kommt dann halt noch der entsprechende Prozessor hin

    Jetzt nur noch im Projektverzeichnis make eintipen und sich über eine schöne main.hex freuen.
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2006
    Beiträge
    13
    Danke für deine schnelle und ausführliche antwort!

    Ich habe dein Makefile entsprechen angepasst und make im verzeichnis aufgerufen. Ich erhalte jedoch nur eine Fehlermeldung:
    Code:
    prophet@prophet-ubuntu:~/default-avr-projekt$ make
    Makefile:87: *** missing separator.  Schluss.
    Das entspricht bei mir (ich habe einige kommentarzeilen hinzugefügt):
    Code:
    # Eye candy.
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
       @$(BEGIN) # Zeile 87
    
    finished:
       @$(FINISH)
    
    end:
       @$(END)
    Anbei:
    > Kann ich diese lösung auch unterwindows (mit WinAVR) verwenden?
    > Ist es normal das man "make" extra installieren muss? Bei mir fehlte das tool. Ich musste erst das entsprechende paket installieren...
    > Sehe ich es richtig das nach 'ALL_ASFLAGS' nur noch informationen kommen welche zum aufräumen gedacht sind? Könnte man diese theoretisch löschen? (Bei compilation unter window auch problemlos verwenden?)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    46
    Beiträge
    2.236
    Dann sag ich einfach nur ka**ke

    Das liegt an der besonderen Formatierung von Makefile der Fehler sagt aus, daß man als Separatoren Tabs benutzen muß und ich denke, die sind hier irgendwo verloren gegangen...

    zu Deiner 1. Frage klar macht man das so unter Windows, bei Windows wird ja noch mfile mitgeliefert es ist ein Programm, das Dir Makefile erstellt.
    Da ich kein Windows habe, kann ich aber keine weiteren Angaben dazu machen, es gibt das auch für Linux, ich komme aber bis jetzt ohne aus...

    Es kann sein, daß man make extra installieren muß, war bei meinem Gentoo auch so

    Ja danach kommen Infos um aufzuräumen, aufgerufen wir es mit make clean

    Hier findest Du Infos zu mfile.

    Im Anhang Makefile, Du mußt nur die Erweiterung .txt wegmachen, das Forum erlaubt es nicht anders zu posten.

    Gruß Sebastian


    EDIT:

    Hier kann man auch vieles drüber nachlesen
    Angehängte Dateien Angehängte Dateien
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2006
    Beiträge
    13
    Nachdem ich alle einrückungen durch tabs ersetzt habe ging es problemlos. Ob die HEX datei funktioniert muss ich noch testen. Abersoweit schonmal vielen dank!

    Mit WinAVR und MFile werde ich mich wohl noch beschäftigen müssen, aber danke für die vielen inputs. Das zusammenspiel der komponenten ist mir nun ein wenig klarer geworden.

    EDIT: Oh danke für die datei...

    Das tutorial unter microcontrollers.net war eine der lektüren die ich bereits seit mehreren stunden studiert habe und trotzdem nicht voran gekommen bin. Erst in eurer Wiki habe ich etwas verstanden (in hinsicht auch den compiler).

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    46
    Beiträge
    2.236
    Kein Problem,
    Ich freue mich, wenn jemand auch mal unter die Haube schauen möchte.

    Viel Spaß mit avr-gcc

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •