Печать элементов массива символов из PROGMEM

Дано:

const char* PROGMEM names[] = {"Foo","Bar"};
Serial.print(names[0]);

Я получаю вывод мусора. Есть ли какая-нибудь функция, которая будет печатать строку из PROGMEM? Например:

Serial.print(<function name>(names[0]);

, 👍1

Обсуждение

Это не то, как вы используете [PROGMEM](https://www.arduino.cc/reference/en/language/variables/utilities/progmem /). Вам нужно использовать функции pgm_read_ *** _near, @Gerben

ваших строк нет в progmem. существует только массив указателей на строки https://www.arduino.cc/reference/en/language/variables/utilities/progmem/, @Juraj

Благодарим вас за ссылку pgm_read_byte_near. Это говорит мне о том, что мне нужно извлекать данные из PROGMEM по байту за раз. Теперь я понимаю, что я до сих пор не знаю, как поместить строки foo и bar в PROGMEM без цикла for во время выполнения. Есть ли способ сделать это во время компиляции?, @Bob Jones

смотрите ссылку в моем комментарии, @Juraj

Вы можете использовать строку (имена [0]), @Learner

Извините за предыдущий комментарий. Для этого мы можем использовать простую библиотеку списков., @Learner


2 ответа


2

Среди многих других, ознакомьтесь с pgmspace.h утилиты в AVR-libc

,

0
const char PROGMEM b0 = pgm_read_dword(&(names[0]));
Serial.print(b0);
,

PROGMEM здесь ничего не делает, @Juraj