Когда вы хотите получить доступ к флэш-памяти, вы должны написать что-то вроде этого:
constexpr uint8_t n PROGMEM = 10;
auto x = pgm_read_byte(&n);
Мне не нравится этот способ доступа к памяти. Я хочу получить доступ к каждому типу памяти одинаково (RAM, флэш, EEPROM …). Я хотел бы написать что-то вроде этого лучше:
constexpr uint8_t n = 10; // constexpr tells the compiler:
// eh! I'm not planning to write in this variable
// so you can put it in flash memory
auto x = n; // copy n into x (but x is uint8_t, not constexpr)
Я наивно пытаюсь реализовать это так:
namespace Progmem{
class uint8_t{
constexpr uint8_t(::uint8_t x):v{x}{}
// TODO: operator uint8_t() const {return pgm_read_byte(&v);}
// private:
::uint8_t v PROGMEM;
};
}
и проверить это так:
constexpr Progmem::uint8_t n = 10;
auto x = pgm_read_byte(&(n.v));
Он компилируется, но хранить номер в х не правильно.
Как я могу написать этот класс?
Спасибо.
Задача ещё не решена.
Других решений пока нет …