我正在使用Arduino IDE编写草图,将progmem中保存的数据传递给函数,然后该函数将progmem数据写入本地数组。 代码如下:
authors
当我指定const uint8_t Data_3 [256] PROGMEM = {0x11, 0x39.....}
void setup() {
Serial.begin(57600);
Data(Data_3, 0x00, 256);
}
void loop() {
}
void Data(const uint8_t *data, uint8_t bank, uint16_t bytes) {
uint8_t buff1 [256];
buff1[0] = data[0];
Serial.println(buff1[0],HEX); // <--Works fine prints the correct value
for ( uint16_t x = 0; x < bytes + 1; x++ ) {
buff1[x] = data[x];
Serial.println(buff1[x],HEX); // <--Just prints garbage
}
}
并打印结果时答案是正确的。当我使用buff1[0] = data[0]
循环打印函数时,我只是得到了垃圾。有谁知道这个的原因?
答案 0 :(得分:1)
你必须使用#include <avr/pgmspace.h>
和Serial.print(pgm_read_byte(data+x));
,否则它会尝试从同一地址获取数据,但是来自RAM,而不是来自闪存。
或通过memcpy_P(buff, data, bytes);