Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

WinAvr makefile dla 2-ch plików

qluska 16 Jun 2006 10:41 1561 4
Computer Controls
  • #1
    qluska
    Level 11  
    Witam

    Mam problem z napisaniem makefile dla kompilatora WinAVR. Problem jest następujący, mam plik z programem głównym Atmega8.c oraz zestaw funkcji w drugim pliku funkcje.c.
    Poniżej zamieszczam przykładowy program, żeby uzmysłowić o co chodzi. Może ktoś wie jak powinnien wygladać prawidłowo w tej konfiguracj plik makefile.

    Kod Atmega8.c

    #include <avr/io.h>

    int main(void)
    {
    ustawienia();
    }

    Kod funkcje.c

    void ustawienia(void)
    {
    DDRD = 255; // PortD jako wyjściowy
    DDRB = 255; // PortB jako wyjściowy
    }

    Makefile :

    PRG = Atmega8 funkcje
    OBJ = Atmega8.o
    MCU_TARGET = atmega8
    OPTIMIZE = -O2

    DEFS =
    LIBS =

    # You should not have to change anything below here.

    CC = avr-gcc

    # Override is only needed by avr-lib build system.

    override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
    override LDFLAGS = -Wl,-Map,$(PRG).map

    OBJCOPY = avr-objcopy
    OBJDUMP = avr-objdump

    all: $(PRG).elf lst text eeprom

    $(PRG).elf: $(OBJ)
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)

    # dependency:
    demo.o: demo.c iocompat.h

    clean:
    rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
    rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)

    lst: $(PRG).lst

    %.lst: %.elf
    $(OBJDUMP) -h -S $< > $@

    # Rules for building the .text rom images

    text: hex bin srec

    hex: $(PRG).hex
    bin: $(PRG).bin
    srec: $(PRG).srec

    %.hex: %.elf
    $(OBJCOPY) -j .text -j .data -O ihex $< $@

    %.srec: %.elf
    $(OBJCOPY) -j .text -j .data -O srec $< $@

    %.bin: %.elf
    $(OBJCOPY) -j .text -j .data -O binary $< $@

    # Rules for building the .eeprom rom images

    eeprom: ehex ebin esrec

    ehex: $(PRG)_eeprom.hex
    ebin: $(PRG)_eeprom.bin
    esrec: $(PRG)_eeprom.srec

    %_eeprom.hex: %.elf
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@

    %_eeprom.srec: %.elf
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

    %_eeprom.bin: %.elf
    $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@

    # Every thing below here is used by avr-libc's build system and can be ignored
    # by the casual user.

    FIG2DEV = fig2dev
    EXTRA_CLEAN_FILES = *.hex *.bin *.srec

    dox: eps png pdf

    eps: $(PRG).eps
    png: $(PRG).png
    pdf: $(PRG).pdf

    %.eps: %.fig
    $(FIG2DEV) -L eps $< $@

    %.pdf: %.fig
    $(FIG2DEV) -L pdf $< $@

    %.png: %.fig
    $(FIG2DEV) -L png $< $@
  • Computer Controls
  • #2
    Robot_
    Level 18  
    oto fragment mojego makefila

    
    # Target file name (without extension).
    TARGET = main
    
    
    # List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c lcd.c twi.c funkcje.c przerwania.c
    
  • Computer Controls
  • #3
    qluska
    Level 11  
    No dobrze OK. Ale teraz z jakimi opcjami kompilujesz $(SRC).
  • #4
    Robot_
    Level 18  
    użyj standardowego Makefile z WinAVR i wstaw tylko w plik nazwy plików.
    Do tego utwórz plik nagłównkowe z definicjami funkcji i dołącz je w plikach gdzie wywołujesz funkcje z innego pliku.

    pozdr
  • #5
    qluska
    Level 11  
    Dzięki. Teraz funguje

    Trzeba było tylko tu dopisać funkcje.o

    OBJ = Atmega8.o funkcje.o