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

[Atmega128][Ethernut] - inicjalizacja ADC, kompilacja

herszt 01 Cze 2011 15:44 1537 7
  • #1 9566262
    herszt
    Poziom 18  
    Witam,

    mam problem z uruchomieniem ADC - to chyba jakiś problem podczas kompilacji. W katalogu "głównym" z plikami systemu mam plik my_adc.h/c, w którym znajdują się funkcje do odczytu wartości ADC (w my_adc.h mam #include <dev/adc.h> gdzie znajdują się wszystkie "oryginalne" funkcje do obsługi ADC). I teraz w głównym pliku z programem mam #include "my_adc.h", a następnie gdzieś w środku wywołuję ADCInit() (to z "oryginalnych" źródeł - adc.h).

    Kiedy wszystko kompiluję mam jednego warninga:

    Cytat:

    nutmain.c: In function `NutAppMain':
    nutmain.c:797: warning: implicit declaration of function `ADCInit'


    wszystko się kompiluje, ale system właściwie nie startuje (wykrzacza się tak jakby bezpośrednio przed wywołaniem ADCInit()). Usunąłem wszystkie swoje funkcje ADC, dodałem #include <dev/adc.h> i po kompilacji nie ma żadnego warninga, ale system wywala się w tym samym miejscu. Wykomentowałem wszystko w ADCInit() i wrzuciłem tam tylko printf'a - dochodzi do tej funkcji i nawet nie wyświetla nic na konsoli. Dodam, że nawet jeśli funkcja jest "pusta" to system z nią nie rusza, a bez niej nie ma żadnego problemu. Czy jest coś co najprawdopodobniej mógłbym pominąć? Bo nie mam pomysłu co mógłbym jeszcze sprawdzić.

    z góry dzięki
    pozdrawiam
    herszt
  • #3 9566452
    tmf
    VIP Zasłużony dla elektroda
    A niby po co w projekcie miałby mieć plik nagłówkowy? To jest tylko dla wygody.
    A w tych nagłówkach, które włączasz masz deklarację funkcji ADCInit()? Bo ten komunikat świadczy o tym, że jej nie masz.
  • #4 9566526
    herszt
    Poziom 18  
    Tak, mam go załączonego w projekcie (eclipse). Ale tak jak pisałem - nawet jak go nie załączę includem, a zamiast niego załączę oryginalny to i tak coś jest nie tak. Mam dać całego loga z kompilacji? Jeśli tak to w wersji z załączonym bezpośrednio dev/adc.h czy bez (różnią się tylko warningiem - a poza tym nie ma żadnych błędów/warningów)?

    W pliku nagłówkowym (zarówno my_adc, ja i oryginalnym ads) są także wszystkie deklaracje funkcji, a w plikach źródłowych są definicje funkcji.

    Jeszcze jedna uwaga - jak dodaję #include <dev/adc.h> to warning, o którym mówiłem znika, natomiast kompilator nie widzi, żadnej dodatkowej funkcji jaką tam dopisuję (np. dodałem funkcję test() która nic nie robi, i jak chce ją wykorzystać to kompilator się buntuje, że "undefined reference" pomimo, że plik nagłówkowy z definicją jest załączony!).

    z góry dzięki
    pozdrawiam
    herszt
  • #5 9566573
    tmf
    VIP Zasłużony dla elektroda
    undefined reference znaczy, że na etapie kompilacji nie masz ciała funkcji, więc nie ma się do czego odwołać. Nagłówek nie wystarczy. Po kolei - najpierw doprowadź wszystko do sytuacji w której masz 0 warningów, a potem m usisz pokazać kod, żeby ci można było coś pomóc.
  • #6 9568780
    herszt
    Poziom 18  
    Ok. Istotne fragmenty kodu wyglądają następująco:

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


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


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


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


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


    Wydaje mi się, że są to naistotniejsze fragmenty. I tak jak mówiłem - po dołączeniu "my_adc.h" jak powyżej - mam implicit declaration. Natomiast po dołączeniu <dev/adc.h> nie mam warninga, ale program dochodzi do printf'a poprzedzającego wywołanie funkcji i dalej się wiesza (nie widać printf'a pierwszego w funkcji). Jakakolwiek próba dodania jakiejś funkcji adc.h/c (oryginalne źródła Ethernuta) jest bezowocna. Może jakiś pomysł, gdzie mogę szukać problemu?



    z góry dzięki
    pozdrawiam
    herszt
  • #8 9569103
    herszt
    Poziom 18  
    Na pierwszym obrazku widok ogólny. W nutmain są moje pliki (my_adc.c/h itp.) i program główny. Na drugim obrazku rozwinąłem gałąź nut gdzie znajdują się pliki od przetwornika. W arch/avr/dev jest adc.c, ale nie rozwinąłem bo by zajmowało dużo miejsca. Mam nadzieję, że to wystarczy.

    [Atmega128][Ethernut] - inicjalizacja ADC, kompilacja [Atmega128][Ethernut] - inicjalizacja ADC, kompilacja

    z góry dzięki
    pozdrawiam
    herszt
REKLAMA