我突然对嵌入式C ++项目(Arduino)中的字节数组感到麻烦。

字节是在另一个文件中定义的,该文件在其他位置生成,并拉入我的项目。然后将它们用于计算。但是在我将字节加载到数组中之后,前两个继续对我进行更改。 (!)

所以在另一个文件中,我有:

#define MY_BYTES 0x26,0x28,0X1B,0X52,0X07,0X62,0X62


在一个文件中,然后在另一个文件中,我将它们用于:

#define ARRAY_SZ 7
void doMyStuff() {
   uint8_t  MyStuff[ARRAY_SZ] = { MY_BYTES };

   Serial.print(" The 1st bytes: ");
   Serial.print(MyStuff[0], HEX);
   Serial.print(", ");
   Serial.print(MyStuff[1], HEX);
   Serial.print(", ");
   Serial.println(MyStuff[2], HEX);

   etc...
}


当它运行时,我得到

The 1st bytes: 36, 0, 1B


如果我在声明后进行干预并坚持执行某些直接任务,则可以使用以下命令覆盖它们:

MyStuff[0] = 0x26;
MyStuff[1] = 0x28;


...,然后前两个是正确的,就像其余的一样(实际上有20个字节,为简洁起见,我将其缩小了)。但是我不知道为什么声明中的分配失败。

我将所有内容移到同一文件中,丢失了#define,并使用以下代码对其进行了初始化:

uint8_t MyStuff[] = {0x26,0x28,0x1B,0x52,0x07,0x62};


仍然是问题。我是否缺少有关C ++中数组的信息?如果没有直接分配,我只是无法确保前两个字节正确。我的内存似乎并不低,在分配和回读之间没有其他操作发生,因此我认为该内存上没有其他问题。

可能我在这里想念的东西很明显吗?

编辑:正如指出的那样,这是在Arduino环境中,它是C ++的子集(更改了我的标题)。我正在研究的项目混合使用C和C ++模块,因此是我的错误。

最佳答案

我在Arduino程序中遇到了完全相同的问题。原来是一些第三方代码覆盖了“数据”部分中的数组。有关如何调试它的信息,请参见Mosquitto socket read error Arduino client

07-24 09:46
查看更多