mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Brauche hilfe zum erstellen einer Hex Datei aus einer Makefile


Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe mich ein wenig übernommen und zwar wollte ich eine 
Schaltung nachbauen und kriege jetzt die Programmierung nicht hin da ich 
noch nie mit makefiles gearbeitet habe.Könnte mir einer mal erklären wie 
ich das hinkriege.Ich habe das MyAVR MK2 USB.Und hier ist die makefile

# Hey Emacs, this is a -*- makefile -*-

# AVR-GCC Makefile template, derived from the WinAVR template (which
# is public domain), believed to be neutral to any flavor of "make"
# (GNU make, BSD make, SysV make)
F_CPU = 16000000


MCU = atmega32
FORMAT = ihex
TARGET = ter_main
SRC = $(TARGET).c lcd.c ter_rc5.c clock.c timebase.c dcf77.c ter_menu.c 
libsht.c set_output.c get_basic_setup.c ter_eeprom.c ter_manual_mode.c
ASRC =
OPT = 2

# Name of this Makefile (used for "make depend").
MAKEFILE = Makefile

# Debugging format.
# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
DEBUG = stabs

# Compiler flag to set the C Standard level.
# c89   - "ANSI" C
# gnu89 - c89 plus GCC extensions
# c99   - ISO C99 standard (not yet fully implemented)
# gnu99 - c99 plus GCC extensions
CSTANDARD = -std=gnu99

# Place -D or -U options here
CDEFS =

# Place -I options here
CINCS =


CDEBUG = -g$(DEBUG)
CWARN = -Wall -Wstrict-prototypes
CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct 
-fshort-enums
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) 
$(CEXTRA)


#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs


#Additional libraries.

# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

PRINTF_LIB = $(PRINTF_LIB_FLOAT)

# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min

# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt

SCANF_LIB =

MATH_LIB = -lm

# External memory options

# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = 
-Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff

# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = 
-Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff

EXTMEMOPTS =

#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)


# Programming support using avrdude. Settings and variables.

AVRDUDE_PROGRAMMER = usbasp
AVRDUDE_PORT = usb

AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep


# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y

# Uncomment the following if you do not wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See 
<http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v

AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) 
$(AVRDUDE_ERASE_COUNTER)


CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
MV = mv -f

# 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: build

build: elf hex

elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym


# Program the device.
program: $(TARGET).hex $(TARGET).eep
  $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) 
$(AVRDUDE_WRITE_EEPROM)




# 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).elf $(TARGET).cof


extcoff: $(TARGET).elf
  $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof


.SUFFIXES: .elf .hex .eep .lss .sym

.elf.hex:
  $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

.elf.eep:
  -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
  --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
.elf.lss:
  $(OBJDUMP) -h -S $< > $@

# Create a symbol table from ELF output file.
.elf.sym:
  $(NM) -n $< > $@



# Link: create ELF output file from object files.
$(TARGET).elf: $(OBJ)
  $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
.c.o:
  $(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
.c.s:
  $(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
.S.o:
  $(CC) -c $(ALL_ASFLAGS) $< -o $@



# Target: clean project.
clean:
  $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
  main.s $(TARGET).map $(TARGET).sym $(TARGET).lss \
  $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)

depend:
  if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
  then \
    sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
      $(MAKEFILE).$$$$ && \
    $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
  fi
  echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
    >> $(MAKEFILE); \
  $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)

.PHONY:  all build elf hex eep lss sym program coff extcoff clean depend

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alta! Aber sonst geht's dir gut?
Was fällt dir ein hier so einen Haufen Code direkt zu posten? Wozu gibt 
es Dateianhänge (siehe Netiquette).
Wette gleich beschwert sich der erste ;-D

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach ein Kommandofenster auf.
Wechsle per cd in dein Programmverzeichnis.

Tip "make all" ein.

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer wie wo was???Kein plan was du genau meinst

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wer wie wo was???Kein plan was du genau meinst

Kommandofenster, Konsole, Befehle per Tastatur eintippen,
kein Klickibunti. Sowas in der Art meinte ich.

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab überhaupt keine Konsole wo das geht

Autor: Nico22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cmd

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol
und du hast dich übernommen? wirklich? ^^

drück mal WIN+R. rest siehe post über meinem.

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sagt Befehl entweder falsch geschriebenoder konnte nicht gefunden 
werden

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Betriebssystem benutzt du?

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Windows 7 32bit

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
troll...

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit welchem gehts?? Geht virtuell Pc von microsoft

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit welchem gehts?? Geht virtuell Pc von microsoft

Hast du Winavr installiert?

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt bin ich soweit das no rule to make target clock .o needed ter 
main.elf stop kommt

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>jetzt bin ich soweit das no rule to make target clock .o needed ter
>main.elf stop kommt

Geht doch. Aber poste mal die genaue Meldung.

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
make:*** No rule to make target 'clock.o' , needed by 'ter-main.elf'. 
Stop.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>make:*** No rule to make target 'clock.o' , needed by 'ter-main.elf'.

Und was war davor? Ist das die einzige Meldung?
Häng dein Projekt doch mal als ZIP dran.
Dann kann man das ganze evtl. abkürzen;)

Autor: basti (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja bin jetzt schon wieder weiter aber kommt noch immer die selbe fehler 
meldung aber eben vorher3-4 andere dinge

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
clocck.c

Fällt dir da was auf?

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
juhu hab es geschaft war die clock.c falsch geschrieben vielen dank euch 
allen Da ist ein Idiot mal wieder was schlauer

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal jetzt noch eine andere Frage kann man mit der Makefile automatisch 
die Fusebits richtig einstellen?

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich wollte mich noch mal herzlich bedanken das ihr euch die Mühe 
gemacht habt mir das solange zu erklären bis es geklapt hat.Ich hatte 
bis jetzt nur Anfänger Projekte verwirktlich und das mit MyAVR Workpad 
Plus.Deshalb wußte ich nicht wovon ihr redet.Na ja jetzt ist es ja 
fertig auf dem Chip.Jetzt muss ich nur noch rausfinden wie ich die 
Fusebits einstellen muss das der Mega32 auf 16mhz läuft.Aber da gibt es 
glaub ich genug Anleitungen im Netz.

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.