Pull to refresh
9
0
Send message
У вас очень интересный повелительный вопрос
Макрос F() — это аналог PSTR.
Весь смысл в том, что эти макросы не работают вне функций. А нам нужно было инициализировать глобальные переменные в кодовой памяти указателями на строку.

static const char *pStr = PSTR("Hello");
// error: statement-expressions are not allowed outside functions nor in template-argument lists


Естественно, мы делали так же, как указал LampTester, но нам было лень постоянно так делать и мы нашли такой способ.
Согласен, этот способ работает, но требуется написать две строки вместо одной.
strcpy_P(dest,SPS("Hello world!"));


Плюс сама строка располагается непосредственно в месте ее использования. Ваш пример сложно будет читать, если эти две строки не будут помещаться в экран.
Плюс не требуется придумывать имена для переменных, хранящих строку, что является лишним трудом.

Короче, лень — двигатель прогресса.

Кстати, рекомендуемый в документации способ, не работал одно время. Компилятор ругался, что __attribute__((__progmem__)) не может быть использован при создании переменной, а только в объявлении. Это было давно, но именно оттуда у меня привычка писать отдельно объявление, а потом инициализацию.
С этим способом создания пользовательских литералов я не был знаком. Почитал вашу статью. Спасибо огромное.
Это, действительно, должно упростить раскрытие символов в макросе SPLIT_TO_CHAR.
Сейчас будем пробовать. Только компилятор обновим, а то наш еще не хочет такую строку кушать.

Information

Rating
Does not participate
Registered
Activity