Programowanie uwzględniające odporność — Immunity-aware programming

Podczas pisania oprogramowania dla systemów wbudowanych , programowania świadomy odporność odnosi się do technik programowania, które poprawiają tolerancję błędów w nieustalonych licznika programu lub innych modułów programu, który w przeciwnym razie doprowadzi do awarii. Błędy przejściowe są zwykle powodowane przez pojedyncze zdarzenia zakłóceniowe , niewystarczającą moc lub silne sygnały elektromagnetyczne przesyłane przez inne urządzenie „źródłowe”.

Programowanie uwzględniające odporność jest przykładem programowania defensywnego i programowania zgodnego z EMC . Chociaż większość z tych technik stosuje się do oprogramowania w urządzeniu „ofiary”, aby uczynić je bardziej niezawodnym, kilka z tych technik stosuje się do oprogramowania w urządzeniu „źródła”, aby emitować mniej niepożądanych szumów.

Zadanie i cele

Mikrokontrolery ' firmware można niedrogo poprawić kompatybilność elektromagnetyczną danego wbudowanego systemu .

Firmware systemów wbudowanych zwykle nie jest uważany za źródło zakłóceń o częstotliwości radiowej . Emisje radiowe są często powodowane przez częstotliwości harmoniczne zegara systemowego i prądy przełączające. Impulsy na tych przewodach mogą mieć szybkie czasy narastania i opadania, powodując, że ich przewody działają jak nadajniki radiowe. Efekt ten potęgują źle zaprojektowane płytki drukowane . Efekty te są redukowane przez zastosowanie sterowników wyjściowych mikrokontrolera o wolniejszych czasach narastania lub wyłączenie komponentów systemu.

Mikrokontroler jest łatwy do kontrolowania. Jest również podatny na awarie spowodowane zakłóceniami o częstotliwości radiowej. Dlatego zapewnienie odporności oprogramowania mikrokontrolera na takie błędy może tanio poprawić tolerancję systemu na zakłócenia elektromagnetyczne, zmniejszając potrzebę zmian sprzętowych.

Możliwe zakłócenia systemów opartych na mikrokontrolerach

Mikrokontrolery CMOS mają specyficzne słabe punkty, które można wzmocnić oprogramowaniem przeciwdziałającym zakłóceniom elektromagnetycznym. Często wymagana jest analiza przyczyn i skutków awarii systemu oraz jego wymagań. Do takiej analizy można łatwo dodać kwestie kompatybilności elektromagnetycznej.

Zasilacz

Powolne zmiany napięcia zasilającego nie powodują znaczących zakłóceń, ale gwałtowne zmiany mogą spowodować nieprzewidywalne kłopoty. Jeśli napięcie przekracza parametry w arkuszu danych sterownika o 150 procent, może to spowodować zawieszenie się portu wejściowego lub wyjściowego w jednym stanie, znanym jako zatrzask CMOS . Bez wewnętrznej kontroli prądu zatrzask powoduje wypalenie mikrokontrolera. Standardowym rozwiązaniem jest połączenie zmian oprogramowania i sprzętu. Większość systemów wbudowanych posiada zegar nadzoru . Ten watchdog powinien znajdować się na zewnątrz mikrokontrolera, aby prawdopodobnie był odporny na wszelkie prawdopodobne zakłócenia elektromagnetyczne. Należy zresetować zasilanie, wyłączając je na krótko. Okres watchdoga powinien trwać połowę lub mniej czasu i mocy wymaganej do wypalenia mikrokontrolera. Konstrukcja zasilacza powinna być dobrze uziemiona i odsprzęgnięta za pomocą kondensatorów i cewek indukcyjnych w pobliżu mikrokontrolera; niektóre typowe wartości to równolegle 100uF i 0,1uF.

