Original question was answered and I came on that thread by googling. Figured I might aswell ask it here to not make useless threads. Guess moderation here is different than I'm used too.
Anyways, memcpy_P did the trick. For future visitors, this code works.
#include <avr/pgmspace.h>
#include <Arduino.h>
struct ui16s {
uint16_t ui:16;
uint8_t scale:7;
uint8_t sign:1;
};
const uint8_t length = 6;
const uint16_t means[] PROGMEM = {
10, 20, 32, 29, 37, 28
};
const struct ui16s ci_vals[] PROGMEM = {
{10, 2, 0b0}, {20, 4, 0b1}, {32, 2, 0b1},
{11, 1, 0b0}, {15, 0, 0b1}, {24, 0, 0b0}
};
void setup() {
Serial.begin(9600);
delay(1000);
uint8_t i = 0;
for (; i < length; ++i) {
struct ui16s val;
memcpy_P(&val, ci_vals + i, sizeof(struct ui16s));
Serial.println(pgm_read_word(means + i));
Serial.print(val.sign ? "-" : "");
Serial.print(val.ui);
Serial.print(" / 2 ^ ");
Serial.println(val.scale);
Serial.println();
}
}
void loop() {
}