[newbie] Jak =?iso-8859-2?Q?tworzy=E6?=



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Torx <torx_at_nospam_poczta.fm.usunto.invalid>
Subject: [newbie] Jak =?iso-8859-2?Q?tworzy=E6?=
Date: Wed, 26 Apr 2006 09:59:02 +0000 (UTC)


Witam,
w jaki sposób tworzycie biblioteki - moduły dla AVR.
Jestem zielony w tym temacie, korzystam z WinAVR i chciałbym sobie
podzielić projekt na mniejsze moduły dołączane w razie potrzeby. Nie bardzo
wiem jakie parametry muszę zapodać ,żeby skompilowac bibliotekę. Kompilacja
przy użyciu makefile kończy sie komunikatem :
...
C: WinAVR/BIN.. lib/gcc/avr3.4.5/../../../../avr/lib/avr5/crtm162.o: In
function `__vectors':
../../../../../avr-libc-1.4.3/crt1/gcrt1.S:51: undefined reference to
`main'
make.exe: * [*.elf] Error 1
Pozdrawiam i serdecznie dziękuję za pomoc.

Poprzedni Następny
Wiadomość
Spis treści
From: "Martin Lukasik" <marcin_at_nospam_milea.pl.i.hate.this.spam>
Subject: Re: [newbie] Jak tworzyć własne biblioteki dla AVR?
Date: Wed, 26 Apr 2006 11:33:39 +0100


Witam,
w jaki sposób tworzycie biblioteki - moduły dla AVR.
Jestem zielony w tym temacie, korzystam z WinAVR i chciałbym sobie
podzielić projekt na mniejsze moduły dołączane w razie potrzeby. Nie
bardzo
wiem jakie parametry muszę zapodać ,żeby skompilowac bibliotekę.
Kompilacja
przy użyciu makefile kończy sie komunikatem :
...
C: WinAVR/BIN.. lib/gcc/avr3.4.5/../../../../avr/lib/avr5/crtm162.o: In
function `__vectors':
../../../../../avr-libc-1.4.3/crt1/gcrt1.S:51: undefined reference to
`main'
make.exe: * [*.elf] Error 1
Pozdrawiam i serdecznie dziękuję za pomoc.

Biblioteki czy po prostu pliki naglowkowe?
Tak czy owak, piszesz w C, bez funkcji main().

Mozesz w glownym programie dolaczyc przez #include <plik>.
Lub mozesz skompilowac uzywajac gcc z opcja -o, a pozniej zlinkowac
wszystko.

Tak czy owak, w "bibliotece" nie ma funkcji main(). I tylko tym sie rozni.

m.



Poprzedni Następny
Wiadomość
Spis treści
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: [newbie] Jak =?ISO-8859-2?Q?tworzy=E6_w=B3asne_bibliotek?=
Date: Wed, 26 Apr 2006 21:44:39 +0200


Martin Lukasik napisał(a):
Mozesz w glownym programie dolaczyc przez #include <plik>.
Lub mozesz skompilowac uzywajac gcc z opcja -o, a pozniej zlinkowac
wszystko.

nie chodzi przypadkiem o opcję -c?

w.

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [newbie] Jak =?ISO-8859-2?Q?tworzy=E6_w=B3asne_bibliotek?=
Date: Sat, 29 Apr 2006 12:07:42 +0200


Torx napisał(a):

w jaki sposób tworzycie biblioteki - moduły dla AVR.

Biblioteki linkowane statycznie to z punktu widzenia kompilatora po
prostu zebrane w jeden plik (zwykle z rozszerzeniem .a) wiele plików
obiektowych (.o). Sposób postępowania:
znaczącą funkcję w oddzielnym pliku (dla biblioteki obsługi LCD będą to
np. lcd_gotoxy.c, lcd_putchar.c, lcd_puts.c, lcd_clear.c itp),
avr-ar -rc mojabiblioteka.a plik1.o plik2.o plik3.o

Teraz jeżeli chcesz użyć biblioteki w programie, po prostu dołączasz
plik mojabilioteka.a do listy plików dla linkera. Linker inteligentnie
wybierze z biblioteki tylko pliki zawierające funkcje, których używasz
(dlatego najlepiej jak najbardziej "podziabać" źródła biblioteki na
oddzielne pliki .c aby niepotrzebne rzeczy nie musiały się dołączać).

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: Torx <torx_at_nospam_poczta.fm.usunto.invalid>
Subject: Re: [newbie] Jak =?iso-8859-2?Q?tworzy=E6?=
Date: Thu, 4 May 2006 07:31:20 +0000 (UTC)


Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl> wrote in
news:e2vdtv$2h8$1_at_nospam_atlantis.news.tpi.pl:

Torx napisał(a):

w jaki sposób tworzycie biblioteki - moduły dla AVR.