Niska moc może spowodować poważne awarie większości mikrokontrolerów. Aby procesor mógł pomyślnie dekodować i wykonywać instrukcje, dostarczane napięcie nie może spaść poniżej minimalnego poziomu napięcia. Gdy dostarczane napięcie spadnie poniżej tego poziomu, procesor może zacząć wykonywać niektóre instrukcje nieprawidłowo. Rezultatem jest nieoczekiwana aktywność na wewnętrznych liniach danych i kontroli. Ta aktywność może powodować:

  • Uszkodzenie rejestru procesora
  • Uszkodzenie rejestru we/wy
  • Losowe przełączanie pinów we/wy
  • Uszkodzenie SRAM
  • Uszkodzenie EEPROMROM

Wykrywanie Brownout rozwiązuje większość tych problemów w większości systemów, powodując wyłączenie systemu, gdy główne zasilanie jest zawodne. Jeden typowy system ponownie uruchamia licznik czasu za każdym razem, gdy główne napięcie AC przekracza 90% jego napięcia znamionowego. Jeśli timer wygaśnie, przerywa działanie mikrokontrolera, który następnie wyłącza swój system. Wiele systemów mierzy również napięcia zasilania, aby zabezpieczyć się przed powolną degradacją zasilania.

Oscylator

Porty wejściowe oscylatorów CMOS mają wysokie impedancje , a zatem są bardzo podatne na zakłócenia przejściowe. Zgodnie z prawem Ohma wysoka impedancja powoduje duże różnice napięć. Są również bardzo wrażliwe na zwarcie spowodowane wilgocią lub kurzem.

Jedną z typowych awarii jest wpływ na stabilność oscylatorów. Może to spowodować zatrzymanie lub zmianę okresu. Zwykłe zabezpieczenia systemowe mają mieć pomocniczy oscylator wykorzystujący jakiś tani, solidny schemat, taki jak pierścień inwerterów lub jednorazowy timer rezystorowo-kondensatorowy. Po zresetowaniu (być może spowodowanym przez zegar watchdog), system może domyślnie je ustawić, przełączając czuły oscylator kwarcowy tylko wtedy, gdy pomiary czasu udowodnią, że jest stabilny. Często w systemach o wysokiej niezawodności mierzy się częstotliwość zegara przez porównanie jej z zewnętrznym standardem, zwykle zegarem komunikacyjnym, linią energetyczną lub zegarem rezystorowo-kondensatorowym.

Wybuchy zakłóceń elektromagnetycznych mogą skrócić okresy zegara lub spowodować impulsy, które prowadzą do nieprawidłowego dostępu do danych lub wykonania polecenia. Rezultatem jest nieprawidłowa zawartość pamięci lub wskaźniki programu. Standardową metodą przezwyciężenia tego w sprzęcie jest użycie pętli synchronizacji fazy na chipie do wygenerowania rzeczywistego sygnału zegara mikrokontrolera. Oprogramowanie może okresowo weryfikować struktury danych i odczytywać krytyczne porty za pomocą głosowania, rozmieszczając odczyty w czasie lub przestrzeni.

Porty wejścia/wyjścia

Porty wejścia/wyjścia — w tym linie adresowe i linie danych — połączone długimi liniami lub zewnętrznymi urządzeniami peryferyjnymi to anteny, które umożliwiają wywoływanie zakłóceń. Zakłócenia elektromagnetyczne mogą prowadzić do nieprawidłowych danych i adresów na tych liniach. Silne wahania mogą spowodować, że komputer błędnie odczyta rejestry we/wy, a nawet przerwie komunikację z tymi portami. Wyładowanie elektrostatyczne może w rzeczywistości zniszczyć porty lub spowodować nieprawidłowe działanie.

Większość wyprowadzeń mikrokontrolerów to wejścia o wysokiej impedancji lub mieszane wejścia i wyjścia. Piny wejściowe o wysokiej impedancji są wrażliwe na szum i mogą rejestrować fałszywe poziomy, jeśli nie są prawidłowo zakończone. Piny, które nie są zakończone wewnątrz układu scalonego, wymagają podłączenia rezystorów. Muszą one być podłączone do masy lub zasilania, zapewniając znany stan logiczny.

