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

[Rozwiązano] AVR pomiar czasu wykonywania algorytmu.

12 Sie 2019 23:08 192 9
  • Poziom 31  
    Witam.

    Szukam pomysłu jak zmierzyć czas wykonywania algorytmu np;

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Znając zegar procesora ma czas, potrzeba zliczyć impulsy, pewnie wchodzi w rachubę Timer, ale nie mam koncepcji jak się za to zabrać.
  • Poziom 39  
    Uruchamiasz timer przed wywołaniem procedury, zatrzymujesz po i odczytujesz ilość taktów które zliczył.
  • Poziom 26  
    Niestety zgrubnie musisz określić czas wykonania funkcji i dobrać odpowiedni preskaler Timera. Bardzo zgrubnie. Ja bym użył timera 16-bitowego z taktowaniem 1MHz, to każdy takt to będzie 1µS...wtedy masz maksymalny dostępny czas 65ms - raczej wystarczy...robiw

    Dodano po 2 [minuty]:

    Poza tym możesz napisać prosta funkcje obsługi przerwania od przepełnienia Timera i tam inkrementować zmienną - dowiesz się w ten sposób czy timer nie przepełnił się...robiw
  • Poziom 15  
    dasej napisał:
    Bardzo pomocna podpowiedź!
    Tyle to i Ja wiem.


    Praktycznie gotowiec na większość AVR.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    To samo można zrobić na timerze 8bit. Aby przeliczyć z cykli na czas trzeba znać częstotliwość taktowania.
  • Poziom 15  
    simw napisał:
    Można też użyć analizatora stanów logicznych. Przed i po wywołaniu algorytmu zmieniać stan pinu i sprawdzać czas na wykresie. W ten sposób nie jesteś ograniczony czasem od góry.

    A gdy użyje timera to jest ograniczony? Jaki problem aby zmienna cntHH miała 64 bity. Razem z timerem to 80 bit. Nie wiem czy GCC poradzi sobie z taka zmienna ale nawet przy 64 bitach i taktowaniu timera 16MHz daje to czas jakiś 37 tysięcy lat. Nawet 32 bit to jakieś 4,5minuty. Nie wystarczy?
  • Poziom 39  
    dasej napisał:
    A jak przekroczy czas timera?

    A jak przekroczy czas timera to robisz przerwanie od przepełnienia w którym inkrementujesz jakąś zmienną co rozszerza Ci skalę.
  • Poziom 15  
    excray napisał:
    dasej napisał:
    A jak przekroczy czas timera?

    A jak przekroczy czas timera to robisz przerwanie od przepełnienia w którym inkrementujesz jakąś zmienną co rozszerza Ci skalę.

    Śmiem zauważyć, że w #5 dałem praktycznie gotowy kod uwzględniąjcy przerwanie od przepełnienia.
  • Poziom 31  
    Co prawda nie zliczam czasu tylko cykle zegara ale można z tego bez problemu wyliczyć czas.
    Umieszczam ten kod dla innych którzy będą czegoś takiego potrzebowali.
    Efekt końcowy tematu.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jedną rzecz którą każdy będzie musiał zmienić to obsługę USART-a.