C++ FreeRTOS仅在发布时崩溃
我的代码只有在发布时才会崩溃:C++ FreeRTOS仅在发布时崩溃,c++,c,freertos,C++,C,Freertos,我的代码只有在发布时才会崩溃: int main() { MyStruct s; s.field = bla; xTaskCreate(TestTask, "TestTask", 2000, &s, 1, 0); // other tasks creation vTaskStartScheduler(); } void TestTask(void *p) { // some delay MyStruct* s = (MyStruct*)p; a
int main()
{
MyStruct s;
s.field = bla;
xTaskCreate(TestTask, "TestTask", 2000, &s, 1, 0);
// other tasks creation
vTaskStartScheduler();
}
void TestTask(void *p)
{
// some delay
MyStruct* s = (MyStruct*)p;
another_func(s->field); // hard fault
}
我设法像这样修复它:
int main()
{
MyStruct* s = new MyStruct();
s->field = bla;
xTaskCreate(TestTask, "TestTask", 2000, s, 1, 0);
// other tasks creation
vTaskStartScheduler();
}
我不明白为什么。我是否修复了它或解决了可能仍然存在的内存损坏问题
谢谢。我太蠢了,它写在弗里特斯的文件上: 因此,传递堆栈变量的地址是无效的
如果释放有助于您使用
new
?然后将问题标记为C++如果我正确理解了文档,则创建任务后,xTaskCreate
不会阻塞并返回。然后退出main
,现在MyStruct s位于main
堆栈上的code>已不存在。我还想知道当程序正常结束时退出main
时会发生什么情况。@PaulOgilvie通常情况下,在创建任务后需要在main中调用vTaskStartScheduler()
函数,但不确定这是否是缺少的地方。@PaulOgilvie:我应该提到main不存在,我剥离了代码,只是为了显示我是如何传递结构的,sorryhmm,但是在任务执行时变量应该仍然存在,因为主函数的堆栈帧是最后一个要退出的?我们认为:-/