Arrays Arduino程序字节数组

Arrays Arduino程序字节数组,arrays,arduino,Arrays,Arduino,考虑以下使用Arduino IDE编译的代码段: PROGMEM char charSet[] = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF }; char reversed[] = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF }; char ff;

考虑以下使用Arduino IDE编译的代码段:

PROGMEM  char charSet[]  = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF };
char reversed[]          = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF };
char ff;

for (int i=0; i < 16; i++) {
    Serial.print(" ");
    Serial.print(reversed[i], HEX);
}

Serial.println(" ");
for (int i=0; i < 16; i++) {
    Serial.print(" ");
    ff = pgm_read_byte(&charSet[i]);
    Serial.print(ff);
}

我缺少什么?

您的数据类型错误。发件人:

使用普通数据类型进行程序内存调用会产生一些神秘的bug

您不能使用
char
-您必须使用
prog\u char

因此:

这应该行得通

顺便说一下:您不必执行
Serial.println(“”)您只需执行
Serial.println()

这是不好的-对于PROGMEM数据,不能使用普通内存类型。你应该做的是

PROGMEM  prog_char charSet[] = ...

答案是PROGMEM声明。我不得不将它从函数中移出,添加
const
关键字。作为数据类型的其他更改不起作用


完整答案已打开。

是,缺少
const
关键字

使用
prog_char
可能不是一个好主意,因为它在gcc avr中被标记为不推荐使用,请参阅

PROGMEM prog_char charSet[] = {0x0, 0xB}
PROGMEM  char charSet[] = ...
PROGMEM  prog_char charSet[] = ...