静态全局结构变量值更改为 FF

static global structure variable value changes to FF

我在文件中有一个 static global structure 变量说 Struct1,它只在文件中被修改(比如 Struct1file.c)

我在同一文件 (Struct1file.c) 中有一个 State Machine,它在每 1 毫秒 后在任务 (Struct1Task) 中调用。 State Machine 具有访问和更改 static global structure 变量值的函数。调用一定次数后,状态机被调用,全局结构变量内的所有变量变为0xFF,除了Strcut1.

内的数组
typedef Struct1{
short int Data[20];
char      cData[40];
bool     flag1;
short int value1;
bool flag2;
short int value2;
estate switch_var;
Callback callbackfunction();
};

除了 DataData1.

中的值外,Struct1 中的所有值都发生了变化

最小代码:

switch(Strcut1var.switch_var)
{
  case IDLE: ReadintoData();
             Strcut1var.switch_var = TAKE_ACTION;
  break;
  case TAKE_ACTION: if(Struct1var.Data[1]== some_enum)
                    {
                     Callbackfunction(Data,LengthofData);
                     Struct1var.switch_var = SEND;
                    }
  break;
  case SEND: if(Struct1var.flag1 == TRUE)
                 SendData();
  break;
  }

我正在研究 C 和 Keil。我尝试更改堆栈和堆大小,但没有效果!

All the values within Struct1 change except the values in Data and Data1.

在这种情况下,最可能的原因是超出了 Data1 的范围。

I am working on C and on Keil.

Keil 为多个目标提供编译器。了解目标和可用的调试功能会更有用。例如,如果硬件内存访问断点可用,您可以在 flag1 成员的地址上放置一个写访问断点,并准确确定它被覆盖的位置。

您或许可以在第一时间避免问题 by not using global data。即使无法避免问题,调试起来也更容易,因为访问函数的使用提供了使用更普遍可用的程序计数器断点来捕获数据访问的机会。