【发布时间】:2020-01-05 11:57:56
【问题描述】:
我试图将一组参数传递给一个任务。所以我创建了一个结构并将其传递给我的任务,如下所示:
my_type_t parameters_set;
//... assigning values to parameters_set
xTaskCreate( vMyTask, "MyTask", STACK_SIZE, (void*)parameters_set, 2,
&xHandle);
在我的任务中,我尝试通过以下操作检索结构值:
my_type_t received_parameters = (my_type_t) pvParameters;
任务创建行在编译时触发以下错误:“无法转换为指针类型”,结构检索行触发“请求转换为非标量类型”错误。我知道如果我使用指针而不是变量本身,它会编译,但我不能这样做,因为创建任务的函数将会死掉,并且任务将引用一个不再存在的变量。最后我将使用一个全局结构变量。
但我真正想了解的是为什么任务接受 int 值(不是通过引用),而不接受 typedef 结构?例如,下面的 sn-p 可以毫无问题地构建和工作:
//Inside the function that creates the task
int x = 0;
xTaskCreate( vMyTask, "MyTask", STACK_SIZE, (void*)x, 2,
&xHandle);
//Inside the Task
int received_parameter = (int) pvParameters;
提前致谢!
【问题讨论】:
-
结构不能转换为指针。只有指向struct的指针才可以。将 int 转换为 void* 也不正确。请发帖minimal reproducible example。
标签: c operating-system task freertos