проблема
Я не могу получить данные из Flash-памяти, когда использую функцию, которая возвращает адрес нужного шаблона во Flash-памяти (упрощено в приведенном ниже примере только с 1 константой: PATTERN_P).
Код перед экспликацией
Тип patternp
определяется как
typedef prog_uchar patternp[NUM_ROWS];
Глобальная переменная PATTERN_P - это массив типа patternp, определенный как
const patternp PATTERN_P PROGMEM = {
0b11110000 ,
0b10010000 ,
0b10010000 ,
0b10010000 ,
0b11110000 ,
0b10000000 ,
0b10000000 ,
0b10000000
};
GetPattern ():
const patternp * getPattern()
{
//...
return &PATTERN_P;
}
основной ():
const patternp *bufferPattern = getPattern();
uint8_t rowPatternData[NUMBER_ROW_PER_MATRIX];
const patternp *bufferPattern = getPattern(s[iLetter]);
for(int iRow = 0; iRow<NUMBER_ROW_PER_MATRIX; iRow++)
{
rowPatternData[iRow]=pgm_read_byte( &PATTERN_P[iRow] ); // <--- WORK!
rowPatternData[iRow]=pgm_read_byte( bufferPattern[iRow] ); // Not Working!
}
экспликация
Как видите, код получает шаблон (в этом примере он будет возвращать PATTERN_P каждый раз ... чем я использую pgm_read_byte для получения данных из флэш-памяти. Это использует пространство AVR pgmspace (ссылка ниже). Он берет адрес и возвращает данные. Приведенный выше код работает, когда я использую прямой доступ к шаблону: & PATTERN_P [iRow], но не работает, когда я использую bufferPattern [iRow] или & bufferPattern [iRow]. Есть идеи?
Ссылка: pgm_read_byte определен в pgmspace