Я пишу класс для Raspberry Pi Pico (с использованием Arduino), который предполагает связь через Modbus. Я использую структуры для организации своих данных в данные идентификатора, данные о состоянии, данные измерений и т. д. Я хотел бы, чтобы эти структуры использовали ту же память, что и массив Modbus, чтобы избежать memcpy каждый раз, когда я изменяю переменную или получаю сообщение. Я могу сделать то же самое, используя массивы, следующим образом:
uint16_t modbusData[255];
uint16_t offset = 10; //target address for array
struct DataStruct_t {
uint16_t measCount = 3; //number of measurements
uint16_t sampCount = 5; //number of samples containing measCount measurements
uint16_t *data; //raw data of length measCount*sampCount
};
DataStruct_t dataStruct;
dataStruct.data = &modbusData[offset]; //data is stored directly in modbus registers and accessed via pointer
uint16_t measurement0 = data[0]; //equal to modbusData[offset]
Вместо этого я хотел бы сделать что-то эквивалентное следующему. В настоящее время это выдает мне ошибки типа, так как я не могу сделать указатель DataStruct_t точкой в массиве uint16_t. Это возможно или я пытаюсь сделать какую-то глупость?
DataStruct_t *dataStruct;
dataStruct = &modbusData[offset];
Подробнее здесь: https://stackoverflow.com/questions/786 ... a-in-array