Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 lip 2025, o 15:38


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 2 lip 2013, o 12:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Witam.
    Pewnie każdy z Was domyśli się, iż jestem początkującym, dlatego właśnie mam pytanie dotyczące funkcji statycznej. Podczas wertowania przykładu 5.5 LED w niebieskiej książce napotkałem się na funkcję, oto i ona:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Moje pytanie dotyczy, dlaczego jest ona funkcją statyczną (tak, wiem, że jest to napisane, ale wytłumaczenie "nie będzie ona udostępniana na zewnątrz do innych modułów" jakoś do mnie nie przemawia, tak już jest jak wcześniej zabrałem się za Bascoma, tam takich problemów nie było :D )

    Drugi problem to zrozumienie działania tej funkcji. Ogólnie rzecz biorąc wiem o co chodzi, przesyłanie 4 bitów do linii D7...D4. Wszystko OK, ale jeśli mógłby ktoś naprowadzić mnie na poprawny tok myślenia co do argumentu funkcji "data" byłbym wdzięczny. Czy dobrze rozumuję zapis:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Według mnie sprawa ma się tak.
    Jeżeli argument "data" ma wartość załóżmy 0000 0010 , a 1<<0 oznacza 0000 0001, to operacja:
    0000 0010 & 0000 0001 wyniesie 0000 0000 czyli fałsz.
    Jeżeli zaś data wynosi 0000 0001 to w tej sytuacji w wyniku operacji data & (1<<0) otrzymamy prawdę?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 12:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    Witam
    Niepotrzebnie sobie komplikujesz; przeczytaj jeszcze raz ten przykład ze str.209
    Jest tam napisane o pojedynczych bitach bajtu." ...Za każdym razem... "
    Pozdr.



    Ostatnio edytowano 2 lip 2013, o 18:14 przez kicajek, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 13:18 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    robert95 napisał(a):
    wcześniej zabrałem się za Bascoma, tam takich problemów nie było

    Zacząłbym od tego - że w Bascomie nie ma TAKICH możliwości więc nie miałeś problemów ze zrozumieniem czegoś czego nie ma

    robert95 napisał(a):
    Moje pytanie dotyczy, dlaczego jest ona funkcją statyczną (tak, wiem, że jest to napisane, ale wytłumaczenie "nie będzie ona udostępniana na zewnątrz do innych modułów" jakoś do mnie nie przemawia


    Twój kłopot wynika z tego że na razie albo nie doczytałeś w Bluebooku, albo jeszcze nie zaskoczyłeś na czym polega przede wszystkim podział projektu na pliki :( tu leży twój pies pogrzebany

    poza tym co to znaczy - (nie rozumiem - dlatego dopytuję) że to do ciebie nie przemawia ? ... to znaczy że co ?

    generalnie można ograniczać w C widoczność funkcji z jakiegoś pliku aby nie były widoczne w innych plikach .... ale jak ma to do ciebie przemówić - skoro pewnie jeszcze właśnie nie przećwiczyłeś podziału projektu na pliki

    więc nawet nie jesteś na razie w stanie dostrzec do czego i kiedy przydaje ci się ta właściwość.

    W Bascomie to PROJEKT = 1 PLIK .... i np 300 tys linii kodu w jednym pliku ..... więc nie mów mi że w Bascomie nie było problemów - bo takie podejście do pisania kodu to dopiero PROBLEM :(

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 19:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Cytuj:
    Twój kłopot wynika z tego że na razie albo nie doczytałeś w Bluebooku, albo jeszcze nie zaskoczyłeś na czym polega przede wszystkim podział projektu na pliki tu leży twój pies pogrzebany

    Jest Pan w wielkim błędzie (bez obrazy). Książkę z funkcjami statycznymi przewertowałem w tę i nazad... Rozumiem co to znaczy podział na pliki: w jednym, nagłówkowym, umieszczamy wszystkie definicje itp. aby potem móc tylko napisać w pliku głównym #include "nazwa.h" i cieszyć się np. o wiele bardziej przystępnymi nazwami, przede wszystkim krótszymi, które są umieszczone w tej naszej "bibliotece". Przykładowo w pliku nagłówkowym umieścimy instrukcje:
    #define LED_ON PORTA |= (1<<PA0)
    Następnie korzystamy z niej przystępnie i w łatwy do zapamiętania sposób. Drugą zaletą jest to, że możemy zmienić co nam się podoba, ale wówczas tylko w pliku nagłówkowym w 1 miejscu! Ot i cała filozofia.
    Ogólnie zdaję sobie sprawę jakie są zalety podziału na pliki itp. ale nie rozumiem dlaczego ta funkcja, o której mowa, ma być funkcją statyczną? TU PIES POGRZEBANY ! :(

    Podkreślam, że co to funkcja statyczna wiem, ale dlaczego akurat tutaj należy ją użyć? Dlaczego ma być niewidoczna dla innych modułów?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 20:49 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    Cytuj:
    Jest Pan w wielkim błędzie (bez obrazy).


    Nie obrażam się i pewnie masz rację - ja jestem tylko człowiekiem i też się mylę.

    robert95 napisał(a):
    Rozumiem co to znaczy podział na pliki: w jednym, nagłówkowym, umieszczamy wszystkie definicje itp. aby potem móc tylko napisać w pliku głównym #include "nazwa.h" i cieszyć się np. o wiele bardziej przystępnymi nazwami, przede wszystkim krótszymi, które są umieszczone w tej naszej "bibliotece"


    I mam nadzieję, że też się nie obrazisz jeśli jednak powiem, że jeszcze może nie do końca to rozumiesz ale już staram się pomóc i doprecyzować - pytać zawsze warto - po to jest to forum.

    na czerwono zaznaczyłem jeden z poważniejszych błędów jaki popełniasz w rozważaniach (być może to tylko literówka i miałeś na myśli deklaracje) no ale skoro napisałeś definicje - to muszę się do tego odnieść bo przez pół książki staram się wyjaśniać i zwracać uwagę, że NIEZROZUMIENIE różnic w tej kwestii czyli czym różni się definicja o deklaracji jest powodem ogromnej ilości dalszych błędów w rozumieniu. A więc w tym miejscu powinno być że w pliku nagłówkowym umieszczamy DEKLARACJE .... a wyjątkiem są (definicje preprocesora) ale to coś innego niż definicje w języku C. Reasumując pliki nagłówkowe owszem są także po to aby umieszczać w nich definicje preprocesora #define itp ... ale to mały pikuś jeśli chodzi o istotę zalet podziału na pliki

    Bodajże najważniejszą rzeczą jest to że dzięki nie można pięknie dzielić projekt na logicznie połączone fragmenty/ klocki.

    Oczywiście później dołączamy w plikach źródłowych *.c tylko pliki *.h w których mamy co ? (zapomnij na razie o definicjach preprocesora ok)

    w których mamy DEKLARACJE funkcji naszej tzw biblioteki - zgadza się ?

    i teraz pomyśl jak ja piszę bibliotekę to te funkcje które chcę eksportować do innych plików pewne funkcje - tak aby użytkownik się nimi posługiwał to DEKLARACJE tych funkcji przenoszę do pliku nagłówkowego. Dzięki temu funkcje te dostępne są dla użytkownika - bazując na tym przykładzie LCD masz dostępne takie np funkcje jak:

    lcd_str()
    lcd_int()

    i wiele innych zgadza się ? i zauważ że na końcu pliku nagłówkowego są ich DEKLARACJE bo DEFINICJE są w pliku *.c

    ale .... ale czy widzisz w pliku *.h DEKLARACJĘ tej funkcji o którą pytasz w pierwszym wątku ? No przyznasz chyba że nie ...

    co to oznacza ? oznacza to kilka rzeczy

    po pierwsze nie uważałem tego za stosowne aby dawać użytkownikowi tej biblioteki dostępu do tej funkcji - i chyba widzisz że pomimo dołączenia pliku *.h nie uda ci się z niej skorzystać w pliku main.c zgadza się ????

    dokonałem tego właśnie m.in w ten sposób że nie dałem DEKLARACJI w pliku nagłówkowym, ale gdybym nie opatrzył jej jeszcze dodatkowo słówkiem static to gdybyś spróbował sam ją dodać do *.h i jej użyć w swoim main.c - to udałoby ci się to

    gdy zaś opatrzyłem ją specyfikatorem static to powiedziałem kompilatorowi

    EEE panie kompilator, wara ze swoimi łapskami .... i pod żadnym pozorem nie udostępniaj tej funkcji jeśli user chciałby z niej skorzystać ... i tym razem gdybyś chciał z niej skorzystać to kompilator już nie da ci warninga a ERROR'a i QUNIEC


    ale jest jeszcze jedna ważna zaleta specyfikatora static dla funkcji. Jeśli go użyłem i kompilator wie, że taka funkcja nie będzie do użtku publicznego to może ją optymalizować w trakcie kompilacji o wiele lepiej na tle że po prostu kod funkcji oddzielnej zniknie a jej rozkazy zostaną wmiksowane w każde miejsce gdzie została użyta - tak jak funkcja inline - albo jeszcze inne sztuczki zrobi i w efekcie twoim oczom ukaże się po kompilacji że zużyłeś MNIEJ pamięci FLASH niż gdyby była bez static

    może teraz lepiej ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 21:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 60
    Pomógł: 0

    Dzięki wielkie panie Mirosławie, teraz nastała jasność w mojej głowie, przynajmniej w tym temacie. Pozostaje mi przystąpić do dalszej analizy rozdziału, swoją drogą wiem, że zadaję banalne wręcz pytania, ale jest to dla mnie naprawdę wyprawa w "nowy świat". Teraz widzę większą władzę w rękach programisty języka C w porównaniu programisty języka Bascom, jednak jak pan pisał wcześniej - wiele zależy od programisty, nieprawdaż? ;)
    Dziękuję wszystkim za odpowiedzi w tym temacie, przystępuje do dalszej miłej "męczarni" nad analizą tematu.
    Pozdrawiam, robert95.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lip 2013, o 22:21 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    robert95 napisał(a):
    swoją drogą wiem, że zadaję banalne wręcz pytania


    a co tam - kto pyta nie błądzi - o wiele lepiej pytać i pytać niż się poddać w zaciszu domowym i stwierdzić że C to nie dla mnie .... więc cieszę się że pytasz

    robert95 napisał(a):
    jednak jak pan pisał wcześniej - wiele zależy od programisty, nieprawdaż?


    zawsze będę podtrzymywał zdanie, że każdy język programowania jest tylko tak dobry jak programista, który się nim posługuje ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO