Инициализировать и читайть из массива указателей 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-й записи в сообщении []?
@Bo Thompson, 👍1
1 ответ
Лучший ответ:
const byte* const message[] PROGMEM =
чтобы использовать элемент, загрузите его в оперативную память
strcpy_P(buffer, (byte*)pgm_read_word(&(message[i])));
источник Справочник по Arduino — PROGMEM
- Работает с gcc, но не с Arduino. ошибка: taking address of temporary array
- Передача массивов, глобальных массивов внутри функций, указателей и объявление размеров массивов.
- Установка указателя массива на null при объявлении
- Почему я не могу получить размер массива указателей
- Передача двумерного массива в функцию
- Поменять местами два массива (используя указатели, а не копирование)
- передача массивов через функцию возвращает неправильные значения
- Можно ли создать массив для функций?
@bo-thompson, это помогло?, @Juraj
Извините за задержку, на прошлой неделе меня отлучили от микроконтроллера, на котором работает этот проект. Надеюсь, я вернусь к нему на следующей неделе и отмечу это как ответ, как только проверю, что могу его понять и использовать., @Bo Thompson