Rysunek przyczynowo-skutkowy. Należy ustalić przyczynę, aby można było rozwiązać problem.

Działania korygujące

Bardzo ważna jest analiza ewentualnych błędów przed korektą. Przyczynę należy ustalić, aby można było rozwiązać problem.

Stowarzyszenie Motor Industry Software Reliability Association identyfikuje wymagane kroki w przypadku błędu w następujący sposób:

  • Informacja/ostrzeżenie użytkownika
  • Przechowuj błędne dane do czasu, aż będzie można przeprowadzić zdefiniowany reset
  • Utrzymuj system w zdefiniowanym stanie, aż błąd będzie można naprawić

Zasadniczo do przeciwdziałania błędom stosuje się redundancję. Obejmuje to uruchamianie dodatkowego kodu (redundancja w czasie), a także przechowywanie dodatkowych bitów (redundancja w przestrzeni).

Zarządzanie błędami wskaźnika instrukcji (IP)

Zakłócony wskaźnik instrukcji może prowadzić do poważnych błędów, takich jak niezdefiniowany skok do dowolnego miejsca w pamięci, gdzie odczytywane są niedozwolone instrukcje. Stan systemu będzie niezdefiniowany. Błędy IP mogą być rozwiązywane przy użyciu rozwiązań opartych na oprogramowaniu, takich jak tokeny funkcyjne i slajdy NOP .

Wiele procesorów, takich jak Motorola 680x0, zawiera pułapkę sprzętową po napotkaniu nielegalnej instrukcji. Wykonywana jest poprawna instrukcja, zdefiniowana w wektorze pułapki, a nie losowa. Pułapki mogą obsłużyć większe błędy zakresu niż tokeny funkcji i slajdy NOP. Uzupełniając nielegalne instrukcje, pułapki sprzętowe bezpiecznie obsługują naruszenia dostępu do pamięci, przepełnienia lub dzielenie przez zero.

Przekazywanie tokena (token funkcji)

Przekazywanie tokenów jako kontrola przepływu wykonania
Źródło C: przekazywanie tokenów z globalnym identyfikatorem funkcji.

Ulepszoną odporność na zakłócenia można osiągnąć dzięki kontroli przepływu wykonania znanej jako przekazywanie tokenów. Rysunek po prawej przedstawia schematycznie zasadę działania. Ta metoda zajmuje się błędami przepływu programu spowodowanymi przez wskaźniki instrukcji.

Wdrożenie jest proste i wydajne. Każda funkcja jest oznaczona unikalnym identyfikatorem funkcji. Gdy funkcja jest wywoływana, identyfikator funkcji jest zapisywany w zmiennej globalnej. Funkcja jest wykonywana tylko wtedy, gdy identyfikator funkcji w zmiennej globalnej i identyfikator funkcji są zgodne. Jeśli identyfikatory nie są zgodne, wystąpił błąd wskaźnika instrukcji i można podjąć określone działania naprawcze. Przykładowa implementacja przekazywania tokenów przy użyciu zmiennej globalnej zaprogramowanej w C jest opisana w poniższym listingu źródła.

Jest to zasadniczo sekwencja „uzbrojenie / ogień” dla każdego wywołania funkcji. Wymaganie takiej sekwencji jest częścią bezpiecznych technik programowania, ponieważ generuje tolerancję na błędy pojedynczego bitu (lub w tym przypadku zabłąkanego wskaźnika instrukcji).

Implementacja tokenów funkcji zwiększa rozmiar kodu programu o 10 do 20% i spowalnia wydajność. Aby poprawić implementację, zamiast zmiennych globalnych, jak powyżej, identyfikator funkcji można przekazać jako argument w nagłówku funkcji, jak pokazano w przykładowym kodzie poniżej.

Źródło C: przekazywanie tokenów z parametrami funkcji

slajd NOP

