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.

Przetwornik ADC AVR - Błąd przy próbie kompilacji

nik1197 09 Lis 2015 20:54 924 6
  • #1 09 Lis 2015 20:54
    nik1197
    Poziom 6  

    Cześć, od pewnego czasu uczę się programować AVRy, moim kolejnym celem było opanowanie ADC gdzie posługiwałem się poradnikami pana Mirka Kardasia i napisałem(a właściwie to przepisałem) mój pierwszy program, z założenia miał on mrugać diodą z częstotliwością zależną od odczytu z ADC. Błędy które mi wyskakują:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Moje pytanie brzmi co oznaczają te błędy i co robię źle że nie działa, program jest pisany w Eclipse
    :
    Kod: text
    Zaloguj się, aby zobaczyć kod

    0 6
  • Pomocny post
    #2 09 Lis 2015 21:09
    szczywronek
    Poziom 27  

    Przed pierwszym użyciem funkcji pomiar(), powinna znajdować się jej deklaracja - bez tego kompilator nie wie co to jest ;) Opcje masz trzy:
    - możesz przenieść całą definicję funkcji pomiar() przed funkcję main()
    - możesz, przed funkcją main(), dopisać deklarację funkcji pomiar()
    - możesz przenieść funkcję pomiar() do osobnego pliku źródłowego, utworzyć dla niego plik nagłówkowy i dołączyć do pliku main.c

    Funkcja _delay_ms nie powinna mieć zmiennej w argumencie - temat powtarzał się wiele razy, więc w razie potrzeby bez problemu znajdziesz uzasadnienie czemu ;)

    0
  • #3 10 Lis 2015 16:35
    nik1197
    Poziom 6  

    Po przeniesieniu funkcji pomiar() przed main() pozbyłem się jedynch errorów, jednak doszły kolejne.

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Program wiele się nie różni:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czy mógby mi ktoś opisać co jest nadal źle że kompilator tego nie przepusza i w miarę łopatologicznie to wyjaśnić(początki z C :D ).
    A odnośnie delayów, jestem świadomy tego że nie powinno się tam umieszczać zmiennych, jednak chce by na początku efekt było jak najłatwiej zobrazować, jeżeli uda mi się uruchomić to przeklęte ADC, spróbuje połączyć to z PWM bądź jakimś wyświetlaczem :D

    0
  • Pomocny post
    #4 10 Lis 2015 16:59
    szczywronek
    Poziom 27  

    Sprawdź co znaczy "multiple definition of..." i problem się wyjaśni. Strzelam, że skopiowałeś część plików projektu do folderu z V2 w nazwie. Tym sposobem masz kilka funkcji main i stąd błąd.

    Btw. nie przeniosłeś funkcji pomiar przed main, tylko dopisałeś jej deklarację przed mainem. I jeszcze przy okazji, przeczytaj jak powinno się wstawiać listingi programów na forum: https://www.elektroda.pl/rtvforum/viewtopic.php?p=14652518#14652518 ;)

    0
  • #5 10 Lis 2015 17:13
    nik1197
    Poziom 6  

    I stała się jasność, kompilator przepuścił program :D i wyszły moje braki znajomości Eclipse :/. Myślę że teraz z ADC pójdzie mi już z górki :) Dzięki za pomoc i zabieram się za testowanie i modyfikowanie kodu :D Dzięki wielkie za pomoc.

    0
  • #6 10 Lis 2015 17:26
    szczywronek
    Poziom 27  

    A! Jeszcze jedno mi się rzuciło w oczy: kłopotliwy średnik po definicji LED. Nie jest to w sumie błąd (w tym programie), ale w przyszłości może się zemścić. Definicje preprocesora działają jak proste "znajdź i zamień" w edytorze tekstu. Preprocesor wstawia "zawartość" definicji tam, gdzie pojawi się jej nazwa. Czyli na jednym z etapów kompilacji, z tych dwóch linijek:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    Powstanie jedna linijka kodu:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    I już widać, że na końcu są dwa średniki (jeden z makrodefinicji, drugi z tej linii kodu). Tutaj akurat nie jest to problem, ale gdyby to nie była dioda tylko np przycisk sprawdzany w warunku if, to wyszła by "lipa" z tym średnikiem:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    bo po zadziałaniu preprocesora powstałoby:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    Średnik z makrodefinicji wylądowałby w środku warunku. I kompilator zasygnalizowałby błąd, w stylu "expected ‘)’ before ‘;’ token".

    0
  • #7 10 Lis 2015 17:35
    nik1197
    Poziom 6  

    Oooo, bardzo cenna uwaga! Świetnie to mi wytłumaczyłeś. Dzięki wielkie za tą radę, myślę że na pewno mi się ona przyda w dalszym programowaniu :)

    0