Reading array of bytes from PROGMEM

Hi!

I'm trying to write a simple program (as a pre-cursor to a more complicated one) that stores an array of bytes to progmem, and then reads and prints the array. I've looked through a million blog/forums posts online and think I'm doing everything fine, but I'm still getting utter gibberish as output.

Here is my code, any help would be much appreciated!

#include <avr/pgmspace.h>

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() {
}

The output I get is

148
93
0
12
148
93
0
12
148
93

if i use memcpy, and

49
5
9
240
108
192
138
173
155
173

if i use the buffer = .... statement in the for loop.

const byte hello[10] PROGMEM

You need to create the array outside of setup() then it will work. The syntax can be simplified as follows:

#include <avr/pgmspace.h>

const byte hello[10] PROGMEM = {1,2,3,4,5,6,7,8,9,10};

void setup() {

  byte buffer[10];

  Serial.begin(9600);

  memcpy_P(buffer, hello, 10);

  for(int i=0;i<10;i++){
   //buffer[i] = pgm_read_byte(&hello[i]); //output is also OK
   Serial.println(buffer[i]);
  }
}

void loop() {
}