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

WinAVR nie rozpoznaje UBRRH_VALUE, UBRRL_VALUE z setbaud.h, AVR Studio działa

miccaldo 12 Lut 2013 17:27 1740 9
REKLAMA
  • #1 11924875
    miccaldo
    Poziom 12  
    Posty: 86
    Ocena: 4
    Witam, chciałbym opanować komunikowanie się mikrokontrolera z komputerem za pomocą UART przez FT232. Nie wiem dlaczego winavr nie rozpoznaje makrodefinicji UBRRH_VALUE, UBRRL_VALUE, chociaż zdefiniowałem w kodzie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    AVR Studio 6 kompiluje program bez problemu, więc w czym może być problem?

    Oto program:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 19 [minuty]:

    tutaj jeszcze błąd:

    > "make.exe" all

    -------- begin --------
    avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
    Copyright (C) 2006 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Compiling C: wzor.c
    avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./wzor.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/wzor.o.d wzor.c -o wzor.o
    wzor.c:1:1: warning: "F_CPU" redefined
    <command line>:1:1: warning: this is the location of the previous definition
    wzor.c:8: warning: function declaration isn't a prototype
    wzor.c:10:27: warning: util/setbaud.h: No such file or directory
    wzor.c: In function 'USART_init':
    wzor.c:11: error: 'UBRRH_VALUE' undeclared (first use in this function)
    wzor.c:11: error: (Each undeclared identifier is reported only once
    wzor.c:11: error: for each function it appears in.)
    wzor.c:12: error: 'UBRRL_VALUE' undeclared (first use in this function)
    wzor.c:14:6: warning: "USE_2X" is not defined
    wzor.c:33:2: warning: no newline at end of file
    make.exe: *** [wzor.o] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:01
  • REKLAMA
  • #2 11924962
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    1. Włączanie pliku nagłówkowego wewnątrz funkcji to nie jest dobry zwyczaj. Przenieś dyrektywę #include na zewnątrz funkcji main, tam gdzie są inne #include

    2. Przy częstotliwości procesora 1 MHz nie da się uzyskać poprawnej komunikacji z szybkością 9600. Zmień częstotliwość na 8 MHz lub szybkość transmisji na 4800.

    2. Kompilator napisał dokładnie, co mu się nie podoba - nie może znaleźć pliku include
  • REKLAMA
  • #3 11925190
    miccaldo
    Poziom 12  
    Posty: 86
    Ocena: 4
    Przeniosłem #include na początek, zmieniłem na 4800, ale ten sam błąd :/
  • REKLAMA
  • #4 11925313
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    To powiedz kompilatorowi, gdzie jest plik, który chcesz włączyć - komunikat jest przecież dość oczywisty.
  • #5 11925392
    miccaldo
    Poziom 12  
    Posty: 86
    Ocena: 4
    Nie wiem zabardzo jak wskazać ten plik, mógłbym prosić o jaieś nakierowanie?
    Zastanawia mnie również fakt dlaczego w AVR Studio kompiluje, a w winavr zwraca błąd...
  • #6 11925624
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Jest to o tyle dziwne, że AVR Studio używa właśnie WinAVR. Także różnica może tkwić w plikach makefile i ścieżkach tam zawartych. Z drugiej strony jeśli AVR Studio to kompiluje, to co ci przeszkadza problem z WinAVR?

    Dodano po 1 [minuty]:

    BTW, jeśli definiujesz symbol F_CPU w projekcie to nie redefiniuj go w kodzie. Z tego powodu masz kolejne ostrzeżenie przy kompilacji.

    Dodano po 1 [minuty]:

    BlueDraco napisał:
    1. Włączanie pliku nagłówkowego wewnątrz funkcji to nie jest dobry zwyczaj. Przenieś dyrektywę #include na zewnątrz funkcji main, tam gdzie są inne #include


    Jakkolwiek to prawda, to akurat setbaud.h to specyficzny nagłówek, w którym znajdują się tylko makra odpowiedzialne za wyliczanie UBRR. Czasami zachodzi konieczność jego włączenia w ciele funkcji - oczywiście to tylko wyjątek potwierdzający regułę :)
  • #7 11946421
    miccaldo
    Poziom 12  
    Posty: 86
    Ocena: 4
    Przeszkadza mi problem z winavr, gdyż posiadam programator usbasp, a nie jest on wspierany w AVR Studio... Dlatego programuję uC w WinAVR. Myślę żeby skompilować plik z AVR Studio, a wgrać go za pomocą WinAvr.
  • REKLAMA
  • #8 11946455
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Trochę mylisz pojęcia, WinAVR to zestaw narzędzni (kompilator, konsolidator, trochę drobnicy), nie ma nic wspólnego ani z AVR Studio, ani z usbasp. Co więcej AVR Studio wykorzystuje WinAVR do kompilacji programów w c. Chyba, że mówisz o Atmel Studio, ale to wtedy nie WinAVR, bo AS używa zestawu narzędzi z Atmela (następcy WinAVR). Nawet jeśli kompilujesz coś w AS, to otrzymujesz takie same pliki w formacie IntelHEX jak kompilując w dowolnym innym IDE, czy z linii poleceń. Możesz te pliki wykorzystać np. w AVRDude, czy czymkolwiek z czym wykorzystujesz usbasp.
  • #9 11956306
    miccaldo
    Poziom 12  
    Posty: 86
    Ocena: 4
    Nie mogę wgrać tego pliku .hex od Atmel Studio, kopiuję cały folder z tym programem, otwieram przez Winavr i taki błąd:

    > "make.exe" all
    make.exe: *** No rule to make target `all'. Stop.

    > Process Exit Code: 2
    > Time Taken: 00:00

    A czy u was Winavr również zwraca błąd z tego powodu?

    #include <util/setbaud.h>
    UBRRH = UBRRH_VALUE;
    UBRRL = UBRRL_VALUE;
  • #10 11956769
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    A po co mając gotowy plik hex, dajesz make all? Heh to hex, powinieneś nim nakarmić programator. To co ty chcesz zrobić to ponownie skompilować program przy pomocy makefile wygenerowanego przez atmel studio.

Podsumowanie tematu

✨ Użytkownik ma problem z kompilacją kodu mikrokontrolera w WinAVR, gdzie makra UBRRH_VALUE i UBRRL_VALUE z pliku setbaud.h nie są rozpoznawane, mimo że kod działa w AVR Studio. Wskazówki dotyczące rozwiązania obejmują przeniesienie dyrektywy #include na początek pliku, zmianę częstotliwości procesora na 8 MHz lub obniżenie prędkości transmisji do 4800 bps. Użytkownik zauważa, że AVR Studio używa WinAVR do kompilacji, co rodzi pytania o różnice w konfiguracji. Dodatkowo, użytkownik ma trudności z wgraniem pliku .hex z Atmel Studio do programatora USBasp, co prowadzi do błędów związanych z makefile.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA