I’m writing a class for a Raspberry Pi Pico (using Arduino) that involves communicating via modbus. I am using structs to organise my data into ID data, status data, measurement data etc. I would like these structs to share the same memory as the modbus array to avoid a memcpy every time I change a variable or receive a message. I can do similar using arrays as follows:
<code>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]
</code>
<code>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]
</code>
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]
I would like to do something equivalent to the following instead. Currently it gives me type errors, as I can’t make a DataStruct_t pointer point at a location in a uint16_t array. Is this possible or am I trying to do something dumb?
<code>DataStruct_t *dataStruct;
dataStruct = &modbusData[offset];
</code>
<code>DataStruct_t *dataStruct;
dataStruct = &modbusData[offset];
</code>
DataStruct_t *dataStruct;
dataStruct = &modbusData[offset];