Сбой FreeRTOS только в Release - PullRequest
0 голосов
/ 04 июля 2018

У меня есть этот код, который вылетает только в версии:

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();
}

Я не понимаю, почему. Я исправил это или обошел проблему повреждения памяти, которая все еще может быть там?

Спасибо.

1 Ответ

0 голосов
/ 04 июля 2018

Я так глуп, это написано в документации FreeRTOS: https://www.freertos.org/a00125.html

поэтому нельзя передавать адрес переменной стека.

...