Biblioteki linkowane statycznie to z punktu widzenia kompilatora po
prostu zebrane w jeden plik (zwykle z rozszerzeniem .a) wiele plików
obiektowych (.o). Sposób postępowania:
- tworzysz jeden lub więcej plików źródłowych .c, najlepiej każdą
znaczącą funkcję w oddzielnym pliku (dla biblioteki obsługi LCD będą
to np. lcd_gotoxy.c, lcd_putchar.c, lcd_puts.c, lcd_clear.c itp),
- kompilujesz każdy plik oddzielnie do postaci obiektowej (.o)
- zapuszczasz archiwer sklejający te pliki .o w jeden plik .a
poleceniem np: avr-ar -rc mojabiblioteka.a plik1.o plik2.o plik3.o

Teraz jeżeli chcesz użyć biblioteki w programie, po prostu dołączasz
plik mojabilioteka.a do listy plików dla linkera. Linker inteligentnie
wybierze z biblioteki tylko pliki zawierające funkcje, których używasz
(dlatego najlepiej jak najbardziej "podziabać" źródła biblioteki na
oddzielne pliki .c aby niepotrzebne rzeczy nie musiały się dołączać).


Witam,
wielkie dzięki za pomoc :-).
Trochę się jeszcze motam z makfile a wystarczyło wydać polecenie 'make lib'
i by się ładnie skompilowało :-).
Oczywiście musiałem wcześniej lekko zmodyfikować makefile ponieważ autor
wzorca zapomniał dodać parametry dla ar ,który sypał błędami o brakujących
lub nieznanych parametrach :-).
Mam jeszcze jeden problem , mianowicie nie za bardzo wiem jak dodać swoją
nowo utworzoną bibliotekę :-(.
Zakładając ,że bibliotekę mam w katalogu F:\MojeProjekty\AVR\Lib\Atmega8
a projekt np w katalogu F:\MojeProjekty\AVR\src\prj1 ,którą sekcję makfila
muszę zmodyfikować i co muszę dodać ??
Dodanie parametru -L ../../lib/atmega8 i -l ../../lib/atmega8/tst skutkuje
wywaleniem komunikatu o niemożności odnalezienia biblioteki tst.a . Może
mnie ktoś naprowadzić na właściwy trop. Pewnie zapomniałem o jakimś
drobiazgu.
Dziękuję serdecznie za pomoc i pozdrawiam.

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [newbie] Jak =?ISO-8859-2?Q?tworzy=E6_w=B3asne_bibliotek?=
Date: Thu, 04 May 2006 23:20:54 +0200


Torx napisał(a):

Teraz jeżeli chcesz użyć biblioteki w programie, po prostu dołączasz
plik mojabilioteka.a do listy plików dla linkera. Linker inteligentnie
wybierze z biblioteki tylko pliki zawierające funkcje, których używasz
(dlatego najlepiej jak najbardziej "podziabać" źródła biblioteki na
oddzielne pliki .c aby niepotrzebne rzeczy nie musiały się dołączać).
[...]

Mam jeszcze jeden problem , mianowicie nie za bardzo wiem jak dodać swoją
nowo utworzoną bibliotekę :-(.
Zakładając ,że bibliotekę mam w katalogu F:\MojeProjekty\AVR\Lib\Atmega8
a projekt np w katalogu F:\MojeProjekty\AVR\src\prj1 ,którą sekcję makfila
muszę zmodyfikować i co muszę dodać ??
Dodanie parametru -L ../../lib/atmega8 i -l ../../lib/atmega8/tst skutkuje
wywaleniem komunikatu o niemożności odnalezienia biblioteki tst.a

Są dwie szkoły: albo określasz katalogi poszukiwania bibliotek (opcja
-L) i z opcją -l już tylko nazwy skrócone bibliotek (np. -ltst spowoduje
dołączenie biblioteki libtst.a - zauważ że biblioteka musi się nazywać
libCOŚTAM.a). Albo można prościej wpisując pliki .a ze ścieżkami
[najlepiej względnymi] do listy plików wejściowych w wywołaniu linkera,
bez żadnych magicznych opcji.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: [newbie] Jak =?ISO-8859-2?Q?tworzy=E6_w=B3asne_bibliotek?=
Date: Sat, 29 Apr 2006 12:10:21 +0200


Torx napisał(a):

w jaki sposób tworzycie biblioteki - moduły dla AVR.

Aha, jeszcze oczywiście dla biblioteki musisz utworzyć plik nagłówkowy z
prototypami funkcji bibliotecznych i dołączać go tam, gdzie masz zamiar
używać funkcji z biblioteki. Warto definicje stałych itp. rzeczy
"prywatne" dla biblioteki trzymać w oddzielnym pliku nagłówkowym, a w
oddzielnym prototypy funkcji i definicje potrzebne "na zewnątrz" czyli w
programie wykorzystującym bibliotekę.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.