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



Teraz jest 30 sty 2025, o 22:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 23 sie 2014, o 19:21 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Mam problem ze zrozumieniem jednej linijki kodu a mianowicie chodzi o obsługę przycisku i reakcję na jego zwolnienie:

Oto cały kod:

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


A mianowicie chodzi o :

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


Jestem początkujący i jak widzę kilka warunków, negację i dekrementację mam problem ze zrozumieniem tego w pierwszej chwili
dlatego wszelkie objaśnienia będą cenne.

I mam jeszcze jedno pytanie odnośnie zmiennej globalnej :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
w pętli pierwszy warunek sprawdza czy key_lock jest równa zero i czy jest stan niski a wtedy przypisuje zmiennej key_lock wartość jeden. Skoro mam zdefiniowaną tą zmienną a nie mam przypisanej do niej żadnej wartości to dlaczego key_lock == 0 (czyli ! key_lock)? Jeżeli zdefiniuje zmienną a nie przypiszę jej wartości to z "automatu" jej wartość wynosi zero i dlatego ten pierwszy warunek jest spełniony???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2014, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Jest to nic innego jak flaga używana na potrzeby eliminacji drgań styków

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2014, o 19:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Linia o którą pytasz jest odpowiedzialna do dodanie pewnego opóźnienia, które związane jest z sumowaniem czasu potrzebnego na wykonanie tych wszystkich instrukcji (kilkudziesięciu w kodzie maszynowym).

Inkrementacja powoduje cykliczne zwiększanie wartości zmiennej, aż do napotkania wartości 255 po której następuje jej zerowanie tzw. "zapętlenie zmiennej" ze względu na jej pojemność ograniczoną typem 8-bitowym (uint8_t).
Ten moment zerowania "wykrywany" jest właśnie przez instrukcję warunkową, która w wyrażeniu ma znak '!' oznaczającego negację logiczną tj. wykonuj jeżeli różne od 0 (false).
W ten sposób uzyskany został pewien interwał czasowy między naciśnięciem przycisku, a ponownym jego testowaniem.

Zmienne globalne oraz statyczne są zerowane automatycznie, pozostałe nie mają takiej funkcjonalności, a więc jeśli ich początkowa wartość ma znaczenie to koniecznie trzeba je inicjalizować.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2014, o 20:27 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Czyli podsumowując: zmienna key_lock po sprawdzeniu pierwszego warunku ma wartość jeden w momencie pojawienia się stanu wysokiego jest sprawdzany kolejny warunek. I tutaj mam operatory o takim samym priorytecie prawostronnie łączne więc najpierw odbywa sie preinkrementacja
a potem jest negacja logiczna która powoduje że warunek będzie spełniony w momencie gdy preinkrementowana zmienna key_lock osiągnie wartość zero. Mimo że warunek nie jest w pierwszej chwili spełniony to nieskończona pętla powoduje doprowadzenie do stanu w którym ten warunek będzie spełniony. Dobrze rozumuję??? Jeżeli tak to dziękuję za objaśnienia.



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 5 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