Инициализировать и читайть из массива указателей PROGMEM на массивы PROGMEM.

Я работаю над проектом для Arduino Uno, для которого мне нужно несколько константных массивов байтов. Такой массив инициализируется следующим образом:

const byte charR[] PROGMEM = {
  B01111111,//верхняя половина
  B01111111,
  B01000100,
  B01000110,
  B01101111,
  B00111001,
  B00000000,
  B01111000,//нижняя половина
  B01111000,
  B00000000,
  B00000000,
  B01111000,
  B01111000,
  B00000000
};

Этот массив представляет собой заглавную букву R. Я читаю n-й байт этого массива следующим образом:

nth_byte = pgm_read_word(charR+n);

Пока все это хорошо, но теперь мне нужно пойти еще дальше. Мне нужно создать массив message[]. Мне нужно использовать message[] для чтения массивов байтов в определенной последовательности. Например:

message[] = {
  charR,
  chare,
  charp,
  charl,
  chary,
  charspace,
  charp,
  charl,
  chare,
  chara,
  chars,
  chare
};

Каждая запись в message[] относится к массиву байтов, представляющему символ. Обратите внимание, как появляются кратные числа. Это что-то вроде двумерного массива, но я хочу сохранить программу, определяя каждый символ только один раз.

Как правильно инициализировать message[]? Нужно ли мне для этого использовать указатели? Как правильно получить размер массива или y-й байт x-й записи в сообщении []?

, 👍1


1 ответ


Лучший ответ:

2

const byte* const message[] PROGMEM =

чтобы использовать элемент, загрузите его в оперативную память

strcpy_P(buffer, (byte*)pgm_read_word(&(message[i])));

источник Справочник по Arduino — PROGMEM

,

@bo-thompson, это помогло?, @Juraj

Извините за задержку, на прошлой неделе меня отлучили от микроконтроллера, на котором работает этот проект. Надеюсь, я вернусь к нему на следующей неделе и отмечу это как ответ, как только проверю, что могу его понять и использовать., @Bo Thompson