[C] WinAVR Attiny13 - Wywołanie funkcji przez stringa (call_user_func)

1

Witam.
Mam problem.
Mam funkcję:
funkcja_1
funkcja_2
funkcja_3
funkcja_4
funkcja_5
funkcja_6
funkcja_7
funkcja_8
funkcja_9
funkcja_10

Teraz chcę wylosować liczbę z przedziału od 1-10 (wiem jak to zrobić), Liczbą która została wylosowana chcę wykonać funkcję. Np Jak została wylosowana liczba 6, to ma się wykonać
funkcja_6();

Poszukuje coś takiego jak call_user_func w PHP:
http://php.net/manual/en/function.call-user-func.php

1

Mógłbyś zrobić tablicę wskaźników do tych funkcji, czyli

 
	typedef void(*funkcja)();

	void funkcja1() {} 
	void funkcja2() {}

	int main() {
	funkcja tab[] = { funkcja1, funkcja2 };

	// wywołanie:
	tab[0]();
	tab[1]();
	}
0

Dzięki. Pomogło.

Lecz można to zrobić bez wypisywania nazw funkcji do tablicy?

0

Lecz można to zrobić bez wypisywania nazw funkcji do tablicy?
Nie. Zastanów się też, czy w ogóle potrzebujesz tych 10 osobnych funkcji. Pamiętaj, zasoby są BARDZO ograniczone: 1 kilo kodu, 64 bajty RAMu, 64 bajty „dysku”…

0

Należy pamiętać, że avr to konstrukcja harwardzka, zatem nawet prosta deklaracja stalych const trzymana jest w pamięci danych. GCC umożliwia deklarację stalych w pamięci flash, poprzez stosowanie przełącznika "PROGMEM", a późniejszy odczyt za pomocą funkcji pgm_read_byte zawartej w avr/pgmspace.h. W tym przypadku zastosowanie switch case będzie chyba najbardziej optymalnym rozwiązaniem.

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.