移动数组元素会返回意外值

时间:2015-06-13 11:04:24

标签: c embedded keil

我正在为基于STM32 ARM的电路板编程,我遇到了以下问题:

我正在移动数组中的元素,但是我得到了不属于数组的意外值。这是我的代码:

int temp=*manual_items[selec].Byte_Control[2];
*manual_items[selec].Byte_Control[2]=*manual_items[selec].Byte_Control[1];
*manual_items[selec].Byte_Control[1]=*manual_items[selec].Byte_Control[0];
*manual_items[selec].Byte_Control[0]=temp;

例如,数组中的值是(0,0,1),所以我希望得到(0,1,0)但是得到(224,1,0)。这让我怀疑某种垃圾存储在temp中,但我在尝试时尝试将其初始化为0,得到相同的结果。

此外,在代码的不同部分使用相同的方法:

int temp=*manual_items[selec].Byte_Control[3];
*manual_items[selec].Byte_Control[3]=*manual_items[selec].Byte_Control[2];
*manual_items[selec].Byte_Control[2]=*manual_items[selec].Byte_Control[1];
*manual_items[selec].Byte_Control[1]=*manual_items[selec].Byte_Control[0];
*manual_items[selec].Byte_Control[0]=temp;

这完全改变了这些值,所以我无法理解为什么第一个不起作用,第二个是。哪个可能是问题?

如果有帮助,我正在使用Keil uVision 5 IDE。

PS:我知道有更好的方法可以在数组中移动值,这只是我正在进行的测试。

编辑: manual_items []是一个MANUAL_t数组,它是我创建的结构。这是结构:

typedef struct _manual_
{
  char Name[20];
  uint8_t *Byte_Control[4];
  STATUS_t *Status;
  status_type type;
  int Color_Ref;
  char Display_Ref[10];
} MANUAL_t;

所以byte_control []的类型为uint8_t。

编辑2:这是manual_items的声明:

MANUAL_t manual_items[]=
{
  {"Barrier",{&BARRIERMAN},&status_items[3],UPDOWN,0,0},
  {"Sem. 1",{&SEM1GREENMAN,&SEM1YELLOWMAN,&SEM1REDMAN},&status_items[8],SEMAPHORE,0,0},
  {"Sem. 2",{&SEM2GREENMAN,&SEM2YELLOWMAN,&SEM2REDMAN},&status_items[9],SEMAPHORE,0,0}
};

编辑3:终于有效!!最后问题与这段代码无关,这就是为什么我找不到导致错误的原因。我忘了在break;之后放switch case,这让程序变得疯狂。感谢所有人的帮助,并记住错误是您最不期望的地方!

0 个答案:

没有答案