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

Mierzenie czasu wykonania kodu w C na AVR - odpowiednik clock()

Jacek212 11 Sty 2020 21:14 654 5
REKLAMA
  • #1 18396647
    Jacek212
    Poziom 13  
    Witam, chciałem zapytać czy w języku C dla AVR-ów jest coś podobnego jak funkcja clock() z pliku time.h w języku C++ na PC? Chcę tego używać do obliczenia czasu w jakim wykonuje się program/fragment programu.
  • REKLAMA
  • #2 18396659
    excray
    Poziom 41  
    Możesz w tym celu użyć timera. Uruchamiasz timer przed uruchomieniem programu a po zakończeniu odczytujesz ilość zliczonych taktów i przeliczasz na czas.
  • REKLAMA
  • #3 18397141
    MOBIUS19
    Poziom 11  
    Jacek212 napisał:
    chciałem zapytać czy w języku C dla AVR-ów jest coś podobnego jak funkcja clock() z pliku time.h w języku C++ na PC

    Nie ma. Musisz sobie napisać.

    Jacek212 napisał:
    Chcę tego używać do obliczenia czasu w jakim wykonuje się program/fragment programu.

    Jaki konkretnie mikrokontroler?
  • REKLAMA
  • REKLAMA
  • #5 18399192
    MOBIUS19
    Poziom 11  
    Jacek212 napisał:
    MOBIUS19 napisał:
    Jaki konkretnie mikrokontroler?

    Obecnie mam na warsztacie m88 ale często używam m8 i m32.

    Ilością timerów nie grzeszą ale to i tak lepiej niż tiny13 z jednym timerem.

    Pewnie używasz jakiegoś timera nazwałbym systemowego, pewnie 1 lub 10ms. Ja
    Czasy które chcesz mierzyć jaki mają zakres?
  • #6 18399343
    tmf
    VIP Zasłużony dla elektroda
    @Jacek212 Masz kilka możliwości:
    1. Użyć, jak podpowiedział kol. @excray timera. Metoda prosta i precyzyjna. Rozdzielczość może być ograniczona koniecznością użycia preskalera dla dłuższych czasów.
    2. Użyć AS i wbudowanego weń symulatora - pokazuje liczbę cykli zegara, można w ten sposób dokładnie zmierzyć dowolnie długie czasy wykonywania, ale... symulator działą wolniej nić prawdziwy MCU, czyli liczba cykli jest prawdziwa, tyle, że można zasnąć zanim skończy jakąś dłuższą funkcję. Zasymulowanie interakcji z IO jest możliwe, ale uciążliwe.
    3. Użyć pinu IO - przed rozpoczęciem funkcji zmieniasz jego stan i po zakończeniu ponownie. Ta metoda zazwyczaj wymaga podłączenia oscyloskopu, w którym ustawiasz odpowiednio wyzwalanie, lub skorzystania z interfejsu DGI jaki oferują narzędzia z Atmela.
    4. Zmodyfikować metodę 3. - przesłać marker po UART - oczywiście mierzenie pojedynczych cykli w ten sposób jest niemożliwe.
REKLAMA