mikrocontroller.net

Forum: Compiler & IDEs makefile erweitern


Autor: Bernd Bömer (behbeh)
Datum:

Bewertung
0 lesenswert
nicht 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
#-------------------

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ELF-File heißt mmexample.out.

Autor: Bernd Bömer (behbeh)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd Bömer (behbeh)
Datum:

Bewertung
0 lesenswert
nicht 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

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.