背景
创建任务时,可能需要传递一些数据给这个任务,这个数据通过pvParameters
传递给任务函数。
int MyData = 100;
xTaskCreate(myTaskFunction, "myTask", STACK_SIZE, &myData, PRIORITY, NULL);
在上面例子中,将变量myData
的地址传递给任务函数myTaskFunction
。
关键点
如果传递的是一个局部变量(也就是在栈上分配的变量),则在函数返回后,该变量将不再有效。因为局部变量会在函数退出后销毁,任务函数访问这个地址,会导致程序错误。
正确做法
- 使用全局变量,确保在整个系统运行期间变量都有效。
- 动态分配内存,使用
malloc
或其他动态分配内存的方法来确保变量在任务运行期间有效。// 即使此函数退出,变量依然有效。 // 记得在任务结束后释放内存,以防内存泄漏。 void someFunction(void) { int *myData = (int *)malloc(sizeof(int)); *myData = 100; xTaskCreate(myTaskFunction, "myTask", STACK_SIZE, myData, PRIORITY, NULL); }