Dzięki NOP-Fills można w niektórych przypadkach poprawić niezawodność systemu w przypadku zakłóconego wskaźnika instrukcji. Cała pamięć programu, która nie jest używana przez kod programu, jest wypełniona instrukcjami No-Operation ( NOP ). W kodzie maszynowym instrukcja NOP jest często reprezentowana przez 0x00 (na przykład Intel 8051, ATmega16 itp.). System jest utrzymywany w określonym stanie. Na końcu fizycznej pamięci programu musi być zaimplementowana obsługa błędów wskaźnika instrukcji (IPEH IP-Error-Handler). W niektórych przypadkach może to być prosty reset.

Jeśli podczas wykonywania wystąpi błąd wskaźnika instrukcji, a program wskazuje segment pamięci wypełniony instrukcjami NOP, nieuchronnie wystąpił błąd i zostanie on rozpoznany.

Stosuje się trzy metody wdrażania NOP-Fills:

  • W pierwszej metodzie nieużywaną pamięć fizyczną ustawia się ręcznie na 0x00 poprzez wyszukiwanie i zamianę w pliku programu (HEX) . Wadą tej metody jest to, że trzeba to robić po każdej kompilacji.
Pamięć programu wypełniona kodem, NOP i obsługą błędów
  • Druga metoda wykorzystuje opcję fill linkera, która wypełnia nieużywane regiony pamięci predefiniowaną stałą (w tym przypadku 0x00).
  • Trzecim sposobem jest umieszczenie odpowiedniej liczby dyrektyw asemblera NOP bezpośrednio w kodzie programu.

Korzystając z kompilatora CodevisionAVR C , wypełnienia NOP można łatwo zaimplementować. Programator chipów oferuje możliwość edycji programu flash i EEPROM w celu wypełnienia go określoną wartością. Używając Atmel ATmega16, nie ma potrzeby wykonywania skoku w celu zresetowania adresu 0x00, ponieważ przepełnienie wskaźnika instrukcji automatycznie ustawia jego wartość na 0x00. Niestety resety z powodu przepełnienia nie są równoznaczne z celowym resetem. Podczas zamierzonego resetu wszystkie niezbędne rejestry MC są resetowane sprzętowo, czego nie dokonuje się poprzez skok do 0x00. Tak więc ta metoda nie będzie stosowana w kolejnych testach.

Pamięć przed i po zaimplementowaniu zarówno tokena funkcji, jak i NOP-Fills

Błędy rejestru we/wy

Architektura mikrokontrolera wymaga umieszczenia wyprowadzeń I/O na zewnętrznej krawędzi krzemowej matrycy. W ten sposób na styki we/wy silnie wpływają zakłócenia przejściowe w drodze do rdzenia krzemowego, a rejestry we/wy są jedną z najbardziej wrażliwych części mikrokontrolera. Źle odczytane rejestry we/wy mogą prowadzić do nieprawidłowego stanu systemu. Najpoważniejsze błędy mogą wystąpić na porcie resetowania i portach wejściowych przerwań. Zakłócone rejestry kierunku danych (DDR) mogą uniemożliwiać zapis do magistrali.

Zakłóceniom tym można zapobiec w następujący sposób:

1. Cykliczna aktualizacja najważniejszych rejestrów

Poprzez cykliczną aktualizację najważniejszego rejestru oraz danych w rejestrach kierunku danych w możliwie najkrótszych odstępach czasu można zredukować błędy. W ten sposób błędnie ustawiony bit może zostać poprawiony, zanim będzie miał negatywne skutki.

2. Wielokrotny odczyt rejestrów wejściowych

