gpt4 book ai didi

c - 树莓派3裸机: unexpected behaviour from arrays and switch statements

转载 作者:行者123 更新时间:2023-11-30 16:16:22 24 4
gpt4 key购买 nike

我目前有一个简单的程序,可以设置一个可写入的帧缓冲区。

我遇到的行为是,存储在数组中的值一旦被检索,就会以看似随机的值的形式返回,与原始值没有任何关系。我还注意到 switch 语句中的一些类似奇怪和意外的行为 - 我怀疑这与数组和 switch 语句在内存中静态分配的方式有关。

作为示例,这里我有一些代码应该绘制一个硬编码数字,然后是存储在数组中的其他 7 个硬编码数字:

unsigned int cols[7] = { 0xFFFF0000, 0xFFFF7F00, 0xFFFFFF00, 0xFF00FF00, 0xFF0000FF, 0xFF4B0082, 0xFF9400D3 };
drawNum(&display, 0x1234ABCD);
for (int i=0; i<7; i++)
drawNum(&display, cols[i]);

使用硬编码值的第一个 drawNum() 调用工作正常,但所有使用数组访问的调用都会给出看似随机的结果。

在运行时分配数组值不会有这个问题,如下所示:

unsigned int cols[7];
cols[0] = 0xFFFF0000;
cols[1] = 0xFFFF7F00;
cols[2] = 0xFFFFFF00;
cols[3] = 0xFF00FF00;
cols[4] = 0xFF0000FF;
cols[5] = 0xFF4B0082;
cols[6] = 0xFF9400D3;
drawNum(&display, 0x1234ABCD);
drawNum(&display, (int)cols);
for (int i=0; i<7; i++)
drawNum(&display, cols[i]);

switch 语句返回值时,我也经历过类似的不可预测的行为。

我不能肯定地说,但这让我相信这是所使用的编译器或链接器的问题 - 我正在使用 arm-none-eabi

最佳答案

只是在黑暗中尝试,但您可能想在数组中尝试不同的值,其中最高位是 0 而不是像硬编码示例中的 1。

unsigned int cols[7] = { 0x7FFF0000, 0x7FFF7F00, 0x7FFFFF00, 0x7F00FF00, 0x7F0000FF, 0x7F4B0082, 0x7F9400D3 };

假设drawNum 采用 int 而不是 unsigned int。您可能只是遇到转换问题。如果没有看到drawNum 做了什么,就很难说。

关于c - 树莓派3裸机: unexpected behaviour from arrays and switch statements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618546/

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