我正在尝试编写一个简单程序(作为更复杂程序的前兆),该程序将字节数组存储到progmem中,然后读取并打印该数组。我浏览了网上的一百万个博客/论坛帖子,认为我做得很好,但是输出仍然很乱。
这是我的代码,任何帮助将不胜感激!
void setup() {
byte hello[10] PROGMEM = {1,2,3,4,5,6,7,8,9,10};
byte buffer[10];
Serial.begin(9600);
memcpy_P(buffer, (char*)pgm_read_byte(&hello), 10);
for(int i=0;i<10;i++){
//buffer[i] = pgm_read_byte(&(hello[i])); //output is wrong even if i use this
Serial.println(buffer[i]);
}
}
void loop() {
}
如果我使用memcpy
,则会得到输出:
148
93
0
12
148
93
0
12
148
93
如果我在for循环中使用buffer = ....
语句(而不是memcpy
):
49
5
9
240
108
192
138
173
155
173
答案 0 :(得分:0)
您正在考虑两个量级太复杂了。
memcpy_P
需要一个源指针,一个目标指针和一个字节数。而且PROGMEM指针只是数组。因此,您的memcpy_P
行应该喜欢
memcpy_P (buffer, hello, 10);
就是这样。
memcpy
(不带“ P”)将无法访问程序存储器,而是从数据RAM复制内容。那不是你想要的。