TaskScheduler in custom library

Hallo,

ich benutze die Library TaskScheduler
Git Link
und versuche diese in meiner custom library zu verwenden.

In der Klasse.h habe ich folgende Variable definiert:
Task *myTask;

In einer void möchte ich nun diesen Taskscheduler definieren mit:
myTask = new Task (0, TASK_FOREVER, Klasse::Void1(),&ts,false);

Ich bekomme die ganze Zeit die Fehlermeldung das ich diese Methode mit den falschen Parametern aufrufe.

Der Fehler liegt ganz klar bei der Methode weil wenn ich in der Klasse.cpp eine einfache void erstelle und diese eintrage funktioniert es.

Wie kann ich also eine Klassenfunktion beim Task hinterlegen?

In der Klasse.h habe ich folgende Variable definiert:
Task *myTask;

Das ist ein Nogo!

Deklarationen, in der *.h und Definitionen in der *.cpp

ich in der Klasse.cpp eine einfache void erstelle

void heißt "unbestimmt" oder "nicht vorhanden"
Damit ist hier offensichtlich der der Type des Rückgabewerts einer Funktion oder Methode gemeint.

Du hast Recht, ich habe die Variable in der .h deklariert.

Und möchte diese in der void "Init" dann deklarieren.

Wie bereits erwähnt funktioniert es wenn ich in der cpp eine void erstelle ohne Klassenbezug

z.B. void test1()

Wenn ich jedoch void KlasseA::test1() erstelle und diese bei der deklaration hinterlege, kommt der Fehler das er die Methode nicht finden kann

Sorry, aber ich finde den Zusammenhang nicht.

Mein Fehler, vielleicht wird es mit einem Codebeispiel etwas klarer was mein Problem ist.

TaskExample.h:

#ifndef TaskExample_h
#define TaskExample_h

#include <TaskScheduler.h>

class TaskExample
{
    public:
    TaskExample();
    void defineMyTask();
    void taskToExecute();

    Task *myTask;
    Scheduler ts;

};

#endif

TaskExample.cpp:

#include "TaskExample.h"


TaskExample::TaskExample(){}

void TaskExample::defineMyTask(){
    myTask = new Task (500,TASK_FOREVER, TaskExample::taskToExecute, &ts, false); // Funktioniert nicht (Falsche Parameter)
    myTask = new Task (500,TASK_FOREVER, externalVoid, &ts, false); // Funktioniert, bringt mir jedoch nichts
}

void externalVoid(){
    Serial.println("Ich werde ausgeführt, habe aber keinen Klassenbezug");
}

void TaskExample::taskToExecute(){
    Serial.println("Ich werde ausgeführt");
}

Die erste Zeile in DefineMyTask wirft einen Fehler weil die Parameter falsch sind und die zweite Zeile funktioniert ohne Probleme.

Die erste Zeile in DefineMyTask wirft einen Fehler weil die Parameter falsch sind

Sind sie ja auch!

Der Task Konstruktor erwartet offensichtlich einen Funktions Callback!

evtl. sind ja Lambda Funktionen eine Abhilfe

TaskExample instance; // global oder als static definieren

// später dann
myTask = new Task (500,TASK_FOREVER, [](){instance.taskToExecute();}, &ts, false); // Funktioniert

Ist aber auch noch nicht die Lösung.....


Ansonsten habe ich überhaupt noch nicht verstanden, was du "wirklich" erreichen möchtest.

Ich schätze mal, ich muss aufgeben.
Nutze sonst ausschließlich meine Tasksysteme und FreeRTOS.
Und deins, schmeckt mir irgendwie nicht.
Das war mir schon aufgefallen, als ich nach Alternativen für meins gesucht habe.

Guten Morgen,

hab es gerade mal mit deinem Lambda Code ausprobiert und bekomme trotzdem einen Error.

Ich hab das Thema auch mal in englisch eröffnet. Vllt kann mir da einer helfen.