logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR - Jak "lepiej" konwertować sekundy na format czasu

waldek454_33 26 Sie 2012 12:39 1578 4
REKLAMA
  • #1 11246975
    waldek454_33
    Poziom 9  
    Witam,

    Mam pytanie bardziej teoretyczne. Czy lepiej dla procesora przy każdej sekundzie dzielić i przeliczać na minuty i godziny czy kontrolować zwiększanie licznika sekund i jak będzie 60 sekunda to zerować sekundy a zwiększać minuty i analogicznie dla godzin?
  • REKLAMA
  • #2 11247083
    trebuch1
    Poziom 26  
    Zliczanie sekund jest prostsze matematycznie ale należy zaangażować licznik procesora.
    Przeliczanie na minuty wymaga tylko "impulsatora" sekund ale podczas przeliczania wystąpią błędy z zaokrąglania a procesor jest zaangażowany w operacje matematyczne.
    Podsumowując, wybiera się metodę bardziej pasującą do realnych zasobów.
  • REKLAMA
  • #3 11247172
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 11247284
    kiziu13
    Poziom 17  
    Dodatkowo zliczanie angażuje zmienne o mniejszym rozmiarze. Sekundy, minuty i godziny można zapisać na 3 bajtach (w przypadku jednej zmiennej są to 4 bajty, bo 60*60*24 = 86 400, czyli int32), ale należy pamiętać, że operacje matematyczne w AVRach dostosowane są głównie do operacji na bajtach, do operacji na słowach jest bardzo mało instrukcji, a do operacji na podwójnych słowach nie ma żadnych.
  • #5 11248605
    tmf
    VIP Zasłużony dla elektroda
    waldek454_33 napisał:
    Witam,

    Mam pytanie bardziej teoretyczne. Czy lepiej dla procesora przy każdej sekundzie dzielić i przeliczać na minuty i godziny czy kontrolować zwiększanie licznika sekund i jak będzie 60 sekunda to zerować sekundy a zwiększać minuty i analogicznie dla godzin?


    Napisz o jaką konkretnie sytuację chodzi. Bo tylko w bardzo szczególnych przypadkach to o co pytasz ma znaczenie. W 99,99% przypadków zrób tak jak ci wygodniej. Teoretycznie trzymanie czasu w postaci hh:mm:ss jest szybsze, ale nie zawsze - np. liczenie różnicy dwóch czasów w tym formacie jest dosyć koszmarne (a jak jeszcze dojdą daty to w ogóle jest źle). Podobnie przy zasilaniu bateryjnym i wykorzystywaniu trybów uśpienia procka efektywniejsze jest wykorzystanie licznika 16/32 bitowego i konwersja, niż ciągłe budzenie MCU. Z drugiej strony jeśli to tylko prosty zegarek to można liczyć od razu w BCD z rozbiciem na hh, mm i ss.
    PS1. Nie każdy AVR ma sprzętowe mnożenie.
    PS2. Operacje na słowach i podwójnych słowach są w 99% przypadków rozbijane na podoperacje bajtowe - istnienie instrukcji ADIW/SBIW niewiele wnosi. Z drugiej strony dla porównania np. dodawanie 8 i 16-bitowe to kwestia 1 cyklu vs. 2 cykle. Oczywiście dla operacji np. mnożenia, czy dzielenia jest gorzej, ale też bez przesady.
REKLAMA