Сообщение от
Валенок
Ну так и отобрази этот кусок памяти как структуру эквивалентную размещению этого массива регистров.
Представьте, что телеметрия от ПЛК состоит из 3 регистров.
Я читаю эти регистры в массив:
Код:
const int plctm_regs_count = 3;
const WORD plctm_addr = 0;
static WORD plctm_regs[plctm_regs_count];
Reads(PLC, slave_id, MODBUS_RTU_REGS_3X, plctm_addr, plctm_regs_count, &plctm_regs);
Дальше я хочу скопировать этот массив в следующую структуру:
Код:
typedef struct plctm_telemetry_ {
WORD reg;
float real;
} plctm_telemetry_t;
plc_telemetry_t plctm;
memcpy(&plctm, plctm_regs, sizeof(plctm_regs));
Но этот код не работает так, как ожидается, потому что для компилятора структура выглядит так:
Код:
typedef struct plctm_telemetry_ {
WORD reg;
WORD reg_stub; // компилятор добавил это для 4-ехбайтного выравнивания
float real;
} plctm_telemetry_t;
и при копировании второй регистр телеметрии попадёт в reg_sub
А задать выравнивание для структуры, как выяснилось, возможности нет