miki53 napisał(a):
Mam pytanie
Callback to funkcja za pomocą której wywołujemy inną funkcję
Tak to rozumiem
teraz pytanie czemu nie wywoływać drugiej funkcji w ten sposób
Bo tu nie do końca chodzi o samo wywołanie jednej funkcji przez drugą.
Wywołując "na sztywno" funkcję tak jak zaproponowałeś musisz już ją mieć w momencie pisania np. biblioteki i tego już w trakcie wykonywania programu nie zmieniasz.
Idea callbacka jest taka, że pisząc bibliotekę nie zastanawiasz się jaką konkretnie funkcję będziesz wywoływał. Masz po prostu wywołać jakąś funkcję i może to być dowolna funkcja a na dodatek w trakcie programu mogą one być zmieniane.
Najprostszy przykład to biblioteki do obsługi enkodera lub przycisków.
Wciśnięcie przycisku, raz może wywoływać menu, kiedy indziej zatwierdzać wpisane dane, a jeszcze innym razem np. potwierdzić przyjęcie alarmu lub uruchomić jakieś urządzenie. I to ten sam przycisk w różnych miejscach jednego programu.
Mając bibliotekę z callbackiem, nie modyfikujesz jej za każdym razem pod konkretny program, piszesz ją raz, uniwersalnie a potem tylko w programie rejestrujesz funkcję którą chcesz wykonywać jako callback i biblioteka robi/wywołuje to co chcesz, bez modyfikacji.
------------------------ [ Dodano po: 16 minutach ]fofex napisał(a):
miki53 napisał(a):
pytanie czemu nie wywoływać drugiej funkcji w ten sposób
A dlaczego nie? Callbacki w HAL STM32 właśnie tak są wywoływane.
Samo wywołanie funkcji przecież i tu też jest identyczne.
Zmieńcie sobie nazwę callback na funkcja_2 i właśnie tak się będzie ją wywoływało. Istotą nie jest samo wywołanie, tylko to, że trzeba najpierw pod ten callback, albo funkcja_2 podstawić adres funkcji którą chcemy wywołać i to robią funkcje register_callback, ale jak ktoś nie chce wywoływać tej funkcji i mu łatwiej to zrozumieć to może w programie na sztywno przypisać callback=nowa_funkcja; i też będzie działać, tylko trzeba jeszcze upublicznić deklarację wskaźnika (*callback).