Использование функций stati c в дублированной задаче FreeRtos - PullRequest
1 голос
/ 06 мая 2020

Я использую FreeRtos, и у меня есть задача, которую я использую несколько раз. Я вызываю функции stati c в Task. При многократном использовании этой задачи, будут ли функции stati c перезаписаны данными друг друга или вызовут какие-либо проблемы? Например ...

static int addSomeNumbers(int x)
{
   int num1 = 4;
   int num2 = 83;
   int num3 = 65;
   return x+num1+num2+num3;
}

void SomeTask(void *pvParameters)
{
  int localInt = *(int *) pvParameters;
  addSomeNumbers(localInt);
  //continue
}

Я использую эту задачу три раза

xTaskCreate(SomeTask, "SomeTask0", stackDepth, someNumber0, ...)
xTaskCreate(SomeTask, "SomeTask1", stackDepth, someNumber1, ...)
xTaskCreate(SomeTask, "SomeTask2", stackDepth, someNumber2, ...)

Проблема, с которой я сталкиваюсь, заключается в том, что данные, которые я вижу исходящие из каждой задачи, несовместимы. Кажется, что вторая задача иногда использует данные первой задачи в пределах addSomeNumbers и так далее. Есть ли способ предотвратить это?

1 Ответ

2 голосов
/ 06 мая 2020

Я не верю, что это так.

Stati c функции относятся только к области видимости функции, но не к классу хранения переменных, используемых в ней .

Если это ваш реальный код (и вы не объявили num1 et c. Как static int, num s будут повторно -распределены в каждом стеке задач и не должны видеть «друг друга» (если вам не удалось повредить ядро ​​из-за какой-либо несвязанной ошибки ...).

...