我正在为基于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
,这让程序变得疯狂。感谢所有人的帮助,并记住错误是您最不期望的地方!