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

[WinAVR] Problem z kompilacją

lopez123 16 Lip 2008 22:35 3162 14
  • #1 5349546
    lopez123
    Poziom 13  
    Witam.
    Jestem nowicjuszem w świecie mikrokontrolerów.
    Chciałem skompilować ten kod:

    
    #include <avr/io.h>
    
    /******************************************************
    
                               Definicje stałych
    
    *******************************************************/
    
    #define F_CPU        1000000                                       /* 1MHz zegar procesora */
    
    #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */
    
    /**************************************************************
    
                                                  Koniec definicji stałych
    
    **************************************************************/
    
     
    
    //definiujemy stany portu sterującego diodą LED
    
    #define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
    
    #define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)
    
    // Piszemy procedury opóźnienia czasowego
    
    void delay(unsigned int us) 
    
    { 
    
        unsigned int delay_loops;
    
        register unsigned int  i;
    
        delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty) 
    
        for (i=0; i < delay_loops; i++) {};
    
    } 
    
    void delayms(unsigned int ms)
    
    {
    
                unsigned int i;
    
                for (i=0;i<ms;i++)
    
                            {
    
                            delay(999);
    
                            asm volatile (
    
                            "WDR"::);
    
                                                   }
    
    } 
    
    int main (void) 
    
    {
    
           for (;;)  
    
                      {
    
                            LED_ON;
    
                            delayms(1000);
    
                            LED_OFF;
    
                            delayms(1000);
    
                      }
    
     
    
        return (0);     
    
    }
    


    lecz wyświetla mi to:

    
    > "make.exe" all
    avr-gcc -g -Wall -O2 -mmcu=atmega8    -c -o led.o led.c
    led.c: In function 'main':
    led.c:71: warning: implicit declaration of function 'sbi'
    led.c:75: warning: implicit declaration of function 'cbi'
    avr-gcc -g -Wall -O2 -mmcu=atmega8  -Wl,-Map,led.map -o led.elf led.o 
    led.o: In function `main':
    C:\AVR_projekty\LED/led.c:65: undefined reference to `sbi'
    C:\AVR_projekty\LED/led.c:65: undefined reference to `sbi'
    C:\AVR_projekty\LED/led.c:75: undefined reference to `sbi'
    C:\AVR_projekty\LED/led.c:75: undefined reference to `cbi'
    make.exe: *** [led.elf] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:04
    



    Kod pochodzi ze strony http://www.patron.ehost.pl/patron/artykuly/vinavr/AVR_tutorial.htm a program to WinAVR.
    Proszę o pomoc.
  • #2 5349565
    ZbeeGin
    Poziom 39  
    W poprzednim temacie zostało napisane, że usunięto sbi() i cbi(). Zaraz temat wyląduje w koszu, bo problem zastąpienia sbi() i cbi() był opisywany wielokrotnie na tym forum. Wystarczy poszukać.
  • #4 5349605
    BoskiDialer
    Poziom 34  
    lopez123: na początku programa utwórz sobie makra:
    #define sbi(reg, bit) (reg) |= _BV(bit)
    #define cbi(reg, bit) (reg) &=~_BV(bit)
    i będzie działać bez zmian w dalszej części programu.
  • #5 5349608
    Balu
    Poziom 38  
    Daruj Sobie kurs patrona. Gorszego syfu nie widziałem.
    I na najświeższym i najlepszym kompilatorze...:)

    Weź się lepiej za kurs C by Radosław Koppel:) (EdW) Jest sporo lepszy choć też na starym WINAVR (ale i tak nowszym). IMHO bardzo dobry żeby zacząć z C na uC:)
  • #7 5349629
    Balu
    Poziom 38  
    A wpisać i skompilować i zobaczyć nie łaska?
    Tak dobrze... choć śmiesznie to będzie wyglądało w programie
    LED_ON; prawie jak w bascomie ;)

    Przy czym za każdym razem ustawianie ddrx mija się z celem...

    Dodano po 1 [minuty]:


    Aha...nieazuważyłem...

    O ile ustawianie 1 zadziałą, to o tyle wyłączanie już nie ;)
    Tzn może i się skompiluje ale z warningiem że statement nic nie robi:)

    Brak znaku równa się:)
  • #8 5349646
    lopez123
    Poziom 13  
    Przy kompilacji wyświetla:
    
    > "make.exe" all
    makefile:47: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.
    
    > Process Exit Code: 2
    > Time Taken: 00:00
    


    Zawartość makefile:

    
    PRG            = led
    
    OBJ            = led.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)
    
     
    
    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 $< $@
    




    Dodałem znak "=" i dalej to samo.
  • #9 5349652
    Balu
    Poziom 38  
    Patrz liczę która to linia...:>
    Weź się chłopie w garść olej ten kurs patrona, zacznij pisać w AVRSTUDIO:>

    On sam generuje makefile'a etc... na początek na pewno będzie to miłe ułatwienie:)
  • #10 5349667
    lopez123
    Poziom 13  
    A jaki kurs w AVRSTUDIO polecisz? Jaki byłby dla mnie najlepszy?
  • Pomocny post
    #11 5349679
    Balu
    Poziom 38  
    Kurs? AvrStudio to IDE nie trzeba tam żadnego kursu? A w C pisze się tak samo jak PN. Tyle że wygodniej bo All in One:)
    A Kurs polecam jak wyżej Pana Szanownego Kolegi R. Koppela:) (Był w EdW)

    Na początek w AvrStudio poprostu zrób nowy projekt używając C i tyle...:>
    Pisz do woli na początek spoko Ci wystarczy...
  • #12 5349743
    lopez123
    Poziom 13  
    Masz jeszcze głupie pytanie dotyczące Avr Studio. Zainstalowałem go, odpalam i co dalej? Nie wiem jak skompilować, ustawić i wrzucić program na uC.
  • #14 5349766
    lopez123
    Poziom 13  
    Ok. Poczekam;]
REKLAMA