logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Programowanie avr w c pod ubuntu

maly_elektronik 16 Sty 2009 12:05 5036 8
  • #1 6006641
    maly_elektronik
    Poziom 23  
    Witam :)
    Od jakiegoś czasu próbuje skompilować program dla procesora avr (oczywiście pod linuxem). Niestety w żaden sposób mi to nie wychodzi. Czy może mi ktoś wyjaśnić co i jak zrobić aby kompilować programy na avr'ki :?:
    PS. Próbowałem instalować gcc-avr i binutils ale w momencie w którym próbuje skompilowac te programy otrzymuje błędy
  • #2 6006877
    kred
    Poziom 20  
    U mnie działa.

    Podejrzewam że na forum nikt nie jest wróżką i z fusów Ci nikt nie wywróży co jest nie tak. Napisz wiecej informacji - jaki masz sprzęt, oprogramowanie, krok po kroku co robisz że Ci nie działa. Wyhledawałeś już na google jakiś tutorial? Podejrzewam że przynajmniej jeden byś znalazł.
  • #3 6007372
    cbreaker
    Poziom 11  
    Domyślnie w Ubuntu nie są instalowane narzędzia developerskie. Dlatego jeżeli np nie kompilowałeś nigdy jądra linuxa własnoręcznie to nie masz pewnie wielu programów potrzebnych do kompilacji.

    Na pewno musisz zainstalować paczki typu gcc-avr ,binutils-avr i avr-libc. Sprwdź czy masz takie pakiety jak np autoconf, make i kernel-headers. Jeżeli to będzie to powinno się skompilować.

    Najlepiej jakbyś wkleił co wyrzuca Ci kompilator podczas próby skompilowania programu.

    Pozdrawiam
  • #5 6008226
    maly_elektronik
    Poziom 23  
    kred najpierw doczytaj co napisałem a potem się wypowiadaj bo wyraźnie napisałem że chodzi o kompilace a nie fuse bity i programowanie.

    Mam napisany najprostszy program w C (ustawia tylko port C na wyjście i podaje stan 0xFF). Posiadam plik makefile (znajduje się on w katalogu z programem w C) wchodzę do konsoli wpisuje cd Pulpit-> make i wywala błąd Makefile:16: *** brakujący separator. Stop.

    Poniżej treść Makefile:
    
    PRG            = main
    OBJ            = main.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) -I/usr/avr/include -D__AVR_ATMega8__
    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)
    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 $< $@
  • #6 6008608
    romario4
    Poziom 16  
    Najwidoczniej jest coś nie tak z plikiem makefile. Proponuję użyć pliku Makefile np. z pakietu WinAVR.
  • #7 6008696
    Dr.Vee
    VIP Zasłużony dla elektroda
    Klasyczny błąd - w regule komendy do wykonania muszą się zaczynać od znaku tabulacji.

    W Twoim przypadku:
    clean:
        -rm -rf ...
        -rm -rf ...


    Niestety Makefile niezbyt się nadają do operacji typu copy-paste :)

    Pozdrawiam,
    Dr.Vee
  • #8 6009584
    Freddie Chopin
    Specjalista - Mikrokontrolery
    maly_elektronik napisał:
    kred najpierw doczytaj co napisałem a potem się wypowiadaj bo wyraźnie napisałem że chodzi o kompilace a nie fuse bity i programowanie.

    gratulacje! jestes wielkim_elektronikiem [; tylko pokaz nam gdzie ktos tu (poza toba) pisal o fuse bitach...

    piszesz sobie nowy temat w stylu 'mam costam, costam sciagnalem, cos tam napisalem, nie dziala mi, pomocy!' i od razu oczekujesz porad typu 'masz zle przecinek w 15 linii 7 pliku'... zart? prowokacja? nowe standardy wypowiedzi? ja z twojego pierwszego postu wywnioskowalem, ze masz problem, zeby skompilowac toolchain'a avr-gcc dla linuxa... albo ja jestem glupi, albo...

    4\/3!!
  • #9 6011077
    Dr.Vee
    VIP Zasłużony dla elektroda
    Freddie, po prostu niektórzy są już takimi hardcoreowymi elektronikami, że "wróżenie z fusów" kojarzy im się tylko z jednym ;)

    Pozdrawiam,
    Dr.Vee
REKLAMA