Я использую Atmel AVR и пытаюсь получить доступ к данным из структуры, которая хранится во флэш-памяти (программе).
Структура:
typedef struct {
uint8_t width;
uint8_t height; // row number 0 to 5
uint8_t images; // how many frames does this bitmap have
uint8_t data[]; // the actual pixel data
} bitmap_t;
данные:
__flash static const bitmap_t bmp_stereo2 = {14,1,1,{126,129,60,66,24,36,60,60,36,24,66,60,129,126}};
Я пытаюсь получить доступ к данным с помощью (показан неполный код) ...
void lcd_bitmap2(const bitmap_t *bit, uint8_t id, uint8_t posx, uint8_t posy) {
uint8_t x;
uint8_t y;
const uint8_t bw = pgm_read_byte(&bit->width); // this works -- I can print out to serial
const uint8_t bh = pgm_read_byte(&bit->height); //this also works -- I can print out to serial
// this doesn't work
const uint8_t *data = pgm_read_word(&bit->data); // I get: - initialization makes pointer from integer without a cast [enabled by default]
const uint8_t *data = (uint8_t *)pgm_read_word(&bit->data); // this also doen't work (no warning, but wrong data read out)
//rest of function...
Таким образом, я могу получить доступ к переменной ширины, высоты и изображения, но не к части данных структуры.
Все работает, если я не сохраняю во флэш-памяти - это мой поиск и проблема только с частью структуры массива данных (ширина, высота и изображение читаются нормально)