在重复的FreeRtos任务中使用静态函数。

问题描述 投票:0回答:1

我正在使用FreeRtos,并且有一个我多次使用的任务。我在任务中调用静态函数。在多次使用这个任务的过程中,静态函数是否会被彼此的数据覆盖,或者导致一些类型的问题?例如...

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 诸如此类。有什么办法可以防止这种情况的发生?

c memory static task freertos
1个回答
2
投票

我相信不是这样的。

静态函数只是关于函数的可见性范围,而不是关于其中使用的变量的存储类。

如果这是你的实际代码(而且你还没有在函数中声明 num1 作为 static intజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ num在每个任务堆栈中,s将被重新分配,并且不会看到 "对方"(除非你通过一些无关的错误行为破坏了内核...)。

© www.soinside.com 2019 - 2024. All rights reserved.