Mam taką funkcję przyjmującą godzinę w postaci stringa i porównującą ją z atualnym czasem:
Kiedy w opcjach kompilatora mam wyłączoną optymalizację (-O0), wtedy działa dobrze. Po włączeniu optymalizacji (-O1), zmienne seconds_in_day i seconds_in_day_now są źle obliczane. Np. zamiast około 80000 zmienna ma wartość około 2000. Wygląda to tak jakby optymalizacja psuła dodawanie lub mnożenie liczb 32-bitowych.
Dodatkowo, używając debugera (ATMEL-ICE), chciałem podejrzeć zmienne. Z włączoną optymalizacją dla wyżej wymienionych zmiennych w linijce, gdzie jest "diff= ..." pojawia się hint "optimized away". Nie wiem czy dobrze rozumiem, ale takie coś powinno się chyba zdarzyć w przypadku jeżeli zmienna jest w tym miejscu już niepotrzebna, ale tutaj jeszcze jest używana.
Czy ktoś jest w stanie wytłumaczyć co tu się w ogóle dzieje?
Mikrokontroler to ATMega644PA.
Kod: C / C++
Kiedy w opcjach kompilatora mam wyłączoną optymalizację (-O0), wtedy działa dobrze. Po włączeniu optymalizacji (-O1), zmienne seconds_in_day i seconds_in_day_now są źle obliczane. Np. zamiast około 80000 zmienna ma wartość około 2000. Wygląda to tak jakby optymalizacja psuła dodawanie lub mnożenie liczb 32-bitowych.
Dodatkowo, używając debugera (ATMEL-ICE), chciałem podejrzeć zmienne. Z włączoną optymalizacją dla wyżej wymienionych zmiennych w linijce, gdzie jest "diff= ..." pojawia się hint "optimized away". Nie wiem czy dobrze rozumiem, ale takie coś powinno się chyba zdarzyć w przypadku jeżeli zmienna jest w tym miejscu już niepotrzebna, ale tutaj jeszcze jest używana.
Czy ktoś jest w stanie wytłumaczyć co tu się w ogóle dzieje?
Mikrokontroler to ATMega644PA.
Moderowany przez dondu:Zakładaj proszę tematy we właściwych działach. Temat przeniosłem.

