Forum: Compiler & IDEs makefile erweitern


von Bernd B. (behbeh)


Lesenswert?

Hallo,
ich kenn mich noch nicht so gut aus mit diesen Makefiles.
Dieses erzeug zwar ein HEX File korrect, aber kein ELF File für die 
Simulation in AVR STUDIO.
Kann mir da einer helfen, . Wie macht man das?

Bernd

# makefile, written by guido socher
MCU=attiny2313
CC=avr-gcc
OBJCOPY=avr-objcopy
OBJDUMP=avr-objdump
REMOVE = rm -f

AVRINC=C:/WinAVR/avr/include/avr
AVRINCINT=C:/WinAVR/avr/include
OUTPUTDIR=Out
OBJLIBDIR=Obj

OBJ  = $(ASRC:.s=.o) $(SRC:.c=.o)

CFLAGS=-g -mmcu=$(MCU) -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums \
          -std=gnu99 -Wall  -Wstrict-prototypes -Os  -I$(OBJLIBDIR)

ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp -Wall

#-------------------
.PHONY: all
all:  mm_example.hex
#-------------------
mm_example.hex : mm_example.out
  $(OBJCOPY) -R .eeprom -O ihex $(OUTPUTDIR)/mm_example.out 
$(OUTPUTDIR)/mm_example.hex

  avr-size $(OUTPUTDIR)/mm_example.out
  @echo " "
  @echo "Expl.: data=initialized data, bss=uninitialized data, 
text=code"
  @echo " "

mm_example.out : mm_example.o
  $(CC) $(CFLAGS) -mno-interrupts -o $(OUTPUTDIR)/mm_example.out 
-Wl,-Map,$(OUTPUTDIR)/mm_example.map \
  $(OUTPUTDIR)/mm_example.o $(OBJLIBDIR)/mm_mod1.o 
$(OBJLIBDIR)/mm_mod2.o

#-------------------
mm_example.o : mm_example.c $(OBJLIBDIR)/mm_module.h
  $(CC) $(CFLAGS) -Os -c -o $(OUTPUTDIR)/mm_example.o mm_example.c


# avrdude
program: mm_example.hex
  avrdude -p attiny2313 -c stk200 -P lpt1 -e -U 
flash:w:$(OUTPUTDIR)/mm_example.hex

#-------------------
clean:
  $(REMOVE) $(OUTPUTDIR)/*.o
  $(REMOVE) $(OUTPUTDIR)/*.hex
  $(REMOVE) $(OUTPUTDIR)/*.map
  $(REMOVE) $(OUTPUTDIR)/*.out
  $(REMOVE) $(OUTPUTDIR)/*.lss
#-------------------

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das ELF-File heißt mmexample.out.

von Bernd B. (behbeh)


Lesenswert?

Hallo,
ja klappt, wunderbar...
Noch ein Problem jetzt.

Folgendes Programm soll eine Led 8 mal an aus schalten
Beim ersten mal geht es, auch mit anderen Werten

#define uint8_t Blkz = 8 ;

int main(void)
while(1) // Hauptschleife
 while(0 < Blkz)
 {
     Blkz -=1;
     PORTD = (1<<PD1);  /*LED on*/
     ... hier delay
     PORTD = (0<<PD1);  /*LED off*/
     ... hier delay
 }

 ... MM_Data holen, klappt alles

 switch (MM_Data)
 {
  case 0: PORTB = (1<<PB0); Blkz = 1;break;
  case 1: PORTB = (1<<PB1); Blkz = 2;break;
  case 2: PORTB = (1<<PB2); Blkz = 3;break;
  case 3: PORTB = (1<<PB3); Blkz = 4;break;
  case 4: PORTB = (1<<PB4); Blkz = 5;break;
  case 5: PORTB = (1<<PB5); Blkz = 6;break;
  case 6: PORTB = (1<<PB6); Blkz = 7;break;
  case 7: PORTB = (1<<PB7); Blkz = 8;break;
}
} //ende von main

Wenn die Variable Blkz dann z.B. auf 1 gesetzt wird blinkt es 4 mal, bei 
2 8mal usw...
Was mache ich da falsch ?
Gruss Bernd

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernd Bömer wrote:

> Noch ein Problem jetzt.

Mach dafür bitte einen neuen Thread auf (wegen der Leute, die den alten
über die Suche finden und dann völlig unverwandtes Zeug darin vorfinden
werden).  Beschreibe dabei auch deine Umgebung (*) und bau das Beispiel
so, dass man es auch zum Test compilieren kann statt irgendwas
irgendwie abzutippen -- du wärst nicht der erste, der sich dabei auch
mal vertippt, sodass man dann völlig falschen Fehlern hinterherrennt.

(*) Wo ist die LED dran, wofür sind die PORTB-Pins gut bei dir?

von Bernd B. (behbeh)


Lesenswert?

Hallo Jörg,
ok. Werde mich dran halten.
Hat sich aber schon erledigt.
Habe das Problem gefunden.
Die case anweisungen wurden mehrfach durchlafen und deshalb auch in der 
whileschleife die Ausgabe mehrfach...
Danke fuer die Antwort.

Aber dieses makefile macht mir immer noch Probleme mit dem 
Verstaendniss.
 Wie kann man denn zusaetzlich ein epp File erzeugen lassen.
Bernd

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.