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 #-------------------
Das ELF-File heißt mmexample.out.
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
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?
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
Bitte melde dich an, um einen Beitrag zu schreiben.