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

时间:2015-06-12 09:13:50

标签: c embedded keil

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

我在同一个文件(Struct1file.c)中有State Machine,在每个 1ms 之后在任务(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();
};

Struct1中的所有值都会发生变化,但DataData1中的值除外。

最小代码:

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 。我尝试更改堆栈和堆大小,但没有效果!

1 个答案:

答案 0 :(得分:1)

  

Struct1中的所有值都会更改,但Data和Data1中的值除外。

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

  

我正在研究C和Keil。

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

您可以在第一个实例中避免问题by not using global data。即使问题没有被避免,它也肯定更容易调试,因为使用访问函数提供了使用更普遍可用的程序计数器断点来捕获数据访问的机会。