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][C/AVR Studio 4] Dołączanie bibliotek .c .h

szyko1 10 Mar 2012 17:46 2153 5
  • #1 10 Mar 2012 17:46
    szyko1
    Poziom 15  

    Witam
    Dlaczego kiedy dołączę biblioteki tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    kompilator sypie mi błędami "undefined reference to...", natomiast
    wystarczy że dołączę pliki .c
    Kod: c
    Zaloguj się, aby zobaczyć kod

    albo nawet tylko .c (bez pików .h) i wszystko jest w porządku?

    AVR Studio 4 + AVR Toolchain 3.3.0, biblioteki z sieci np. HD44780 z radzio.dxp.pl.

    0 5
  • Pomocny post
    #2 10 Mar 2012 18:01
    tmf
    Moderator Mikrokontrolery Projektowanie

    Dlatego, że to nie są żadne biblioteki, tylko zwykłe pliki c. Czyli stanowią one część kodu źródłowego pisanej aplikacji. A żeby mogła się ona skompilować potrzebne są:
    1. Prototyypy funkcji (pliki .h)
    2. Ciała funkcji (pliki .c)
    Zobacz co ci sypie błędami - nie jest to kompilator tylko linker. Zastanów się także co oznaczają te błędy.

    0
  • #3 11 Mar 2012 13:30
    szyko1
    Poziom 15  

    Z tego co napisałeś wnioskuje że powinienem był dołączyć oba pliki .c i .h,
    a z tego

    Cytat:
    Często zbiór funkcji obsługujących
    konkretne zadanie (np. obsługę urządzenia
    peryferyjnego) lokujemy w oddzielnym
    module źródłowym xx.c a dostęp
    do niego realizujemy poprzez skojarzony
    plik nagłówkowy o takiej samej
    nazwie xx.h.
    PE 08/2005

    że powinno wystarczyć dołączenie samego .h ale nie wystarcza.

    0
  • Pomocny post
    #4 11 Mar 2012 13:38
    tronics
    Poziom 36  

    Masz z lewej strony drzewko projektu (jak w większości IDE, w tym Eclipse) , zobacz jak jest podzielone i co można tam zrobić.

    0
  • Pomocny post
    #5 11 Mar 2012 13:58
    tmf
    Moderator Mikrokontrolery Projektowanie

    szyko1 napisał:
    Z tego co napisałeś wnioskuje że powinienem był dołączyć oba pliki .c i .h,
    a z tego
    Cytat:
    Często zbiór funkcji obsługujących
    konkretne zadanie (np. obsługę urządzenia
    peryferyjnego) lokujemy w oddzielnym
    module źródłowym xx.c a dostęp
    do niego realizujemy poprzez skojarzony
    plik nagłówkowy o takiej samej
    nazwie xx.h.
    PE 08/2005

    że powinno wystarczyć dołączenie samego .h ale nie wystarcza.


    Źle rozumiesz powyższy tekst. Dostęp z własnych plików projektu realizujesz poprzez plik nagłówkowy h, ale zawiera on wyłącznie prototypy funkcji. A oprócz prototypów chciałbyś mieć także ich definicje (ciała), prawda? Więc skąd linker ma je wziąć, przecież nie z pliku nagłówkowego, gdzie ich nie ma. Stąd też plik źródłowy (c) musisz dołączyć do swojego projektu. Przy czym dołączasz go w makefile, natomiast plik h po prostu includujesz. Gdybyś miał bibliotekę, to tak samo musiałbyś wskazać gdzie ona jest, tyle, że nie kompilatorowi, któremu to wisi, tylko linkerowi.

    0
  • #6 11 Mar 2012 14:43
    szyko1
    Poziom 15  

    Wszystko jasne, dzięki.

    Pozdrawiam

    0