Przerwania w mikrokontrolerze i języku C

0

Pracuję teraz w jednym projekcie w którym wykorzystuję mikrokontroler.
W pliku main.c jest procedura obsługi przerwania zewnętrznego i jest dołączony plik sensor.h. Główna funkcja w pliku sensor wygląda mniej więcej tak:


uint8_t get_meas(uint8_t state)
 

i ta funkcja jest wywoływana w pętli głównej, a parametr state pochodzi właśnie z przerwania.

Dostałem za zadanie przerobić tą funkcję, aby wykorzystywała callback. tzn. funkcja get_meas ma wywołać funkcję z pliku main.

Nie rozumiem zupełnie po co tak robić? I też nie wiem jak to zrobić?

Czy ktoś mógłby mi to wytłumaczyć, albo podać jakiś przykładowy kod?

0

Nie wiem jakie to MCU, stąd jedynie w postaci listy mogę poradzić.
Rejestracja:

  1. Blokujesz przerwania aby nie wywołało się w trakcie zmian.
  2. Z programu głównego, przypisujesz do widocznej dla get_meas(..) zmiennej, wskaźnik na funkcję callback'a.
  3. Odblokowujesz przerwania.
    Działanie.
  4. MCU zgłasza przerwanie.
  5. Wywołano get_meas(...).
  6. Funkcja get_meas(...) sprawdza w zmiennej wskaźnik na funkcję callback'a i jeśli nie jest NULL, to ją woła. Jeśli jest NULL, to nic z nią nie robi.
    Wyrejestrowanie:
  7. Blokujesz przerwania.
  8. Przypisujesz do zmiennej wskazującej na callback NULL
  9. Odblokowujesz przerwania.
0

MCU to AT91SAM7S256, generalnie dość stary projekt.

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