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 w 2025? 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 3 maja 2025, o 18:48


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 5 lut 2018, o 14:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lut 2015
    Posty: 33
    Lokalizacja: Stalowa Wola
    Pomógł: 0

    Witam. Pisze program i natknąłem się na blok warunkowy w którym muszę sprawdzić jednocześnie siedem flag. Ma to działać na zasadzie jeżeli którakolwiek z nich jest ustawiona wykona się blok warunkowy. Moje pytanie jest następujące - czy pisać półkilometrową linijkę, czy jest jakiś bardziej elegancki sposób o którym nie wiem?

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lut 2018, o 14:13 
    Offline
    Użytkownik

    Dołączył(a): 02 gru 2015
    Posty: 549
    Pomógł: 27

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lut 2018, o 14:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1968
    Lokalizacja: Lipsko
    Pomógł: 125

    Ja często grupuję potrzebne flagi w jednym bajcie i w podobnej do Twojej sytuacji po prostu sprawdzam tylko jeden warunek, a nie całą litanię :)

    ------------------------ [ Dodano po: 7 minutach ]

    Twoje flagi akurat można spokojnie podpiąć pod taki bajt i nazwać, np. grupa_error.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Oczywiście ważne jest aby korzystać w programie z pojedynczych bitów, bo dość często wykorzystuje się cały bajt wykorzystując tylko dwa stany marnując jego potencjał. Ma to uzasadnienie gdy zależy na szybkości i objętości kodu.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lut 2018, o 07:02 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    Sylwek a powiedź proszę jak to się ma do szybkości działania? W BB są opisane pola bitowe z lakoniczną informacją, że oszczędność kodu jest kosztem szybkości dostępu do pojedynczych bitów i że programista sam musi określić, co jest bardziej istotne. Czy mógłbyś to trochę rozjaśnić? Myślę, że autor pytania również skorzysta, bo twoja propozycja jest zdecydowanie "ładniejsza" niż 7 warunków if.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lut 2018, o 07:31 
    Offline
    Moderator
    Avatar użytkownika

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

    Tom277 napisał(a):
    Sylwek a powiedź proszę jak to się ma do szybkości działania?

    Jeśli się kolega tak mocno zastanawia nad szybkością działania to najpierw powiedz o jaką szybkość ci chodzi i do czego ta szybkość ? ;)

    Tom277 napisał(a):
    W BB są opisane pola bitowe z lakoniczną informacją

    Skoro masz pola bitowe to wiadomo, że ładnie wygląda to dla oka, ale jeśli się je źle zorganizuje np jakieś pole kilkubitowe będzie leżało na granicy dwóch bajtów ... to już w ogóle aby mieć do tego dostęp kompilator będzie musiał wygenerować sporo operacji maskowania aby się dostać do potrzebnych bitów ...

    Tom277 napisał(a):
    że oszczędność kodu jest kosztem szybkości dostępu do pojedynczych bitów i że programista sam musi określić, co jest bardziej istotne.

    Dlatego jak jest sporo pamięci ram a potrzeba zaledwie kilku prostych flag do których odwołujemy się sporadycznie w programie i pojedynczo to absolutnie dużo szybciej wyjdzie odwoływać się nawet do flagi jedno-bitowej umieszczonej w jednym bajcie (pomimo marnotrawstwa 7 bitów) ;)

    ja wprawdzie nie jestem SylwekK ale w odpowiedzi na pytanie
    Tom277 napisał(a):
    Czy mógłbyś to trochę rozjaśnić?


    Jeśli zaś przychodzi nam często korzystać z kilku flag naraz to tak jak pisze Sylwek warto je grupować w ramach jednego bajtu i ... no co trzeba robić aby dowiadywać się o stanie np kilku z nich naraz ? MASKOWAĆ panie - maskować



    oczywiście idealną sytuacją jest gdy ktoś chce po prostu sprawdzić tylko (tak jak autor w pierwszym poście) czy któraś flaga jest = 1

    to co za problem umieścić je wszystkie w ramach JEDNEGO bajtu - a tak na prawdę to co oznacza umieszczenie ? Nic ... tyle co nadanie nazwy zmiennej, np

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


    i nie ważne z ilu bitów będziesz korzystał czy z 2, 4, czy z 8-miu - zawsze ten cały warunek z pierwszego postu można zapisać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    A jeśli będziesz chciał je sprawdzać grupami czy np tylko kilka z nich jest = 1 a inne są = 0 ... to przygotowujesz sobie odpowiednie maski dla takich grupek zgodnie z poradnikiem wyżej i po prostu dajesz warunek z odpowiednią maską
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Oczywiście gdy ma ich być więcej to wtedy już opłacać się może stworzenie pól bitowych np:

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


    i wtedy te warunki wyżej mogą wyglądać tak jak niżej już bez naszego maskowania bo kompilator za nas porobi odpowiednie maskowanie ;)

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


    albo nawet

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

    _________________
    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: 6 lut 2018, o 08:31 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1968
    Lokalizacja: Lipsko
    Pomógł: 125

    Ło matko! :) Mirku po Twoim rozwinięciu już chyba wszystkie wątpliwości powinny być rozwiane. Swoim kosztem zaoszczędziłeś mi kupę klikania :) Tylko podziękować i złocisty napój postawić :-D

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lut 2018, o 14:07 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    O kurcze dzięki Mirku.
    A o jaką szybkość mi chodzi, normalną :lol: Po prostu natknąłem się na informację, że stosowanie pól bitowych jest kosztem szybkości dostępu do nich no i nie miałem zielonego pojęcia o jak duże spowolnienie chodzi, jaki jest to rząd wielkości.
    Wiesz jak jest? Dla uczącego się, non stop pojawią się pytania i niejasność. Później wiele z tych rzeczy okazuje się nieistotne, ale to przychodzi z doświadczeniem, więc pytam.

    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lut 2018, o 23:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 mar 2014
    Posty: 1475
    Pomógł: 167

    SylwekK napisał(a):
    Mirku po Twoim rozwinięciu już chyba wszystkie wątpliwości powinny być rozwiane
    Jeszcze można do proponowanej struktury dodać unię, aby odwoływać się po różnej części (po bitach lub po całych bajtach) tej samej zmiennej. Jak praktycznie zastosować unię można znaleźć w Mirkowym poradniku.

    --
    Pozdrawiam,
    Robert

    ------------------------ [ Dodano po: 2 minutach ]

    Kolega fysiek zapytał się o zwykłego if-a, a dostał taką dawkę wiedzy, że pewnie długo nie będzie się mógł otrząsnąć ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lut 2018, o 09:00 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Skompiluj sobie prosty przykład z zastosowaniem zmiennych w kilku bajtach oraz w kilku bitach jednego bajtu i porównaj pliki .lss - powinieneś zobaczyć różnice.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lut 2018, o 19:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 lut 2015
    Posty: 33
    Lokalizacja: Stalowa Wola
    Pomógł: 0

    Dziękuję panowie. Widać już światełko w tunelu :)



    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: 10 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO