ATNEL tech-forum
https://forum.atnel.pl/

Dobre praktyki obsługi timeout'ów
https://forum.atnel.pl/topic21668.html
Strona 1 z 1

Autor:  szymanskim [ 6 gru 2018, o 17:36 ]
Tytuł:  Dobre praktyki obsługi timeout'ów

Cześć,
Rozpocząłem składanie do kupy, kodu do mojego projektu rejestratora temperatury. Przy tej okazji zastanawiam się nad
dobrymi praktykami w obsłudze komunikacji z tym urządzeniem. Będzie prościej jak opiszę o co chodzi.
Urządzenie w większości czasu jest w stanie uśpienia. Jeśli chcemy z niego coś odczytać poprzez moduł BLE należy go wybudzić magnesem poprzez załączenie kontaktronu. w tym momencie generowane jest przerywanie INT1.
Po takim wybudzeniu urzadzenie powinno być aktywne maks 10s i jeśli żaden komunikat nie przyjdzie po UART (załatwiane przez moduł BLE) ponownie idzie spac. Każda komenda która przyjdzie po UART powinna przedłużać ten czas wybudzenia o kolejne 5s. Pytanie jak najlepiej taki mechanizm zaprojektować, czy po prostu użyć timera i przerywania zegara? Jeśli tak to czy w INT1 po prostu regularnie odpytywać jakąś zmienną ustawianą przez przerywanie zegara a może po prostu sprawdzać ręcznie (o ile jest taka możliwość) rejestry zegara? W sumie podobną obsługę timeout'ów muszę zrobić przy obsłudzę kolejnych znaków komend np. oczytu danych z podanego okresu. Pomysłów mam parę ale jak się domyślam są sprawdzone metody i wolałbym nie kombinować.
Jeśli podobny problem był opinay w blue/greenbook to wdzięczny byłbym za namiary to po prostu przeanalizuje rozdział.

Michał

Autor:  Tom277 [ 7 gru 2018, o 09:54 ]
Tytuł:  Re: Dobre praktyki obsługi timeout'ów

Ja robię to mniej więcej tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiście powyższe w pewnym uproszczeniu.
Każda przychodząca prawidłowa komenda po UART-cie nadpisuje zmienna "odliczanie" nową wartością, która jest regularnie zmniejszana w przerwaniu timera. Jeśli w ciągu 5 sekund nie nadpisze się zmienna, timer w końcu doliczy do zera i ustawi flagę umożliwiając wywołanie funkcji usypianie mikrokontrolera.
Napisałem to "na kolanie" bez sprawdzania, ale powinno działać. Tak mniej więcej robię u siebie.

edit
oczywiście timer nie musi być co 1 sekundę, napisałem tak żeby nie zaciemniać.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/