Witam,
wczoraj wpadłem na pomysł stworzenia na AVR zalążka zbioru funkcji obsługujących zadania pracujące "w tle".
Całość opiera się o timer i flagę inkrementowaną w przerwaniu.
Głównym celem stworzenia funkcjonalności była obsługa termometrów DS18B20, przy obsłudze których jesteśmy zmuszeni w pierwszej kolejności rozpocząć przetwarzanie danych a następnie po pewnym czasie odczytać pomiary.
Pewnie tą funkcję później wykorzystam do obsługi odświeżania menu w konsoli i na wyświetlaczu LCD.
Dzięki temu pętla główna będzie bardziej przejrzysta, na jej początku będzie można włączyć wszystkie wymagane zadania a w założeniu, w kolejnym etapie, poprzez np. terminal możliwe będzie sprawdzenie które zadania aktualnie są wykonywane - prosty task manager.
Kod jest jedynie pomysłem, pewnie będę dalej go modyfikował, zmieniał i poprawiał, ale to uzależnione jest od wolnego czasu.
task.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
task.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W pętli main należy dodać pętlę wykonującą poszczególne zadania.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zadania dodajemy w prosty sposób:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Natomiast w przerwaniu od timera inkrementujemy naszą flagę, dobrze by było nie korzystać ze zmiennych globalnych i stworzyć funkcję do inkrementacji zmiennej lokalnej i na jej podstawie sterować funkcjami. (np. zmienna lokalna ms1000).
Strukturę zawierającą informację o zadaniu można dowolnie zmodyfikować, przechowywać w niej warunki, nazwę funkcji w stringu, wyniki zadania itp.
Prosił bym o opinie dotyczące pomysłu. Wszelkie uwagi i porady mile widziane
Pozdrawiam