从progmem

时间:2018-07-27 12:01:17

标签: arrays arduino byte avr progmem

我正在尝试编写一个简单程序(作为更复杂程序的前兆),该程序将字节数组存储到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

1 个答案:

答案 0 :(得分:0)

您正在考虑两个量级太复杂了。

memcpy_P需要一个源指针,一个目标指针和一个字节数。而且PROGMEM指针只是数组。因此,您的memcpy_P行应该喜欢

memcpy_P (buffer, hello, 10);

就是这样。

memcpy(不带“ P”)将无法访问程序存储器,而是从数据RAM复制内容。那不是你想要的。