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

AVR ATmega8/88/328 + UART + ECLIPSE - Błędy kompilacji, sprawdzenie kodu main.c

Darek254 13 Gru 2014 22:04 2592 17
  • #1 14220192
    Darek254
    Poziom 9  
    Szukałem na internecie poradników do terminala UART i udało mi się zrobić coś takiego z kawałków znalezionych w sieci. Problem polega na tym, że mój kompilator wyrzuca błędy a nie pokazuje mi gdzie one są (i tym samym nie mogę ich skompilować) i jeśli ktoś może sprawdzić poprawność kodu w 1. i 2. main.c(są to dwa odzielne programy w dwóch projektach z tymi samymi bibliotekami) to będę wdzięczny. Biblioteki dobrze mi się kompilują i nie wyrzucają błędów. Jeśli ktoś zauważy, że brakuje mi jakiegoś pliku/plików do obsługi UART to też byłbym wdzięczny za zwrócenie na to uwagi.

    uart.c i utar.h znajdują się w podfolderze UART.



    Pierwszy main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    drugi main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


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


    uart.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 14220220
    dondu
    Moderator na urlopie...
    Darek254 napisał:
    Problem polega na tym, że mój kompilator wyrzuca błędy a nie pokazuje mi gdzie one są (i tym samym nie mogę ich skompilować) ...

    To je pokaż :)

    Darek254 napisał:
    Szukałem na internecie poradników do terminala UART ...

    USART na przerwaniach: http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html
    oraz stosuj pokazany tam prawidłowy sposób obliczania i ustawiania parametrów prędkości USART.

    Przeczytaj także artykuł dot. F_CPU: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
  • #3 14220240
    Darek254
    Poziom 9  
    Ok, dzięki znalazłem dużo dziwnych poradników ten wygląda dużo czytelniej(i chyba wiem gdzie mam błąd). Jeśli będę miał jeszcze jakieś problemy to w ciągu 3. dni napiszę, jeśli nie to temat do zamknięcia.

    PS z tymi błędami chodzi o to, że w Eclipsie mam czerwone krzyżyki przy pliku(nie chce kompilować) a kod jest niby "czysty".
  • #5 14221172
    Darek254
    Poziom 9  
    Jednak mam dalej problem. Nie mogę poradzić sobie z budową biblioteki cały czas wyrzuca błędy w pliku uart.c (uart.h działa niby dobrze). Jest jakaś gotowa biblioteka, która jest czytelna i łatwa w obsłudze?

    W uart.c nie pokazuje znaczków przy złych linijkach tylko wypluwa coś takiego

    Kod w uart.c i uart.h jest taki sam jak u góry.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 14221233
    dondu
    Moderator na urlopie...
    Darek254 napisał:
    Jest jakaś gotowa biblioteka, która jest czytelna i łatwa w obsłudze?

    Biblioteka Petera Fluery taka właśnie jest :)
    Szkoda, że nie korzystasz z ATmel Studio, bo wtedy poprosiłbym o spakowanie całego projektu i sprawdziłbym co robisz źle, że rezultat jest taki:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #7 14222365
    Darek254
    Poziom 9  
    To ta sama biblioteka, którą instalowałem wcześniej. Wydaje mi się, że źle ją musiałem zainstalować skoro nie działa i teraz wydaje mi się, że wrzucenie tej biblioteki do projektu i includowanie jej to za mało skoro wyrzuca błędy w uart.c.

    PS Wrzuciłem pliki urat.h i uart.c resztę zignorowałem(czy pozostałe pliki są mi potrzebne, jeśli tak to co mam z nimi zrobić?)
  • #9 14222467
    Darek254
    Poziom 9  
    Jestem pewny na 90%, że były to oryginalne pliki i wrzuciłem je do projektu i zaincludowałem.
  • #11 14222573
    Darek254
    Poziom 9  
    Nie,nie dodałem oraz nie wiem jak dodać bo nie wiem czym jest drzewo projektu i jak coś do niego dodać.


    Mam takie coś w projekcie
    AVR ATmega8/88/328 + UART + ECLIPSE - Błędy kompilacji, sprawdzenie kodu main.c

    A w samym kodzie nie wyrzuca błędów tylko przy plikach jest widoczny czerwony krzyżyk.
  • #14 14223395
    dondu
    Moderator na urlopie...
    Załączyłeś pliki projektu, w którym jako main.c jest kod programu z mojego artykułu o USART na przerwaniach.
    Ten program w artykule jest kompletnym przykładem dla ATmega8 i nie wymaga bibliotek, które także załączyłeś.

    Nie rozumiem więc co chcesz osiągnąć?
  • #15 14223521
    Darek254
    Poziom 9  
    Wszystko działa? U mnie wyrzuca błędy i nie wiedziałem skąd się to bierze.
    Będę musiał zmienić albo z reinstalować środowisko.
  • #16 14223534
    dondu
    Moderator na urlopie...
    Błędy pojawiają się, ponieważ masz załączoną bibliotekę UART, której nie wykorzystujesz, a jest z nią jakiś problem.
    Dlatego wywal tę bibliotekę z tego projektu.
    Gdy to zrobisz błędów nie będzie, a program na ATmega8 na pewno zadziała.
  • Pomocny post
    #17 14224632
    tehaceole

    Poziom 28  
    dondu napisał:
    Dlatego wywal tę bibliotekę z tego projektu.
    Gdy to zrobisz błędów nie będzie, a program na ATmega8 na pewno zadziała.
    Kompilator krzyczy o to, że w kilku miejscach programu zdefiniowane są funkcje obsługi przerwań od UART. W kodzie Kol. dondu ma to miejsce bezpośrednio w pliku main.c:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    natomiast w dołączonej bibliotece wygląda to tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    gdzie:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czyli Kolego Darek254 jest to dokładnie to samo. Różnica tkwi w tym, że autor dołączonej biblioteki chciał sobie ułatwić życie i napisał bibliotekę uniwersalną, która w zależności od tego dla jakiego procesora jest kompilowana - samoczynnie podstawia sobie właściwe nazwy rejestrów dla tego typu procesora. Kod Kolegi dondu specjalnie ma wszystko umieszczone w jednym wspólnym pliku (main.c) żeby ktoś kto ma z tym styczność pierwszy raz nie musiał przebijać się przez gąszcz plików bibliotecznych.

    Na przyszłość: czytaj dokładnie błędy jakie wyrzuca kompilator. To nie wina środowiska (Eclipse) czy kompilatora (avrgcc), że to w Twoim programie są błędy :) Równie dobrze mógłbyś to napisać w Atmel Studio, czy nawet oldscoolowo w ProgramersNotepad - efekt byłby identyczny. W tym przypadku kompilator "ochrzania" Cię, że w jednym programie masz wielokrotnie zdefiniowaną tę samą funkcję. A konkretnie to jest to pokazane w tym komunikacie.

    Tak na zachętę: jak już dojdziesz do wprawy to sam zauważysz, że pisanie własnych bibliotek w taki sposób jak ta dla UART to bajka jeżeli chodzi o późniejsze ich używanie. A raczej przenoszenie z jednego procesora na drugi.
  • #18 14225252
    Darek254
    Poziom 9  
    Dzięki biblioteka usunięta i działa, jednak jak najszybciej będę chciał nauczyć się tego z wykorzystaniem bibliotek.

    Temat do zamknięcia.
REKLAMA