Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#include <iostream>
#define PROGMEM
template <char... String>
struct ProgmemString {
static const char PROGMEM v[sizeof...( String ) + 1];
};
template <char... String>
const char ProgmemString<String...>::v[sizeof...( String ) + 1] = {String..., '\0'};
template <typename CharT, CharT... String>
constexpr auto operator"" _progmem()
{
return ProgmemString<String...>::v;
}
int main()
{
std::cout << "progmem string"_progmem << std::endl;
}
extern const char PROGMEM caption1[];
const char caption1[] = "Hello";
const char *pStr = caption1;
const char foo[] PROGMEM = "Hello, world!";
...
strcpy_P(dest,foo);
strcpy_P(dest,SPS("Hello world!"));
Плюс сама строка располагается непосредственно в месте ее использования.
const char init_error_message[] PROGMEM = "Initialization failed.";
const char init_OK_message[] PROGMEM = "Hardware initialized.";
...
имя_функции(F("какой-то текст"));
static const char *pStr = PSTR("Hello");
// error: statement-expressions are not allowed outside functions nor in template-argument lists
Строки в кодовой памяти AVR