- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: Funktion als Rückgabewert einer Funktion?

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009

    Funktion als Rückgabewert einer Funktion?

    Anzeige

    Praxistest und DIY Projekte
    Moin.

    Um ein Programm effizienter zu machen, bin ich auf der Suche nach einer Möglichkeit, den Rückgabewert einer Funktion zu verwenden, um eine bestimmte andere Funktion zu verwenden.

    Hintergrund: In einer Funktion wird eine State-Machine bearbeitet. Darin soll dann je nach Zustand eine andere Funktion ausgeführt werden.
    Um Speicher zu sparen, soll dann die State-Machine-Funktion davor beendet werden, so dass die anderen Funktionen dann aus der main() raus gestartet werden.

    Bisher ist es so, dass der Rückgabewert der Statemachine mit if-Anweisungen ausgewertet wird... geht zwar, aber dann bin ich wieder nicht in der main().

    Ich meinte mal was gelesen zu haben, dass man einer "Variable" die Adresse einer Funktion zu weisen kann und durch Variable() dann starten kann.

    Alt:
    In der State Machine:
    if (state == SetTime) { return (39); }

    In der main():
    fktNr = StateMachine();
    if (fktNr == 39) { Timer_SetTime(); }


    Neu: In der State-Machine soll die Zuweisung in dem Stil erfolgen:
    Code:
    if (state == SetTime) { xFunction = Timer_SetTime; }
    ....
    return (xFunction);
    Die main() sollte dann so aussehen:

    Code:
    int main(void)
    {
      while(1)
      {
        xFunction = StateMachine();
        xFunction();
      }
    }
    Liefert die State-Machine keine Funktion zurück, also soll nichts getan werden, müsste die Funktion eben "leer" sein.

    Nur krieg ich das nicht soganz hin. Also wie genau müsste dann xFunction deklariert/definiert werden und wie siehts dann da mit dem Aufruf aus?

    mfG
    #ifndef MfG
    #define MfG

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Am besten definierst du erstmal einen neuen Typ, das spart gerade bei Funktionszeigern eine Menge Tipparbeit.
    Code:
    typedef void(*fptr_t)(void);
    
    
    fptr_t StateMachine ( void ) {
    ...
        return Timer_SetTime;
    ...
    }
    
    
    int main ( void ) {
    
    fptr_t nextState;
    ...
    nextState = StateMachine();
    nextState();
    ...
    }
    MfG
    Stefan

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress