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


von Basti (Gast)


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

von Silvan K. (silvan) Benutzerseite


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

von holger (Gast)


Lesenswert?

Mach ein Kommandofenster auf.
Wechsle per cd in dein Programmverzeichnis.

Tip "make all" ein.

von basti (Gast)


Lesenswert?

Wer wie wo was???Kein plan was du genau meinst

von holger (Gast)


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.

von basti (Gast)


Lesenswert?

Ich hab überhaupt keine Konsole wo das geht

von Nico22 (Gast)


Lesenswert?

cmd

von Michael H. (michael_h45)


Lesenswert?

lol
und du hast dich übernommen? wirklich? ^^

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

von basti (Gast)


Lesenswert?

Der Sagt Befehl entweder falsch geschriebenoder konnte nicht gefunden 
werden

von Skua (Gast)


Lesenswert?

Welches Betriebssystem benutzt du?

von basti (Gast)


Lesenswert?

Windows 7 32bit

von Michael H. (michael_h45)


Lesenswert?

troll...

von basti (Gast)


Lesenswert?

Mit welchem gehts?? Geht virtuell Pc von microsoft

von holger (Gast)


Lesenswert?

>Mit welchem gehts?? Geht virtuell Pc von microsoft

Hast du Winavr installiert?

von basti (Gast)


Lesenswert?

ja

von basti (Gast)


Lesenswert?

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

von holger (Gast)


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.

von basti (Gast)


Lesenswert?

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

von holger (Gast)


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;)

von basti (Gast)


Angehängte Dateien:

Lesenswert?

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

von holger (Gast)


Lesenswert?

clocck.c

Fällt dir da was auf?

von basti (Gast)


Lesenswert?

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

von basti (Gast)


Lesenswert?

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

von basti (Gast)


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.

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
Noch kein Account? Hier anmelden.