[STM32] Wyjątki C++ na przykładzie systemu ISIX-RTOS

Tab. 1. Błędy logiczne sygnalizowane wyjątkami

Klasa wyjątku Opis
logic_error Klasa bazowa dla pozostałych błędów logicznych wywodząca się z exception.
domain_error Liczba poza dziedziną.
invalid_argument Błędny argument przekazany do funkcji.
length_error Błąd rozmiaru. Np przy próbie zmiany rozmiaru wektora.
out_of range Wartość poza zakresem.

 

Tab. 2. Błędy wykonania sygnalizowane wyjątkami

Klasa wyjątku Opis
runtime_error Klasa bazowa dla pozostałych błędów wykonania wywodząca się z exception.
range_error Błąd zakresu.
overflow_error Błąd przepełnienia.
underflow_error Błąd niedomiaru.

 

Oczywiście każdy z tych wyjątków może być zgłaszany nie tylko przez bibliotekę standardową, ale także przez kod użytkownika. Bazując na powyższych klasach, hierarchia wyjątków może być rozbudowywana w razie potrzeb przez użytkownika.

Przykład praktyczny: obsługa wyjątków w ISIX-RTOS

Po zapoznaniu się z podstawowymi wiadomościami teoretycznymi na temat wyjątków w C++ , pokażemy, że mogą być stosowane z powodzeniem również w przypadku nieco większych mikrokontrolerów. Pozwalając na znaczące podniesienie niezawodności działania programu, oraz przy stosowaniu z umiarem zapewniają również podniesienie ogólnej wydajności aplikacji.

Posłużmy się teraz prostym przykładem (platforma STM32Butterfly), w którym jeden wątek będzie odpowiedzialny za mruganie diodą D1, i sygnalizował będzie jedynie prawidłowe działanie systemu operacyjnego. Natomiast drugi wątek, będzie zmieniał stan diody D2 na przeciwny w przypadku wciśnięcia klawisza joysticka OK. W przypadku wciśnięcia klawisza DOWN, lub UP, zgłaszany będzie wyjątek, który będzie symulował wystąpienie, błędu. Dodatkowo na linii PE0 wystawiany będzie stan 1 przez czas od momentu zgłoszenia wyjątku, do jego przechwycenia co pozwoli na zbadanie ogólnej wydajności obsługi wyjątków w GCC na architekturze CORTEX-M3. Kod programu przedstawiono na poniższym listingu:

O autorze