Przerwania w STM32 IRQ vs callback

Przerwania w STM32 IRQ vs callback
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
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.:

Kopiuj
void UART5_IRQHandler(void)

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

Kopiuj
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.

katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
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.


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa
VT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 2 lata
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.

edytowany 2x, ostatnio: vtx
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0

OK, dzięki za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.