的Arduino PROGMEM字节数组

考虑这个片段中,与Arduino的IDE编译:的Arduino PROGMEM字节数组

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);

}

我希望这两个for循环产生相同的输出。但输出是:

0 8 4 C 2 A 6 E 1 9 5 D 3 B 7 F 

FFFFFF94 FFFFFFB0 6 FFFFFF80 FFFFFF91 FFFFFFC7 3 62 FFFFFFE3 E FFFFFF94 5E 29 FFFFFF99 23 39

我错过了什么?

回答:

那么答案是PROGMEM声明。我必须将它从功能中移出,并添加const关键字。作为数据类型的其他更改不起作用。

完整答案在Arduino forum。

回答:

你有错误的数据类型。从http://arduino.cc/en/Reference/PROGMEM:

通过使用普通的数据类型为程序内存调用生成一些神秘的错误。

不能使用char - 你必须使用prog_char

所以:

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

这应该工作。

顺便说一句:你没有做Serial.println(" ");你可以做Serial.println();

回答:

PROGMEM char charSet[] = ... 

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

PROGMEM prog_char charSet[] = ... 

回答:

是的,const关键字丢失。

也许这是不使用prog_char一个好主意,因为它被标记为弃用在GCC-AVR,看到avr/pgmspace.h

以上是 的Arduino PROGMEM字节数组 的全部内容, 来源链接: utcz.com/qa/261206.html

回到顶部