MisterWhite napisał(a):
Trochę się nie zrozumieliśmy. Struktura SILNIK nie określa różnych silników, a opisuje parametry pracy jednego. Po prostu wywołując SILNIK1 mówię że np. nasz silnik ma obracać się do przodu z prędkością V1 a wywołując SILNIK2 uruchamiam go do tyłu z prędkością V2.
Nie zrozumieliśmy się, ponieważ dość ważne jest jednak nazewnictwo. Gdybyś np. strukturę nazwał PARAMETRY_RUCHU (lub choćby RUCH), a zmienne RUCH1, RUCH2, RUCH3, osobie postronnej łatwiej byłoby zrozumieć Twoje intencje. Podobnie jest z nazwą funkcji. Nazwa Obsluga_Silnika jest zbyt ogólna i niewiele mówi. Do mnie bardziej przemówiłaby np. nazwa Ustaw_Predkosc.
Nadal nie do końca rozumiem, co dokładnie chcesz osiągnąć. Przykładowo, skoro silnik jest jeden i klawisz ma ustawić jego parametry pracy, to po co Ci dwa wskaźniki do funkcji w jednej strukturze BUTTON. Jeden klawisz ma ustawić dwie różne prędkości tego samego silnika? Mam wrażenie, że niepotrzebnie skomplikowałeś sprawę i sam już się w tym nieco pogubiłeś. Gdybyś jednak mógł podać większe fragmenty kodu, być może łatwiej byłoby coś doradzić.
MisterWhite napisał(a):
Generalnie chodzi mi o to czy jest jakiś kruczek aby mieć wskaźnik do funkcji z wywołanym wcześniej parametrem.
Ogólnie rzecz biorąc, odpowiedź brzmi: NIE. Wskaźnik do funkcji to nie jest jakaś magiczna struktura, to zwykła wartość (16-bitowa w przypadku 8-bitowego AVR) reprezentująca adres (w pamięci programu) wejścia do funkcji. Żadnych dodatkowych informacji we wskaźniku umieścić się nie da. Można ewentualnie kombinować z użyciem jakichś "funkcji pośredniczących", ale raczej nie tędy droga (jak sam chyba zauważyłeś), choćby dlatego, że to fatalnie wpływa na czytelność kodu.
Moim zdaniem Twoje dylematy wynikają z próby niewłaściwego użycia wskaźników do funkcji, lub użycia ich w sytuacji do tego nieodpowiedniej. Wskaźniki do funkcji stosuje się np. tam, gdzie funkcja wywoływana po naciśnięciu klawisza jest inna w zależności od stanu, w jakim znajduje się aktualnie program (czyli np. przy obsłudze menu w zależności od kontekstu). Jeśli dobrze zrozumiałem, u Ciebie po naciśnięciu klawisza wywoływana jest zawsze ta sama funkcja ustawiająca parametry ruchu silnika, zmienia się tylko argument do niej przekazywany, więc wskaźnik do funkcji jest tu zbędny. W Twojej strukturze BUTTON możesz sobie zapisać ten argument (lub wskaźnik do niego) i przy obsłudze klawisza po prostu wywołujesz Twoją funkcję Obsluga_Silnika z tym argumentem.