Jak w pełni i świadomie wykorzystać bibliotekę ?

Ogólne rozmowy na temat Arduino (i jemu podobnych).
ODPOWIEDZ
Awatar użytkownika
Karl
Majsterkowicz
Posty: 55
Rejestracja: 3 gru 2014, 10:00

Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Karl » 2 mar 2018, 19:22

Pytanie z serii przedszkolnych:
Po to wczytujemy do szkicu bibliotekę, żeby korzystać z jej funkcji.
Pytanie brzmi jak i skąd odczytać listę i działanie tychże funkcji ?

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


MrLewerence
Majsterkowicz
Posty: 213
Rejestracja: 12 paź 2013, 20:48

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: MrLewerence » 2 mar 2018, 19:50

Karl pisze:
2 mar 2018, 19:22
Pytanie z serii przedszkolnych:
Po to wczytujemy do szkicu bibliotekę, żeby korzystać z jej funkcji.
Pytanie brzmi jak i skąd odczytać listę i działanie tychże funkcji ?
Odpowiedz na pytanie:
Co to jest biblioteka w C/C++? (Jaką funkcję pełni)
Awatar użytkownika
Karl
Majsterkowicz
Posty: 55
Rejestracja: 3 gru 2014, 10:00

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Karl » 2 mar 2018, 20:35

Domyślam się, że źle to określiłem, więc popraw mnie :)
Awatar użytkownika
Marhef
Złota rączka
Posty: 1083
Rejestracja: 18 lis 2011, 02:18

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Marhef » 2 mar 2018, 20:44

Szukasz plików biblioteki (powinno wystarczyć nazwa_biblioteki.h, ale możesz potrzebować też nazwa_biblioteki.c(pp)).
W pliku z rozszerzeniem .h masz nagłówki, czyli listę funkcji. A dobry programista również je opisze. Ewentualnie opis może być w pliku z rozszerzeniem .c lub .cpp
MrLewerence
Majsterkowicz
Posty: 213
Rejestracja: 12 paź 2013, 20:48

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: MrLewerence » 2 mar 2018, 20:49

Jak to ktoś kiedyś gdzieś powiedział/napisał:

"Komputer jest na tyle mądry, na ile mądra jest osoba obsługująca go..." / czy jakoś tak ;)

Biblioteka i jej zawartość ma za zadanie skrócić czas pisania kodu programu.
Wszystkie elementy składowe biblioteki możesz napisać w kodzie programu...

Biblioteka zawiera tylko te rzeczy, te funkcje które jej autorowi były potrzebne. Dobrze napisana biblioteka nie tylko "działa" prawidłowo, co posiada dokumentację i opis działania czy zastosowania funkcji... PDF, dobre komentarze...
Awatar użytkownika
Karl
Majsterkowicz
Posty: 55
Rejestracja: 3 gru 2014, 10:00

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Karl » 3 mar 2018, 08:59

Marhef - dziękuję ! O to właśnie chodziło.
Okazuje się, że pomoc jakiej oczekiwałem od pozyskanego w internecie 'ułatwienia', w pliku nagłówkowym nie występuje. Czyli narzędzie średnio użyteczne.

Apropos cytatu ja to odniosę się do każdego innego narzędzia.
Jeśli np. operator młotka nieobrotny to może sobie tylko palec przytłuc. Jeśli zaś wprawiony, to i blaszaną kulkę z blachy wyklepie.
A o komputerze jeden z dr na mojej poli mawiał: "Komputer to taka maszynka, która bzdury potrafi obliczać do miliona miejsc po przecinku."
Awatar użytkownika
Marhef
Złota rączka
Posty: 1083
Rejestracja: 18 lis 2011, 02:18

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Marhef » 3 mar 2018, 11:09

Może jeszcze inaczej napiszę. W pliku z rozszerzeniem .h masz listę wszystkich funkcji, do jakich masz dostęp.
I zawsze możesz sobie własną bibliotekę napisać :)
Chociaż, formalnie, to wcale nie są biblioteki. Prawdziwe biblioteki w języku C, czy też C++ mają inne rozszerzenie (nie pamiętam, jakie) i użytkownik nie ma możliwości podglądu, co się w nich znajduje. A mając pliki .h i .cpp możesz w nich wszystko zmienić.
Awatar użytkownika
ethanak
Złota rączka
Posty: 784
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: ethanak » 3 mar 2018, 11:29

@Marhef: w kwestii formalnej - jest to biblioteka.
Nie ma różnicy czy biblioteka to windowsowy .DLL, UN*Xowy .so, czy zwykłe archiwa typu ar a nawet gołe źródła w C. Różnica jest tylko w sposobie linkowania. DLL/so są już w pełni skompilowane i program zawiera jedynie informacje o tym, jakich funkcji i z jakiej biblioteki będzie używać, a linkowanie będzie przeprowadzone w trakcie uruchamiania programu. Taki kod nazwiemy dynamicznym.
Archiwa są co prawda skompilowane, ale ich linkowanie jest częścią etapu tworzenia programu wykonywalnego, a wykonywalny program zawiera wszystko co mu jest potrzebne. Kod jest statyczny.
Przy Arduino nie ma możliwości wstępnej kompilacji ze względu na wielość architektur docelowych, na które będziemy kompilować program, a linkowanie dynamiczne nie ma sensu bez systemu operacyjnego. Dlatego biblioteki są rozpowszechniane w postaci źródłowej (chociaż niekoniecznie taka musi być zrozumiała dla człowieka).
W każdym z przypadków do utworzenia programu potrzebny jest plik .h, a jak wspominał MrLewerence - dokumentacja jest częścią biblioteki. Przy czym wielokrotnie spotkałem się z tym, że w przypadku rozpowszechniania w postaci źródłowej dokumentowane są pliki .cpp a nie .h.
W większości przypadków (pomijając pewien chory system operacyjny) kody bibliotek są otwarte, więc równie dobrze możesz ów kod przeczytać czy też zrobić sobie własną modyfikację biblioteki.

@Karl: może powiesz jakiej pomocy szukasz? Bo może po prostu szukasz nie w tym miejscu co trzeba...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Awatar użytkownika
Karl
Majsterkowicz
Posty: 55
Rejestracja: 3 gru 2014, 10:00

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: Karl » 4 mar 2018, 12:45

W tej chwili walczę z dwoma zagadnieniami:
1) Sterowanie serwami. Chciałem płynnie, delikatnie i wolno zmieniać pozycję. Liczyłem, że w bibliotece wykopię jakiś parametr speed, czy acceleration, ale nic takiego nie widzę. Trzeba będzie czas trwania ruchu poszatkować na drobno.
2) ESP8266WebSerwer - server.send(200, "text/plain", "Umiem wyświetlić dowolny tekst"); , ale nie umiem wyświetlić parametru :/
Awatar użytkownika
ethanak
Złota rączka
Posty: 784
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Jak w pełni i świadomie wykorzystać bibliotekę ?

Post autor: ethanak » 4 mar 2018, 15:11

1) Nie ma czegoś takiego - musisz szatkować i najlepiej użyć servo.writeMicroseconds a nie servo.write;
2) jakiego parametru? Tworzysz sobie jakiś string i go wysyłasz, np:

Kod: Zaznacz cały

String parametr="x";
String s = "To jest parametr " + parametr;
server.send(200, "text/plain", s);
Możesz użyć również sendContent/sendContent_P - możliwości jest mnóstwo.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
ODPOWIEDZ

Strony partnerskie: