gpt4 book ai didi

C++ 字节数组初始化 - 出了什么问题?

转载 作者:行者123 更新时间:2023-11-30 15:30:51 28 4
gpt4 key购买 nike

我突然在嵌入式 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++ 中数组的一些内容?如果没有直接赋值,我就无法使前两个字节正确。我的 RAM 似乎并不低,并且在我的分配和读回之间没有发生其他操作,所以我不认为有其他东西正在占用该内存。

可能我在这里遗漏了一些明显的东西?

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

最佳答案

我在 Arduino 程序中遇到了完全相同的问题。事实证明,一些第三方代码覆盖了我在数据部分中的数组。参见此处Mosquitto socket read error Arduino client了解我如何调试它是什么。

关于C++ 字节数组初始化 - 出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com