-
Data: 2014-05-30 10:02:52
Temat: Re: [Laik] C przerwanie działania funkcji.
Od: g...@s...invalid (Adam Wysocki) szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Andrzej W. <awa_wp@na_wp_oczywiscie.pl> wrote:
> Tak, chciałbym takiego watchdoga na funkcję. Na cały systemie mam
> sprzętowego, ale zabijanie całego systemu jest zauważalne dla użytkownika.
> Niestety wszystkie funkcje które chcę nadzorować są funkcjami obsługi
> sprzętu, a sprzęt czasem lubi robić sobie jaja.
Idea szczytna, ale mam wrażenie że takie podejście ("ubicie" funkcji)
zaprowadzi Cię na manowce... gdyby to było inne środowisko - takie, w
którym masz możliwość kontrolowanego zwolnienia zasobów, używanych przez
coś, co zawiodło, to można byłoby się pokusić o "ubijanie", dlatego
wspomniałem o C++, wyjątkach i RAII, ale w czystym C nie da się z tego co
wiem tego elegancko zrobić.
Co w tych funkcjach obsługi sprzętu czeka? Czekasz na ustawienie jakiegoś
pinu? To w tej pętli możesz też czekać na ustawienie flagi z przerwania
(jeżeli chcesz mieć jeden timeout na całą funkcję) i jeżeli flaga będzie
ustawiona, to wtedy wywołaj reset sprzętu. Albo jeżeli ma być timeout na
ustawienie pinu, to np. zapamiętać liczbę ticków (inkrementowaną przez
timer) i sprawdzać, czy aktualna liczba ticków jest większa, niż
zapamiętana plus określony timeout (pamiętając oczywiście o
przepełnieniach).
> Plan był taki, że jeśli ląduje w funkcji obsługi przerwania, to
> sprawdzam która funkcja się zawiesiła, robię restart sprzętu
> wykorzystywanego przez tę funkcję, zeruje jej zmienne i skaczę do punktu
> B i program kręci się dalej.
Reset sprzętu to też czekanie... nie rób takich rzeczy w przerwaniu. Niech
funkcja obsługi przerwania trwa jak najkrócej - inkrementacja licznika,
czy ustawienie flagi.
Przerwanie to szczególny stan dla MCU - głównie dlatego, że inne
przerwania (oraz ponowne wystąpienie tego samego przerwania) są wtedy
zablokowane. Można je odblokować, ale trzeba bardzo dokładnie przemyśleć
wszystkie możliwe scenariusze, inaczej będzie problem, łącznie z
możliwością przepełnienia stosu i nadpisania heapa (zakładając, że
nie ma MMU, ale skoro mówisz, że to MCU, to pewnie bez MMU).
> Niestety to wszystko ma się dziać poza kodem funkcji, ma to być
> zabezpieczenie na wypadek nieprzewidzianego, nieudokumentowanego
> zachowania sprzętu prowadzącego do pozostania funkcji np. w
> nieskończonej pętli.
Temat jest poważniejszy niż się na początku wydaje - czy system ma ukrywać
błędy sprzętu i być niezawodny mimo wszystko, czy jeżeli coś jest nie tak,
to należy to zgłosić, żeby nie doprowadzić do większej katastrofy (bo
program nie wie, co się dzieje, stan urządzenia jest niespójny).
Jeżeli masz sprzęt, który czasami zawodzi, trzeba go resetować i chcesz
lub musisz zapewnić wtedy prawidłowe działanie programu, to najlepiej
zaimplementować to resetowanie w funkcjach obsługujących ten sprzęt.
Jeżeli chcesz zabezpieczyć się na wszelki wypadek, bo może stać się
cokolwiek... to tak naprawdę i tak nie przewidzisz wszystkich możliwości.
Pamiętam sytuację, gdy w jednym modelu terminala płatniczego był moduł
Bluetooth, który (na dostępnym wtedy firmware) czasami się zawieszał.
Dodałem po prostu obsługę jego resetowania do klas, które go obsługiwały,
jego zawieszenie było traktowane po prostu jak normalny stan, z którym
program potrafi sobie poradzić.
Tak naprawdę o ile nie robisz sprzętu, który nigdy nie może zawieść (np.
sprzęt lotniczy, medyczny, automotive), to ja w krytycznej sytuacji, gdy
sprzęt zawodzi (a nie jest to jego normalna cecha) po prostu wywaliłbym
błąd i zresetował urządzenie. Przypadki lotnicze, medyczne itd. to ogólnie
inna bajka, tam stosuje się różne standardy (np. MISRA), których normalnie
raczej nie ma potrzeby stosować.
Kojarzę, że kiedyś była taka dyskusja między Linusem (maintainerem kodu
jądra Linuksa) a kimś innym od innego jądra jakiegoś innego Uniksa, nie
pamiętam dokładnie jakiego. W tym innym jądrze było dużo kodu, który miał
radzić sobie z nieprzewidywalnymi sytuacjami. W Linuksie przyjęto inne
podejście - jeżeli coś wymyka się spod kontroli i nie wiadomo, co się
stało, to nie ma sensu próbować ratować sytuacji - jest kernel panic
(który można skonfigurować tak, żeby automatycznie restartował kernel).
W uC odpowiednikiem może być po prostu watchdog. A że user to zauważy...
trudno, ma niesprawny sprzęt.
--
SELECT finger FROM hand WHERE id = 3;
http://www.chmurka.net/
Następne wpisy z tego wątku
- 30.05.14 10:11 Adam Wysocki
- 30.05.14 10:21 Adam Wysocki
- 30.05.14 10:27 Stachu 'Dozzie' K.
- 30.05.14 10:29 Adam Wysocki
- 30.05.14 18:01 Edek
- 30.05.14 20:54 A.L.
- 30.05.14 22:23 Andrzej W.
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek
- 2025-07-13 Unia Europejska przygotowuje nowy podatek