【问题标题】:Reading bytes from progmem从程序中读取字节
【发布时间】:2018-07-27 12:01:17
【问题描述】:

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

【问题讨论】:

    标签: arrays arduino byte avr progmem


    【解决方案1】:

    你认为两个量级太复杂了。

    memcpy_P 需要一个源指针、一个目标指针和一个字节数。 PROGMEM 指针就是数组。所以,你的memcpy_P 行应该喜欢

    memcpy_P (buffer, hello, 10);
    

    就是这样。

    memcpy(没有“P”)将无法访问程序存储器并从数据 RAM 复制内容。这不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多