13-06-2019, 00:19
Kompilator lubi upraszczać, jest coś nazywane promocją do int i wyniki obliczeń mogą czasami być inne niż się spodziewamy. W millis też to występuje. Dlatego przestaje działać odmierzanie czasu po 50 dniach z millis, trzeba porównanie zapisać tak, by wynik był zawsze dodatni:
Pomimo, że jest działanie na dwóch uint32_t wynik normalnie jest traktowany jako int, liczba ujemna i już nigdy warunek by się nie spełnił bez tego wymuszenia (uint32_t). Czy tu faktycznie UL jest potrzebny nie wiem, może wystarczy rzutowanie na uint32_t.
Kod:
if((uint32_t)(czasTeraz-czasPoprzedni)>=1000UL) //tan napisany warunek jest odporny na "klątwe 50 dni millis()"
Pomimo, że jest działanie na dwóch uint32_t wynik normalnie jest traktowany jako int, liczba ujemna i już nigdy warunek by się nie spełnił bez tego wymuszenia (uint32_t). Czy tu faktycznie UL jest potrzebny nie wiem, może wystarczy rzutowanie na uint32_t.
Miło być decenianym https://buycoffee.to/kaczakat