C++ freeRTOS 任务,无效使用非静态成员函数
Posted
技术标签:
【中文标题】C++ freeRTOS 任务,无效使用非静态成员函数【英文标题】:C++ freeRTOS Task, invalid use of non-static member function 【发布时间】:2018-01-31 12:51:29 【问题描述】:问题出在哪里?
void MyClass::task(void *pvParameter)
while(1)
this->update();
void MyClass::startTask()
xTaskCreate(this->task, "Task", 2048, NULL, 5, NULL);
但是,我明白了:
错误:非静态成员函数的使用无效
我找不到任何有用的文档来检查错误在哪里, 但我认为应该是这样的:(C++11's 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);
【问题讨论】:
如果task
是非静态成员函数,this->task
无效。
【参考方案1】:
我将此模式与包装函数一起使用,以用非静态成员函数实例化 pthread。 xTask 中调用的函数是静态成员函数,使用 void* 指针调用任务函数。 MyClass.hpp:
class MyClass
public:
MyClass()
~MyClass()
private:
void update();
void task();
static void startTaskImpl(void*);
void startTask();
MyClass.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);
【讨论】:
【参考方案2】:根据这个 FreeRTOS 官方thread,你可以编写包装函数来实现这一点。
【讨论】:
以上是关于C++ freeRTOS 任务,无效使用非静态成员函数的主要内容,如果未能解决你的问题,请参考以下文章
使用boost bind时无效使用非静态成员函数 - c ++