Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] - Jak sprawdzić czy zmienna zmieniła wartość.

faziil 11 Lip 2013 22:16 1707 6
  • #1 11 Lip 2013 22:16
    faziil
    Poziom 15  

    Witam. Mam pętlę główną w której zmienna1 odświeża się z każdym przejściem pętli(while(1)) i przyjmuje wartości z zakresu 1-10, wartość ulega zmianie po naciśnięciu przycisku(do tego momentu odświeża się ta sama liczba). Jak to rozwiązać aby dany kod programu wykonał się tylko raz podczas zmiany tej liczby?

    Coś w tym stylu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 6
  • Pomocny post
    #2 11 Lip 2013 22:21
    2091744
    Użytkownik usunął konto  
  • #3 11 Lip 2013 22:23
    faziil
    Poziom 15  

    Tak też pomyślałem ale ciężko mi to było napisać.

    0
  • Pomocny post
    #4 11 Lip 2013 22:30
    2091744
    Użytkownik usunął konto  
  • Pomocny post
    #5 12 Lip 2013 08:37
    perlon
    Poziom 19  

    W zasadzie to są dwa podejścia do tematu:
    1. Odświeżanie na żądanie ( trochę mi się rymło ) tj. każda operacja zmieniająca wyświetlaną daną powinna wywołać funkcję odświeżania ekranu. Nowy odczyt temperatury - bach zapis na ekran. Zmienił się stan wejścia - bach zapis na ekran itd.
    2. Odświeżanie cykliczne tj. ekran odświeżany jest w zadanych odstępach czasu bez względu na to czy coś uległo zmianie czy nie. Sam zapis na ekran odbywa się z bufora do którego różne zdarzenia asynchronicznie zapisują swoje dane, czyli zamiast "bach zapis na ekran" to bach zapis do bufora. Osobny timer ( np.programowy) co jakiś czas "bach bufor na ekran"

    0
  • Pomocny post
    #6 12 Lip 2013 09:10
    BlueDraco
    Specjalista - Mikrokontrolery

    Oba przykłady podane przez kamil1984 są błędne. Pierwszy, oparty na porównaniu "nowej" i "starej" wartości zmiennej w rzeczywistości nie wykrywa zmiany wartości, bo zapamiętanie "starej" nie ma związku z wykryciem zmiany. Powinno być mniej-więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W drugim zmienna odliczający okres aktualizacji powinna być dekrementowana w przerwaniu timera, bo inaczej okres aktualizacji będzie dość losowy - raz b. krótki, innym razem - b. długi.

    0
  • Pomocny post
    #7 12 Lip 2013 13:21
    2091744
    Użytkownik usunął konto