C++ freeRTOS任务,非静态成员函数的无效使用

2024-02-21

哪里有问题?

void MyClass::task(void *pvParameter){
     while(1){
         this->update();
     }
}

void MyClass::startTask(){
    xTaskCreate(this->task, "Task", 2048, NULL, 5, NULL);
}

但是,我明白了:

错误:非静态成员函数的使用无效

我找不到任何有用的文档来检查错误在哪里,
但我认为应该是这样的:(C++11 的 std::thread)例如:

xTaskCreate(&MyClass::task, "Task", 2048, (void*)this, 5, NULL);

对我有用的解决方案:

void MyClass::task(){
    while(1){
        this->update();
    }
}

static void MyClass::startTaskImpl(void* _this){
    static_cast<MyClass*>(_this)->task();
}

void MyClass::startTask(){
    xTaskCreate(this->startTaskImpl, "Task", 2048, this, 5, NULL);
}

我将此模式与包装函数一起使用,以使用非静态成员函数实例化 pthread。 xTask中调用的函数是静态成员函数,使用void *指针调用任务函数。 我的类.hpp:

class MyClass {
    public:
        MyClass() {}
        ~MyClass() {}
    private:
        void update();
        void task();
        static void startTaskImpl(void*);
        void startTask();
 }

我的类.cpp:

void MyClass::task(){
     while(1){
         this->update();
     }
}

void MyClass::startTaskImpl(void* _this){
    (MyClass*)_this->task();
}
void MyClass::startTask(){
    xTaskCreate(this->startTaskImpl, "Task", 2048, this, 5, NULL);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ freeRTOS任务,非静态成员函数的无效使用 的相关文章

随机推荐