Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

avr-gcc - warninng z WinAVR-20100110

zbynio_k 11 Wrz 2015 18:08 876 13
  • #1 11 Wrz 2015 18:08
    zbynio_k
    Poziom 10  

    witam,
    od wczoraj mam problemy z kompilacją projektów, które dawniej kompilowały się BEZ problemów

    1. używam AVRS v 4.18 ze wszystkimi SP'akami
    2. toolchain 3.4.1.1195-win32
    3. WinAVR-20100110

    reinstalowałem 2 razy WinAVR-20100110
    wczoraj pomogło a dzisiaj wywala mi WARNING

    d:/program files/avr/winavr-20100110/lib/gcc/../../avr/include/util/setbaud.h:218:4: warning: #warning "Baud rate achieved is lower than allowed"

    byłem już bliski reinstalacji CAŁEGO systemu do AVR'ów
    ale co ciekawe - na drugim kompie z IDENTYCZNĄ !! konfiguracją
    wszystko się kompiluje bez błędów i warning'ów ....
    nie mam już pomysłów co dalej zrobić

    pozdrawiam

    P.S - niestety, po ponownej próbie kompilacji na drugim kompie
    też wywala ten sam warning, przed kwadransem było OK
    ręce opadają

    0 13
  • #2 11 Wrz 2015 18:26
    Badmaneq
    Poziom 23  

    Pokaż kod oraz podaj jakie F_CPU.
    Pewnie masz baudrate ustawiony na taki, który jest nie realny przy tym F_CPU.

    1
  • #3 11 Wrz 2015 18:39
    zbynio_k
    Poziom 10  

    myślę, że nie ma co dywagować na błędami programowymi bo jest to przykład 1:1 z książki tmf'a - 1-wire przez wewnętrzny UART
    ale ...

    mega88, clk 8MHz, #define BAUD 9600 i #define BAUD 115200

    więc jak sądzę nie powinno być "Baud rate achieved is lower than allowed"
    chyba autor TO testował

    0
  • #4 11 Wrz 2015 18:46
    Badmaneq
    Poziom 23  

    Nie znam tego kodu, rozśmieszyłeś mnie lecz tylko Ci "powiem": Czy profesor nie może być idiotą ?
    Może przy przepisywaniu strzeliłeś byka albo F_CPU jest gdzieś, gdzieś... zupełnie w innym miejscu deklarowane.

    0
  • #5 11 Wrz 2015 18:55
    zbynio_k
    Poziom 10  

    profesor może być idiotą, sam mam do czynienia z ludźmi z 'wysokimi' tytułami naukowymi i ..... są tacy

    nie przepisywałem kodu - to jest załącznik do e-booka

    zważ tylko na MAŁY niuans .... pierwszy raz kompiluje się bez błędów
    a powtórna kompilacja generuje warning
    i właśnie TO mnie zastanawia

    P.S
    sprawdzałem, czy być może gdzieś w środowisku AVR nie ma zmienionego pliku
    ale wszystko OK
    niema deklaracji F_CPU, robi to AVRS i ZAWSZE 'daję' Build All

    0
  • Pomocny post
    #6 11 Wrz 2015 20:14
    KrisH
    Poziom 13  

    W setbaud.h jest ustawiona tolerancja błędu szybkości USARTa na 2%
    przy 8 MHz procesora błąd będzie większy (do sprawdzenia w dokumentacji), dlatego wyrzuca warninga. Dla sprawdzenia ustaw np. F_CPU na 11,0592MHz z "zbuduj projekt"- nie będzie błędów.

    1
  • #7 11 Wrz 2015 21:06
    zbynio_k
    Poziom 10  

    KrisH jesteś wielki w UART, w AVR'ach
    oczywiście zadziałało - ale, żeby nie przyjąć F_CPU na 'pałę' i nie popełniać dalszych błędów mam pytania

    1. jeśli w projekcie jest użyte _delay_xx(), nie skompiluje dobrze
    a sądzę, że w TYM projekcie może być delay zamiast NOP (projekt jest dla 8MHz)
    2. dla 16MHz też jest warning
    3. w żaden sposób nie umiem przeliczyć 8MHz na 11,0592MHz z tych 2%

    skąd się to bierze ?

    0
  • Pomocny post
    #8 11 Wrz 2015 21:26
    Badmaneq
    Poziom 23  

    Jeśli delay z <util/delay.h> skompiluje się poprawnie, opóźnienie dostosowuje się w zależności od F_CPU. delay_ms(10) zawsze da opóźnienie ~10 ms przy 8 MHz albo 11,0592 MHz.

    Jeżeli chodzi o NOP'y to ich wykonywanie jest zależne od F_CPU.

    Czyli jak pisałem:

    Badmaneq napisał:
    Pewnie masz baudrate ustawiony na taki, który jest nie realny przy tym F_CPU.


    Datasheet się kłania http://www.atmel.com/Images/doc2545.pdf
    avr-gcc - warninng z WinAVR-20100110

    Częstotliwość 11,0592 MHz jest taka magiczną gdzie błąd jest zerowy dla większości standardowych prędkości UART.

    1
  • Pomocny post
    #9 11 Wrz 2015 21:34
    KrisH
    Poziom 13  

    1. kompilator na podstawie F_CPU sam policzy ( delay.h), aby było dobre opóźnienie w funkcji _delay_xx().

    2. dla 1wire błędy szybkości ustawione w UART nie mają większego znaczenia, w przeciwieństwie do transmisji łączem np. RS232. Dla tego konkretnego projektu można zwiększyć w setbaud.h tę definicję:

    #define BAUD_TOL 2 // na większą wartość

    3. Poczytaj datasheet dla AVR tam jest dokładnie opisany sposób w jaki jest dzielona częstotliwość zegara procesora ( lub po polsku np. w książce tmf lub innych). W tabelach w datasheecie są nawet podane wartości rejestrów oraz błędy szybkości dla różnych zegarów kontrolera AVR.

    1
  • #10 11 Wrz 2015 21:44
    zbynio_k
    Poziom 10  

    Badmaneq też dzięki i sorki, że Cię trochę zbeształem

    to był mój pierwszy odpał UART'a
    teraz, jak zamierzałem, będę 'bawił' się z projektem

    a BTW .... AVR'y to też MAGIA dla niewtajemniczonych przynajmniej średnio
    pozdrawiam

    Dodano po 2 [minuty]:

    KrisH

    też cenna uwaga .... jak wspomniałem powyżej - pierwszy odpał UART'a
    dzięki

    0
  • #11 12 Wrz 2015 09:18
    zbynio_k
    Poziom 10  

    tylko nie potrafię z pomocą data sheet'a wyliczyć F_CPU na 11,0592MHz

    0
  • Pomocny post
    #12 12 Wrz 2015 10:28
    Badmaneq
    Poziom 23  

    F_CPU to częstotliwość jaką taktowany jest uC, 11,0592 MHz to częstotliwość zewnętrznego rezonatora kwarcowego, który powinieneś podłączyć. Zapewne aktualnie korzystasz z wewnętrznego generatora częstotliwości, lecz on nie pozwala na ustawienie 11,0592 MHz.

    1
  • #14 14 Wrz 2015 09:19
    zbynio_k
    Poziom 10  

    z bardzo prozaicznej przyczyny, do programowania mam starą Toshibę z XP
    próbowałem zainstalować AVRS v6 ale niestety nie da się na niej z v6 pracować i póki co, będę musiał używać v4.18

    Dodano po 1 [godziny] 35 [minuty]:

    dzięki za odpowiedzi
    sądzę, że natenczas temat mogę zamknąć

    0