我有以下成员函数,其中fcn()调用接受函数指针的xTaskCreate(),在本例中是process,它恰好也是一个成员函数。
问题是,从技术上讲,process()本身只有一个参数void *arg),但是当传递成员函数时,*this也会被额外传入,这目前正在造成问题。
按照原样,错误显示为invalid use of non-static member function A::process(void *arg)
也许一种方法是使process()成为一个静态成员函数,但这意味着我将不能使用它内部的任何其他成员变量。
void A::fcn()
{
if (pdPASS != xTaskCreate(process, "PROCESS_LOG", 256, NULL, 5, &td))
{
// ...
}
}
void A::process(void *arg)
{
bar(someClassMember);
}编辑:
xTaskCreate是一个基于C的FreeRTOS内核函数。
typedef void (*TaskFunction_t)( void * );
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
const configSTACK_DEPTH_TYPE usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask )发布于 2021-05-10 22:37:24
传递给xTaskCreate()的void*参数旨在将任意数据传递给任务函数。您传递的数据类型总是在您方便的时候使用,some programmer dude提供的solution使用这种方法。这是在C/C++之间实现此接口的通用方法。
如果您想要移动到更高的抽象级别,可以看看freertos-addons项目。它最近并不活跃,但是线程抽象可以帮你完成这项工作。
您还可以查看CodeProject的文章FreeRTOS Thread Pack: Create Multithreaded IoT Code The Easy Way,了解结合了几种技术的另一种方法,比如使用lambda表达式定义任务函数,以及创建线程池。
https://stackoverflow.com/questions/67463464
复制相似问题