ATNEL tech-forum https://forum.atnel.pl/ |
|
!++key_lock nie rozumiem tego warunku. https://forum.atnel.pl/topic23874.html |
Strona 1 z 1 |
Autor: | 11jacekj [ 4 sie 2021, o 20:16 ] |
Tytuł: | !++key_lock nie rozumiem tego warunku. |
Witam. Czytałem dziś na blogu Mirka artykuł o drganiu styków http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html. Jest tam jeden taki kod język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zwolnienie przycisku ma zmieniać stan diody LED. Wybaczcie mi proszę, nie jestem w stanie zrozumieć tej pętli język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Dla mnie to wygląda tak: w pierwszym ifie sprawdzam czy przycisk jest wciśnięty, jeżeli jest to język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Ale jeżeli był wciśnięty i jest puszczony to: to jest sprawdzany drugi if ten po else. W nim warunek zwraca TRUE bo key_lock po wciśnięciu przycisku przycisku przyjął wartość 1 a skoro jest puszczony to język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. |
Autor: | mirekk36 [ 4 sie 2021, o 23:15 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): Wybaczcie mi proszę, nie jestem w stanie zrozumieć tej pętli Spokojnie wybaczamy - ale przede wszystkim TO nie jest pętla tylko WARUNEK IF ... a to spora róznica - także dla ciebie w myśleniu 11jacekj napisał(a): Dla mnie to wygląda tak: w pierwszym ifie sprawdzam czy przycisk jest wciśnięty, jeżeli jest to tu dobrze myślisz 11jacekj napisał(a): jeżeli nie jest to wychodzi program z pętli. No a tu już mieszasz sobie i plączesz że aż strach ... z jakiej pętli wychodzi ? Z głównej pętli programu while(1) { } ... ???? zobacz jak to opisałeś i pomyśl nie, tu nie wychodzi z żadnej pętli tylko po else - zwiększa się key o JEDEN i jednocześnie jest sprawdzane czy nie jest równe zero !++key_lock w czasie gdy key_lock ma wartość pomiędzy 1 a 255 i gdy przycisk jest już zwolniony else if( key_lock && (PINC & KEY1 ) ) { |
Autor: | 11jacekj [ 5 sie 2021, o 05:09 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
Oczywiście że warunek nie pętla, nie wiem dlaczego tak napisałem. Przepraszam za to. W takim razie źle zrozumiałem ten warunek po else: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj. A z tego co Mirku piszesz powinienem to odczytać jako: "zwiększ o JEDEN i sprawdź czy jest różne od ZERA"? |
Autor: | mirekk36 [ 5 sie 2021, o 08:51 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): A z tego co Mirku piszesz powinienem to odczytać jako: "zwiększ o JEDEN i sprawdź czy jest różne od ZERA"? Bo DOKŁADNIE tak jest pewnie zapomniało ci się o tym jak działają dwuczłonowe operatory ++ albo -- w PRE-INKREMENTACJI albo PRE-DEKREMENTACJI ... co masz opisane w Bluebooku ... więc krótko przypomnę ale sięgnij do BB żeby więcej doczytać język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. w związku z powyższym chyba już widzisz, że w warunku język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. masz do czynienia z PRE-INKREMENTACJĄ a nie POST-INKREMENTACJĄ, a zatem NAJPIERW zmienna key_lock zostanie zwiększona o JEDEN, następnie zostanie zanegowana za pomocą wykrzyknika i dopiero to wyrażenie (ta wartość) będzie brana pod uwagę w IF() |
Autor: | 11jacekj [ 5 sie 2021, o 09:10 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
mirekk36 napisał(a): a zatem NAJPIERW zmienna key_lock zostanie zwiększona o JEDEN, następnie zostanie zanegowana za pomocą wykrzyknika i dopiero to wyrażenie (ta wartość) będzie brana pod uwagę w IF() Już mi się chyba cos z głową dzieje, bo w związku z powyższym rozumiem to tak: jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE. jeżeli w kolejnym kroku zostanie zanegowane to otrzymamy FALSE. Czyli warunek nie zostanie spełniony. Za chwilę wyrwę sobie ostatniego włosa. Albo jestem jakiś ostatni matoł. |
Autor: | mirekk36 [ 5 sie 2021, o 11:16 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): Za chwilę wyrwę sobie ostatniego włosa. Albo jestem jakiś ostatni matoł. a przestań czasem się człowiek zatnie i co zrobić - ja też tak mam - szczególnie teraz gdy po raz pierwszy piszę softy do ESP 11jacekj napisał(a): bo w związku z powyższym rozumiem to tak: jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE. Tu ci zabrakło już tylko "jednego patyczka" ... Pomyśl, key_lock będzie wciąż zwiększany o JEDEN .. i wg ciebie ZAWSZE będzie większy od zera ? ... a co się stanie wg ciebie gdy już dojdzie do wartości 255 ( a PAMIĘTAJ że to zmienna 8-bitowa!) ... i zwiększy się jej wartość o JEDEN - to ILE BĘDZIE panie kochany ? no ile ? .... TAK! w końcu będzie upragnione ZERO które po zanegowaniu da oczekiwane TRUE !!! |
Autor: | 11jacekj [ 5 sie 2021, o 11:45 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
No tak, to oczywiste, zdałem sobie sprawę przy analizowaniu tego programu że po 255 będzie 0. ale nie dopuszczałem do głowy że to o to chodzi, coś mnie przyblokowało i nie zrobiłem kolejnego kroku do przodu. Przepraszam. Mózg zamknąłem w Mrokach Średniowiecza, dziś zapomniałem logi i hasło do najważniejszego programu u mnie w pracy. Wiem że szykujesz rewelację w ESP, może nie wiele się udzielam na forum ale czytam na bieżąco . A jeszcze wtrącę pytanie o ESP. Od jakiegoś czasu chodzi za mną żeby kupić do potestowania, pobawienia się, trochę już poczytałem. Którą wersję polecił byś mi kupić, tak żeby była kompatybilna z tym co planujesz? ta chyba jest najbardziej wypasiona przynajmniej w wyglądu i opisu pinów ale nie wiem czy się nadaje do czegokolwiek. |
Autor: | mirekk36 [ 5 sie 2021, o 12:11 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): Którą wersję polecił byś mi kupić, tak żeby była kompatybilna z tym co planujesz? Proponuję przed zakupem poczekać na start tej akcji - bo już w pierwszym poradniku wideo będę przede wszystkim wyjaśniał cały ten mętlik z ogromną ilością i różnorakich modułów ESP - że człowiek jak ma zacząć to nie wie co wybrać i w co ręce włożyć no nie ? Ja też tak miałem 2-3 miesiące temu - że aż kociej mordy dostałem .... dlatego szkoda że nie mogłem trafić nigdzie na taki poradnik wideo czy pisany - jaki ja teraz zrobię - bo MNÓSTWO ci się wyjaśni - zobaczysz - więc spokojnie czekaj - proponuję śmiało |
Autor: | 11jacekj [ 5 sie 2021, o 12:26 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
To powiedz chociaż czy dasz listę komend AT z polskim opisem. I na tym kończę moje pytanie o ESP w tym temacie, bo to nie to miejsce. |
Autor: | mirekk36 [ 5 sie 2021, o 13:02 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): To powiedz chociaż czy dasz listę komend AT z polskim opisem. No a jak może być inaczej ? Do ATNEL WIFI232-T nie było w wersji PL ? Było - tak i tu będzie ! .... ale to pikuś w porównaniu do opisu w PL w porównaniu do tego co będzie poza tym ... na razie tylko tak mogę powiedzieć |
Autor: | Marhef [ 18 sie 2021, o 22:34 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
11jacekj napisał(a): Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj Ja się jeszcze do tego odniosę. To nie do końca jest "zwiększ o 1 i zaneguj". To jest "zwiększ o 1 i sprawdź, czy nie jest FALSE". Operator '!' nie neguje zmiennej (od negacji jest '~')
|
Autor: | mirekk36 [ 19 sie 2021, o 09:21 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
Marhef napisał(a): 11jacekj napisał(a): Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj Ja się jeszcze do tego odniosę. To nie do końca jest "zwiększ o 1 i zaneguj". To jest "zwiększ o 1 i sprawdź, czy nie jest FALSE". Operator '!' nie neguje zmiennej (od negacji jest '~')No nie do końca tak jak piszesz ... dlaczego? Pomyśl sobie - warunek IF( wyrażenie ) ... sprawdza ZAWSZE CAŁE WYRAŻENIE, czy jest ono TRUE czy FALSE, a więc jeśli wyrażeniem jest jakieś działanie, to najpierw trzeba je zrealizować, a zatem 1. zwiększ wartość zmiennej o JEDEN 2. ZANEGUJ tę wartość po zwiększeniu 3. WYNIK wyrażenia będzie wzięty pod uwagę przez IF Wykrzyknik to operator negacji ale LOGICZNEJ a nie bitowej, dlatego nie ważne czy w zmiennej masz liczbę 1, 4 czy 237 to po zanegowaniu przyjmie wartość FALSE, a TYLKO w jednym przypadku przyjmie wartość TRUE, gdy zmienna osiągnie wartość zero. |
Autor: | Marhef [ 24 sie 2021, o 17:19 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
Masz rację, Mirku, źle to sformułowałem. Może ja źle zrozumiałem autora wątku, ale to miało być odniesienie do tego fragmentu: 11jacekj napisał(a): key_kock miał wartość 1 po wciśnięciu przycisku i dodatkowo jest preinkrementowany czyli ma wartość 2 ale po zanegowaniu ma wartość 0. I z mojego myślenia wychodzi żeby warunek był spełniony to key_kock w drugim ifie musiał by mieć wartość -1 wtedy po inkrementacji i zanegowaniu miał by wartość 1. Proszę wytłumaczcie mi jak to działa bo najwyraźniej źle myślę. I jeszcze do wypowiedzi w jednym z kolejnych wpisów:11jacekj napisał(a): jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE. jeżeli w kolejnym kroku zostanie zanegowane to otrzymamy FALSE. Czyli warunek nie zostanie spełniony. Zrozumiałem to tak, że autor (11jacekj) zrozumiał, że wynik negacji jest przypisany do zmiennej key_lock, co nie jest prawdą. Bo, tak jak piszesz, zmienna jest inkrementowana i wynik inkrementacji jest przypisany do zmiennej, natomiast negacja zmiennej key_lock nie jest przypisana do zmiennej, ten wynik jest brany pod uwagę tylko w ifie (dokładnie tak, jak wyjaśniłeś).Mam nadzieję, że nie namieszałem tym wpisem? |
Autor: | mirekk36 [ 24 sie 2021, o 19:47 ] |
Tytuł: | Re: !++key_lock nie rozumiem tego warunku. |
Cytuj: Mam nadzieję, że nie namieszałem tym wpisem? Ale dlaczego miałeś namieszać ? Po to jest forum żeby sobie podyskutować i czasem zwrócić uwagę na inne rozwiązanie czy podejście |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |