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.

Nie mogę wykryć błędu w programie.

Jakub17 12 Maj 2017 16:06 867 3
  • #1 12 Maj 2017 16:06
    Jakub17
    Poziom 6  

    Witam.

    Mam taki program, rejestr 8 bitowy reprezentowany przez diody. Rejestr złożony z pinów dwóch portów. Wybaczcie za trywialny delay do drgań styków, na razie chciałem się skupić na głównym zadaniu programu.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Diody przełączają się jedna po drugiej po naciśnięciu przycisku aż do wartości 128. Po przekroczeniu tej wartości diody powinny zawracać. Niestety nie zawracają. Przygotowałem takie programowe debuggery i wychodzi na to zmienna że x faktycznie po przekroczeniu 128 zmienia wartość na 0 i warunek else jest osiągalny, problem w tym że nie wykonuje się w nim to co ma się wykonywać: tak jakby nie działo dzielenie przez 2, ponieważ jak wkleję w else np. pin_led(1,64); to diodka się zapala.

    0 3
  • Pomocny post
    #2 12 Maj 2017 16:28
    JarekC
    Poziom 27  

    Zmienna b jest typu uint8_t czyli ma zakres od 0 do 255.
    Jeżeli b==128 to to b*=2 nie da w wyniku 256 tylko 0.
    Warunek if (b>128) nigdy nie jest spełniony.

    Zmień program tak aby warunki graniczne sprawdzał przed wykonaniem dzielenia lub mnożenia.

    JarekC

    0
  • Pomocny post
    #3 12 Maj 2017 16:28
    krzysiek_krm
    Poziom 31  

    Witam,
    zmienna "b" jest 8 - bitowa, w pewnym momencie wykonuje się mnożenie 128 * 2 = 256, czyli dla 8 bitów zero. Warunek b > 128 nigdy nie jest spełniony. Tak na szybko, chyba ten warunek trzeba zamienić na b == 0, ale lepiej to przemyśl.

    Pozdrawiam

    0