This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:如何将类成员函数用作任务函数?

Guru**** 2582405 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/600214/compiler-how-to-use-a-class-member-function-as-task-function

“Thread:SysBIOS”中讨论的其它部件

工具/软件:TI C/C++编译器

我正在开发一个C++类,其中包含创建任务的函数,其函数也是同一类的成员:

class task_class {
public:
task_class();
Task_handle init();
void taskFxn(UArg arg0, UArg arg1g);};


task_class::task_class(){
}

void task_class::taskFxn(UArg arg0,UArg arg1 ){
while (1){//do
someth{任务
}
}Task_handle

task_class::init(){
Task_handle handle handle;
Task_Params Params;

Task_Params_init(&taskParams);
taskparams =4
,taskpara.priority fn taskParams,NULL);
返回句柄;
} 

但是,我收到两个编译错误:

第25行:错误#506-D:获取成员函数地址的非标准格式
2.第25行:错误#169:类型"void (MAES::TASK_CLASS::*)(UArg, UARG)"的参数与类型"ti_SysBIOS_KNL_Task_FuncPtr"的参数不兼容

有什么建议? 我需要将taskFxn函数作为参数传递给task_create。

提前感谢!

卡门

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的建议是不要将类成员函数本身用作任务函数,而是编写调用所需函数的'extern "C"'包装程序:

    void wrapper (uarg arg0,uarg arg1)
    { task_class::taskFxn (arg0,arg1);} 
    [..] task_create (包装程序,&taskParms,NULL);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    卡门
    我不确定您使用的是哪个版本的SYS/BIOS,但在您的安装中应该有一个目录'docs',您可以在那里找到BIOS_User_Guide.pdf。 查找“1.5 Using C++ with SYS/BIOS (将C++与SYS/BIOS一起使用)”部分。 有一个示例说明了如何将类函数用于任务。