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

Odpowiedz Nowy wątek
2011-03-07 15:47
0

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


:)
edytowany 3x, ostatnio: bordeux, 2011-03-07 15:48

Pozostało 580 znaków

2011-03-07 16:07
hck

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]();
    }

Pozostało 580 znaków

2011-03-07 16:16
0

Dzięki. Pomogło.

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


:)

Pozostało 580 znaków

2011-03-07 20:33
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”…

edytowany 1x, ostatnio: Azarien, 2011-03-07 20:37

Pozostało 580 znaków

2011-03-08 16:20
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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