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 24 maja 2025, o 17:50


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 25 mar 2014, o 23:40 
    Offline
    Nowy

    Dołączył(a): 26 cze 2013
    Posty: 19
    Pomógł: 0

    witam,

    W programiku 17_Superdebounce, w petli while definiujemy zmienne lokalne

    uint8_t k1, k2;

    później uzywane w funkcji SuperDebounce(); Dalej w funkcji tej sprawdzany jest warunek:

    if( key_press && !*key_state ), gdzie *key_state = k1 lub k2 i teraz moje pytanie jeśli nie zainicjalizowałem nigdzie zmienne k1 to jaką wartość będzie miała ta zmienna?

    Napisałem programik sprawdzający i po przejsciu przez cala petle while , bez wciaskania jakiego kolwiek przycisku k1=1; k2=0;

    Pozdrawiam Tomasz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2014, o 22:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Jeśli nie zainicjujesz zmiennych lokalnych jakakolwiek wartością to będą one miały przypadkowe wartości. Tak jest w tym przykładzie. Z każdym obiegiem pętli while zmienne k1 i k2 są tworzone na nowo i mogą mieć przypadkowe wartości.

    Żeby tak nie było możesz te zmienne utworzyć jako zmienne globalne albo jako zmienne lokalne w funkcji main przed pętlą while. Ale wtedy będą musiały być zainicjowane zerami.

    Mirek chyba w jakimś temacie wspominał, że w kodach są umieszczone takie "pułapki", które to zmuszają czytelnika do myślenia :-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 mar 2014, o 19:19 
    Offline
    Nowy

    Dołączył(a): 26 cze 2013
    Posty: 19
    Pomógł: 0

    Hej,

    Nim odczytałem twojego posta zrobiłem tak jak napisałeś, przeniosłem te zmiene przed main jako lokalne.

    Ciekawe jest to iż mimo wyłączenia(zakomentowania) wszystkiego w pętli while wg. piewotnego zapisu , k1 na starcie zawsze =1, zaciekawiło mnie to jak to możliwe.

    Ale nic, nie można wiedzieć wszystkiego.

    Ps Progam również działał prawidłowo w oryginalnej wersji :)

    Pozdrawiam Tomasz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 mar 2014, o 00:02 
    Offline
    Użytkownik

    Dołączył(a): 02 lut 2014
    Posty: 38
    Lokalizacja: Jaworzno
    Pomógł: 2

    Kompilator potrafi wysłać ostrzeżenie jeśli podejrzewa, że zmienna lokalna została użyta bez wcześniejszej inicjalizacji.


    Autor postu otrzymał pochwałę


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

    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