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 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/ |