Я создал задачу freeRTOS и передал указатель структуры в качестве параметра функции.
Я заметил, что свойство struct было изменено после vTaskStartScheduler ()
Как защитить мою структуру?
Вот код
Main
xTaskCreate(
SHELL_Main, // function the task calls
"shell", // nametag for debug console
512, // assigned buffersize
&user_context,// Parameter passed in
1, // task priority
NULL); //task handle
printf("exit=%i", (&user_context)-> exit);
vTaskStartScheduler();
SHELL_Main ()
int32_t SHELL_Main(p_shell_context_t context)
{
printf("entered shell_main\n");
uint8_t ch;
int32_t i;
if (!context)
{
return -1;
}
context->exit = false;
context->printf_data_func("\r\nSHELL (build: %s)\r\n", __DATE__);
context->printf_data_func("Copyright (c) 2017 NXP Semiconductor\r\n");
context->printf_data_func(context->prompt);
while (1)
{
printf("context.exit=%s", (context->exit)?"true\n":"false\n");
printf("context.exit=%i", (context->exit));
if (context->exit)
{
printf("wtf");
break;
}
...
Вот консоль
exit=0entered shell_main
SHELL (build: Oct 26 2018)
Copyright (c) 2017 NXP Semiconductor
SHELL>> context.exit=true
context.exit=253wtf
Если я вместо этого вызываю SHELL_Main () непосредственно в mainОборачивая это в задачу, вот консоль
exit=0entered shell_main
SHELL (build: Oct 26 2018)
Copyright (c) 2017 NXP Semiconductor
SHELL>> context.exit=false
context.exit=0
Я предполагаю, что где-то есть переполнение, которое перезаписывает мой context.exit после вызова vTaskStartScheduler (), но я не знаю, как защитить мою структуру.Может кто-нибудь любезно поделиться какой-нибудь идеей?