Funktion als Parameter übergeben

Hallo,
bin jetzt nicht so der C Crack und finde bei irgendwie nicht die richtigen Suchbegriffe.

Ich möchte eine Funktion in einer Library auslagern, welche als Parameter ein void Parameter entgegen nehmen kann, damit ich im Prinzip ein Event feuern kann, wenn ein bestimmtes Ereignis eintritt. Die Funktionen AttachInterrupt und DetachInterrupt machen so etwas. Also nehme ich an dass es möglich sein muss.

Wie muss ich die Funktion deklarieren, und wie muss dann die übergebene void in der Library aufgerufen werden.

Viele Grüße
Thorsten

Wenn du von einem void Parameter sprichst, meinst du dass du eine andere Funktion die vorher definiert ist über deine Lib aufrufen willst ?

Der Code entspricht nicht genau deiner Frage, ist aber nah dran. Es wird ein neuer Datentype festgelegt der den Zeiger auf eine void Funktion beinhaltet. Anschließend kann man der Variable mit diesem Datentype Funktionsnamen zuweisen, die dann aufgerufen werden.

typedef void (* FuncPtr) ();

FuncPtr   g_function;
uint8_t   something = 0;

void function_1()
{
  // mach was
  Serial.println("Function 1");
}
void function_2()
{
  // mach was anderes
  Serial.println("Function 2");
}

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  switch(something)
  {
    case 0:
      g_function = function_1;
    break;
    
    case 1:
      g_function = function_2;
    break;
  }
  //Aufruf der variablen Funktion je nachdem wie something festgelegt ist
  g_function();
}

Du solltest dir aber im klaren darüber sein, dass dies zu sehr unübersichtlichen Quellcode führen kann, den kaum noch jemand versteht. Außerdem solltest du vor der Verwendung von so einem Quellcode genau verstanden haben, was dort geschieht.

eclere:
Hallo,
bin jetzt nicht so der C Crack und finde bei irgendwie nicht die richtigen Suchbegriffe.

Ich möchte eine Funktion in einer Library auslagern, welche als Parameter ein void Parameter entgegen nehmen kann, damit ich im Prinzip ein Event feuern kann, wenn ein bestimmtes Ereignis eintritt. Die Funktionen AttachInterrupt und DetachInterrupt machen so etwas. Also nehme ich an dass es möglich sein muss.

Wie muss ich die Funktion deklarieren, und wie muss dann die übergebene void in der Library aufgerufen werden.

Viele Grüße
Thorsten

Ich verstehe jetzt schon nicht was Du machen willst. Kannst Du Dein Problem bitte praktisch erklären nicht nur Deine Lösungsidee.

Grüße Uwe

Hallo,
Jomelo hat das schon richtig verstanden. Es geht mir um die Lib "Encoder". Ich finde die extrem doof zu bedienen, außerdem bekomme ich immer für beide Pins ein Event, obwohl am Drehencoder nur ein Schritt gedreht wurde. Ich dachte mir ich kapsle meine Funtionen so, dass im Hauptcode dann einfach zb. die Funktionen OnLeft und OnRight aufgerufen werden.

Mittlerweile gleube ich aber dass eine Lib dafür gar nicht nötig ist, es wird reichen den Code einfach in eine extra Datei auszulagern.

Viele Grüße
Thorsten

Wenn Dir die Bibliothek Encoder nicht zusagt dann bau Dir daraus Deine privat-Bibliothek die genau das macht, was Du brauchst.
Du brauchst keine Funktionen die Funktionen aufrufen.

Grüße Uwe