Kolejną metodą filtrowania zakłóceń jest wielokrotny odczyt rejestrów wejściowych. Wczytane wartości są następnie sprawdzane pod kątem spójności. Jeśli wartości są spójne, można je uznać za prawidłowe. Zdefiniowanie zakresu wartości i/lub obliczenie wartości średniej może poprawić wyniki w niektórych zastosowaniach.
Efekt uboczny : zwiększona aktywność
Wadą jest zwiększona aktywność dzięki stałym aktualizacjom i odczytom urządzeń peryferyjnych. Ta czynność może dodać dodatkowe emisje i awarie.
Zewnętrzne porty przerwań; przepełnienie stosu
Zewnętrzne przerwania są wyzwalane przez spadające/rosnące zbocza lub wysoki/niski potencjał na porcie przerwań, co prowadzi do żądania przerwania (IRQ) w kontrolerze. Przerwania sprzętowe dzielą się na przerwania maskowalne i przerwania niemaskowalne (NMI). Wyzwalanie maskowalnych przerwań może zostać zatrzymane w niektórych funkcjach krytycznych czasowo. Jeśli zostanie wywołane przerwanie, bieżący wskaźnik instrukcji (IP) jest zapisywany na stosie, a wskaźnik stosu (SP) jest zmniejszany. Adres procedury obsługi przerwań (ISR) jest odczytywany z tablicy wektorów przerwań i ładowany do rejestru IP, aw konsekwencji ISR ​​jest wykonywany.
Jeśli przerwania — z powodu zakłóceń — są generowane szybciej niż przetwarzane, stos rośnie aż do wykorzystania całej pamięci. Dane na stosie lub inne dane mogą zostać nadpisane. Można zastosować defensywną strategię oprogramowania. Wskaźnik stosu (SP) można obserwować. Rozrost stosu poza zdefiniowany adres można wtedy zatrzymać. Wartość wskaźnika stosu można sprawdzić na początku procedury obsługi przerwań. Jeśli SP wskazuje na adres poza zdefiniowanymi limitami stosu, można wykonać reset.

Nadmiarowość danych

W systemach bez jednostek wykrywania i korekcji błędów niezawodność systemu można poprawić, zapewniając ochronę za pomocą oprogramowania. Ochrona całej pamięci (kodu i danych) może być niepraktyczna w oprogramowaniu, ponieważ powoduje niedopuszczalne narzuty, ale jest to zaimplementowane programowo, tanie rozwiązanie dla segmentów kodu.

Kolejnym podstawowym wymogiem systemów cyfrowych jest bezbłędna transmisja danych. Komunikacja z innymi komponentami może być słabym punktem i źródłem błędów systemu. Bardzo ważny jest przemyślany protokół transmisji. Opisane poniżej techniki można również zastosować do przesyłanych danych, zwiększając w ten sposób niezawodność transmisji.

Redundancja cykliczna i kontrola parzystości

Cykliczna kontrola nadmiarowa jest typem funkcji mieszającej stosować do wytwarzania sumy kontrolnej , która jest małą liczbą całkowitą od dużego bloku danych, na przykład ruchu w sieci lub plików komputerowych. CRC są obliczane przed i po transmisji lub duplikacji i porównywane w celu potwierdzenia, że ​​są równe. CRC wykrywa wszystkie błędy jedno- lub dwubitowe, wszystkie błędy nieparzyste, wszystkie błędy serii, jeśli seria jest mniejsza niż CRC, oraz większość błędów serii szerokiej. Kontrole parzystości mogą być stosowane do pojedynczych znaków (VRC — kontrola nadmiarowości pionowej ), co skutkuje dodatkowym bitem parzystości lub bloku danych (LRC — kontrola nadmiarowości wzdłużnej ), dając znak kontroli bloku. Obie metody można dość łatwo zaimplementować za pomocą operacji XOR. Kompromis polega na tym, że można wykryć mniej błędów niż w przypadku CRC. Kontrola parzystości wykrywa tylko nieparzyste liczby odwróconych bitów. Parzysta liczba błędów bitowych pozostaje niewykryta. Możliwym ulepszeniem jest użycie zarówno VRC, jak i LRC, zwanego Double Parity lub Optimal Rectangular Code (ORC).

Niektóre mikrokontrolery posiadają sprzętową jednostkę CRC.

Różne rodzaje powielania

Specyficzną metodą redundancji danych jest duplikacja, którą można zastosować na kilka sposobów, jak opisano poniżej:

  • Duplikacja danych
Aby poradzić sobie z uszkodzeniem danych, można przechowywać wiele kopii ważnych rejestrów i zmiennych. Podczas uzyskiwania dostępu do danych można następnie przeprowadzić kontrolę spójności między lokalizacjami pamięci przechowującymi te same wartości lub techniki głosowania.
Należy wprowadzić dwie różne modyfikacje kodu źródłowego.
  • Pierwsza odpowiada powielaniu niektórych lub wszystkich zmiennych programu w celu wprowadzenia nadmiarowości danych oraz modyfikacji wszystkich operatorów w celu zarządzania wprowadzoną repliką zmiennych.
  • Druga modyfikacja wprowadza weryfikację spójności w przepływie sterowania, dzięki czemu weryfikowana jest spójność między dwiema kopiami każdej zmiennej.

Kiedy dane są odczytywane, dwa zestawy danych są porównywane. Zakłócenie jest wykrywane, jeśli dwa zestawy danych nie są równe. Można zgłosić błąd. Jeśli oba zestawy danych są uszkodzone, może zostać zgłoszony poważny błąd, a system może odpowiednio zareagować.

W większości przypadków aplikacje krytyczne dla bezpieczeństwa mają ścisłe ograniczenia pod względem zajmowania pamięci i wydajności systemu. Powielanie całego zestawu zmiennych i wprowadzenie kontroli spójności przed każdą operacją odczytu stanowią optymalny wybór z punktu widzenia pokrycia błędów. Powielanie całego zestawu zmiennych umożliwia pokrycie niezwykle wysokiego odsetka błędów za pomocą tej techniki redundancji oprogramowania. Z drugiej strony, duplikując mniejszy procent zmiennych, można skompensować uzyskane pokrycie błędów z narzutem czasu procesora.

Eksperymentalna analiza narzutu czasu procesora i ilości zduplikowanych zmiennych

Wyniki eksperymentalne pokazują, że duplikowanie tylko 50% zmiennych wystarcza do pokrycia 85% błędów przy narzutu czasu procesora wynoszącym zaledwie 28%.

Należy również zwrócić uwagę na implementację kontroli spójności, gdyż jest ona zwykle przeprowadzana po każdej operacji odczytu lub na koniec okresu życia każdej zmiennej. Ostrożne wdrożenie tego sprawdzenia może zminimalizować czas procesora i rozmiar kodu dla tej aplikacji.

Przykładowy kod C: powielanie parametrów funkcji
Przykładowy kod C: powielanie warunków testowych
  • Powielanie parametrów funkcji

Ponieważ wykrywanie błędów w danych odbywa się poprzez powielanie wszystkich zmiennych i dodawanie kontroli spójności po każdej operacji odczytu, należy uwzględnić specjalne względy zgodnie z interfejsami procedur. Parametry przekazywane do procedur, jak również wartości zwracane, uważane są za zmienne. W związku z tym każdy parametr procedury jest duplikowany, a także wartości zwracane. Procedura jest nadal wywoływana tylko raz, ale zwraca dwa wyniki, które muszą zawierać tę samą wartość. Lista źródeł po prawej stronie pokazuje przykładową implementację powielania parametrów funkcji.

  • Przetestuj duplikację

Powielanie testu jest jedną z najbardziej niezawodnych metod wykrywania ogólnych błędów miękkich. Wadą jest to, że nie można poczynić ścisłego założenia co do przyczyny błędów (EMI, ESD itp.), ani rodzaju błędów, których można się spodziewać (błędy wpływające na przepływ sterowania, błędy wpływające na dane itp.). Błędne zmiany bitów w bajtach danych podczas przechowywania w pamięci, pamięci podręcznej, rejestru lub transmisji na magistrali są znane. Te bajty danych mogą być kodami operacji (instrukcjami), adresami pamięci lub danymi. Dzięki temu metoda ta jest w stanie wykryć szeroki zakres uszkodzeń i nie ogranicza się do konkretnego modelu uszkodzenia. Korzystając z tej metody, pamięć zwiększa się około czterokrotnie, a czas wykonywania jest około 2,5 razy dłuższy niż ten sam program bez powielania testów. Lista źródeł po prawej stronie pokazuje przykładową implementację powielania warunków testowych.

  • Rozgałęzione powielanie
