Przerwania w STM32 IRQ vs callback

0

Cześć. Od niedawna interesuję się programowaniem uC STM32 i zastanawia mnie pewna kwestia związana z obsługą przerwań. Zauważyłem, że niektórzy do obsługi przerwań stosują funkcje zawierające słowo kluczowe IRQ np.:

void UART5_IRQHandler(void)

a w inni w których występuje słowo kluczowe callback np.:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

Jaka jest różnica w tych dwóch podejściach?
Z góry dziękuję za pomoc i proszę o wyrozumiałość ponieważ jestem początkujący.

0

Callback to nie przerwanie. To dwie różne rzeczy, które akurat w podanym przypadku dla użytkownika "interfejsu" zachowują się bardzo podobnie.
Przerwanie to podprogram wywoływany przez sam procesor. Callback to wywołanie funkcji wskazanej przez użytkownika przez część programu/podprogram ( np. po wykonaniu jakiegoś zadania ). W tym przypadku callback wywoływany jest z podprogramu działającego "jakby" na wyższym poziomie abstrakcji niż samo IRQ.

1

A nie jest przypadkiem tak, że:

to pierwsze jest handlerem (procedurą) bezpośrednio rejestrowaną w tablicy przerwań ARM-a, a to drugi to jest po prostu wywoływane jako callback z innej procedury HAL-a STM32?

Mówiąc inaczej - ta pierwsza procedura (handler) jest wywoływana bezpośrednio przez procesor w momencie wystąpienia przerwania, natomiast ta druga jest wywoływana pośrednio. To pośrednio oznacza coś takiego, że w momencie przyjścia przerwania wywoływana jest jakaś procedura HAL-a (to ona jest zarejestrowana w tabeli przerwań ARM) i to ona dopiero wywołuje twojego "callbacka".

Zwróć też uwagę na to że handler nie ma żadnego parametru - to tym bardziej świadczyłoby o tym że jest bezpośrednio rejestrowany w tablicy przerwań - bo procek nie przekazuje argumentów do handlerów z tego co pamiętam. Natomiast drugie wywołanie ma już argument - to znaczy że jest wcześniej jakieś inne przetwarzanie danych w wyniku którego dostajesz wskaźnik na UART-a.

0

OK, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1