传递变量给任务的注意事项

传递变量给任务的注意事项

背景 创建任务时,可能需要传递一些数据给这个任务,这个数据通过pvParameters传递给任务函数。 int MyData = 100; xTaskCreate(myTaskFunction, "myTask", STACK_SIZE, &myData, PRIORITY, NULL); 在上面

背景

创建任务时,可能需要传递一些数据给这个任务,这个数据通过pvParameters传递给任务函数。

int MyData = 100;
xTaskCreate(myTaskFunction, "myTask", STACK_SIZE, &myData, PRIORITY, NULL);

在上面例子中,将变量myData的地址传递给任务函数myTaskFunction

关键点

如果传递的是一个局部变量(也就是在栈上分配的变量),则在函数返回后,该变量将不再有效。因为局部变量会在函数退出后销毁,任务函数访问这个地址,会导致程序错误。

正确做法

  1. 使用全局变量,确保在整个系统运行期间变量都有效。
  2. 动态分配内存,使用malloc或其他动态分配内存的方法来确保变量在任务运行期间有效。
    // 即使此函数退出,变量依然有效。
    // 记得在任务结束后释放内存,以防内存泄漏。
    void someFunction(void)
    {
    	int *myData = (int *)malloc(sizeof(int));
    	*myData = 100;
    	xTaskCreate(myTaskFunction, "myTask", STACK_SIZE, myData, PRIORITY, NULL);
    }
    
Comment