Powielanie oddziałów

W porównaniu z powielaniem testowym, gdzie jeden warunek jest sprawdzany krzyżowo, w przypadku powielania rozgałęzionego warunek jest duplikowany.

Dla każdego testu warunkowego w programie warunek i wynikowy skok powinny być ponownie ocenione, jak pokazano na rysunku. Skok jest wykonywany dopiero wtedy, gdy warunek zostanie ponownie spełniony, w przeciwnym razie wystąpił błąd.

  • Powielanie instrukcji i różnorodność w realizacji

Jaka jest korzyść z duplikowania danych, testów i gałęzi, gdy obliczony wynik jest nieprawidłowy? Jednym z rozwiązań jest całkowite zduplikowanie instrukcji, ale zaimplementowanie ich w inny sposób. Tak więc wykonywane są dwa różne programy o tej samej funkcjonalności, ale z różnymi zestawami danych i różnymi implementacjami. Ich wyniki są porównywane i muszą być równe. Ta metoda obejmuje nie tylko przerzucanie bitów lub błędy procesora, ale także błędy programistyczne (bugs). Jeśli jest przeznaczone do obsługi błędów sprzętowych (CPU), oprogramowanie może być zaimplementowane przy użyciu różnych części sprzętu; na przykład jedna implementacja wykorzystuje mnożenie sprzętowe, a druga mnoży przez przesuwanie lub dodawanie. Powoduje to znaczne obciążenie (więcej niż czynnik dwa dla rozmiaru kodu). Z drugiej strony wyniki są niezwykle dokładne.

Porty

Zresetuj porty i porty przerwań

Porty resetowania i przerwania są bardzo ważne, ponieważ mogą być wyzwalane przez rosnące/opadające zbocza lub wysoki/niski potencjał na porcie przerwań. Zakłócenia przejściowe mogą prowadzić do niechcianych resetów lub wywołać przerwania, a tym samym spowodować awarię całego systemu. Dla każdego wyzwolonego przerwania wskaźnik instrukcji jest zapisywany na stosie, a wskaźnik stosu jest zmniejszany.

Spróbuj zmniejszyć ilość przerwań wyzwalanych zboczem . Jeśli przerwania mogą być wyzwalane tylko poziomem, pomaga to zapewnić, że szum na styku przerwania nie spowoduje niepożądanej operacji. Należy pamiętać, że przerwania wyzwalane poziomem mogą prowadzić do powtarzających się przerwań, o ile poziom pozostaje wysoki. Podczas wdrażania należy wziąć pod uwagę tę cechę; powtarzające się niechciane przerwania muszą być wyłączone w ISR. Jeśli nie jest to możliwe, przy natychmiastowym wprowadzeniu przerwania wyzwalanego zboczem wystarczy sprawdzenie oprogramowania na bolcu w celu określenia, czy poziom jest prawidłowy.

W przypadku wszystkich nieużywanych przerwań należy zaimplementować procedurę obsługi błędów, aby utrzymać system w zdefiniowanym stanie po niezamierzonym przerwaniu.

Niezamierzone resetowanie zakłóca prawidłowe wykonanie programu i jest niedopuszczalne w przypadku rozległych aplikacji lub systemów krytycznych dla bezpieczeństwa.

Resetowanie różnicowania (zimny/ciepły start)

