Можно ли создать класс / структуру, которая имеет определенный макет памяти, но имеет две переменные, которые необходимо синхронизировать, не прибегая к ручной синхронизации его с функцией?
Пример:
struct hardwareLayout{
uint8_t regA;
uint8_t regB;
uint8_t regC;
}
regA
и regC
должны содержать одно и то же значение одновременно (несмотря на последовательную запись данных в регистр).И физически расположены по разным адресам в памяти
В сущности, что-то вроде этого будет wat, то, что я хочу:
struct abstractInterfaceToHardwareLayout{
uint8_t regA;
uint8_t regB;
uint8_t& regC = regA;
}
И это будет использоваться, как:
abstractInterfaceToHardwareLayout& interface = static_cast<abstractInterfaceToHardwareLayout&>(pointerToBaseOfHardware);
interface.regA = 0x01;
//and as such interface.regC is also the value 0x01
Проблема в том, что это невозможно сделать, потому что regC
будет создан компилятором как указатель на uint8_t regA
, а не на значение uint8_t
.И как таковая структура памяти интерфейса будет:
uint8_t regA;
uint8_t regB;
pointer_to_uint8_t_with_value_semantics regC;
Возможно, с другой шириной типа и диссонирующим значением внутри regC
, поскольку это указатель, а не значение.
Отдельные области памяти могут быть требованием от встроенного устройства с memory-mapped-io, которое требует определенной схемы памяти для регистров.