Cytuj:
To rozjaśnia moje spojrzenie na zagadnienie flag przerwań sprzętowych. Sądziłem, że sprzętowo będzie dokładniej, ale teraz rozumiem, że kluczem do tej dokładności jest długość pętli głównej.
Dokładnie liczy timer sprzętowy. W pętla głównej umieszczasz funkcje wymagające dłuższego czasu ich wykonania, ale timerowi sprzętowemu to nie przeszkadza, bo ma przerwania, które się wykonują wstrzymując działanie pętli głównej. Lecz jeżeli chcesz sam sprawdzać flagę znacznika przepełnienia zamiast generować przerwanie, to nie musisz to robić natychmiast po jej ustawieniu, ale musi to być szybciej niż jedno tyknięcie timera sprzętowego, bo inaczej będziesz gubił "tyknięcia".
Podobna zasada dotyczy timera programowego, tylko tutaj zakładasz jego długość x razy więcej niż sprzętowego. Dlatego aby zgubić jego "tyknięcie" to musisz w tym wypadku działać w pętli głównej x razy wolniej niż jakbyś sprawdzał flagę.
Dodatkowo timer programowy możesz używać w dwóch trybach. Pierwszy to wystawiający flagę a liczący od razu od początku. Więc jak nie zgubisz, jak wcześniej wpisałem jego tyknięcia, to masz dokładne odstępy. W drugiej wersji nie zliczasz kolejnych tyknięć dopóki nie zaczniesz obsługiwać tego timera. Przez co będziesz miał zmienną długość czasu timera (zależnie od długości działania pętli głównej), ale gwarancję że nie będą zgubione żadne tyknięcia.
Sam musisz wybrać jakie są wymagania Twojego rozwiązania i co będzie najlepsze.
Teoretycznie także możesz liczyć i obsługiwać timer programowy na przerwaniu. Tylko funkcje wykonywane na nim muszą to być proste - na przykład miganie diodą.
Choć może miganie diodą lepiej robić na początku w pętli głównej, bo jej nieregularność od razu mówi, że coś nie do końca tak robimy.
--
Pozdrawiam,
Robert