Częstym wymaganiem systemu jest automatyczne wznowienie pracy po zakłóceniu/zakłóceniu. Przydatne może być rejestrowanie stanu systemu przy wyłączaniu i zapisywanie danych w pamięci nieulotnej. Podczas uruchamiania system może ocenić, czy system uruchamia się ponownie z powodu zakłóceń lub awarii (gorący start), a stan systemu może zostać przywrócony lub może zostać wskazany błąd. W przypadku zimnego startu dane zapisane w pamięci można uznać za ważne.

Zewnętrzny pomiar poboru prądu

Kombinacja sprzętu i oprogramowania: wykrywanie wahań zasilania za pomocą konwertera AD

Ta metoda jest połączeniem implementacji sprzętowych i programowych. Proponuje prosty obwód do wykrywania zakłóceń elektromagnetycznych z wykorzystaniem własnych zasobów urządzenia. Większość mikrokontrolerów, takich jak ATmega16, zawiera przetworniki analogowo-cyfrowe (ADC), które można wykorzystać do wykrywania nietypowych wahań zasilania spowodowanych zakłóceniami.

Gdy oprogramowanie wykryje zakłócenia, mikrokontroler może wejść w stan bezpieczny, czekając na ustąpienie agresji. W tym bezpiecznym stanie nie są dozwolone żadne krytyczne egzekucje. Grafika przedstawia, w jaki sposób można przeprowadzić detekcję zakłóceń. Ta technika może być z łatwością używana z dowolnym mikrokontrolerem wyposażonym w konwerter AD.

Pies podwórzowy

Watchdog Timer to elektroniczny timer, który wykrywa nieprawidłowe działanie innych komponentów i inicjuje działania naprawcze w celu przywrócenia normalnego działania. W szczególności zapewnia to, że urządzenia sterowane mikrokontrolerem nie ulegną całkowitej awarii w przypadku wystąpienia błędu oprogramowania lub chwilowego błędu sprzętowego. Zegary Watchdog są zazwyczaj oparte na zegarze monostabilnym lub liczniku cyfrowym. Układ czasowy może być zintegrowany z chipem mikrokontrolera lub może być zrealizowany jako obwód zewnętrzny. Zegary Watchdog mogą znacznie poprawić niezawodność mikrokontrolera w środowisku, w którym występuje wpływ elektromagnetyczny.

Oprogramowanie w regularnych odstępach czasu informuje watchdoga, że ​​nadal działa prawidłowo. Jeśli watchdog nie zostanie poinformowany, oznacza to, że oprogramowanie nie działa już zgodnie z opisem. Następnie watchdog resetuje system do zdefiniowanego stanu. Podczas resetu urządzenie nie jest w stanie przetwarzać danych i nie reaguje na połączenia.

Ponieważ strategia resetowania licznika watchdoga jest bardzo ważna, należy spełnić dwa wymagania:

  • Watchdog można zresetować tylko wtedy, gdy wszystkie procedury działają poprawnie.
  • Reset musi zostać wykonany tak szybko, jak to możliwe.

Prosta aktywacja watchdoga i regularne resetowanie timera nie zapewniają optymalnego wykorzystania watchdoga. Aby uzyskać najlepsze wyniki, cykl odświeżania timera musi być ustawiony na możliwie najkrótszy i wywoływany z funkcji głównej, aby można było wykonać reset przed uszkodzeniem lub wystąpieniem błędu. Jeśli mikrokontroler nie posiada wewnętrznego watchdoga, podobną funkcjonalność można zrealizować za pomocą przerwania czasowego lub urządzenia zewnętrznego.

Wygaszanie

A brown-out monitory obwodzie poziom VCC podczas pracy poprzez porównanie go do ustalonego poziomu wyzwalacz. Gdy VCC spadnie poniżej poziomu wyzwalania, reset brązowego wyłączenia jest natychmiast aktywowany. Gdy VCC ponownie wzrośnie, MCU zostanie ponownie uruchomiony po pewnym opóźnieniu.

Zobacz też

Uwagi

Linki zewnętrzne