ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 июля
562349 Топик полностью
VL (26.11.2014 07:44, просмотров: 1) ответил fk0123 на Геттер возвращает конкретный тип. Точно так же как элемент битовой структуры имел бы тип. В чём разница? Типы не должны позволять присвоения как попало. Без C++ задумка, понятно, бессмысленная. Так же и сеттер ожидает аргументом только конкретный
Я заметил - когда одни люди говорят - п...ц, другие не верят.  три структуры typedef struct _DateSpecialYear { unsigned day : 5; unsigned mon : 4; unsigned year : 6; unsigned prog : 5; } tDateSpecialYear; typedef struct _DateSpecial { unsigned day : 5; unsigned mon : 4; unsigned prog : 5; } tDateSpecial; typedef struct _DateSeason { unsigned day : 5; unsigned mon : 4; unsigned group : 1; } tDateSeason; Структура обычная, внизу задифайнены смещения полей. typedef struct _C{ int16 GoEvent_Table[NUM_GO_EVENT]; int32 PriceTarif[NUM_TARIF + 1]; int16 LimLowActiv; int8 TLowActiv; int8 LimE_PERC; int8 FL_CheckModeLimE; int8 FL_TarifMode; int8 tauInterv; int8 LevelLNErr; int8 sum_diff; int8 tauPInt; int8 LimP_PERC; int8 ModeLimP; int8 LimP_CheckTarif; int8 LimU_HIST; int8 LimFreq; int8 LimTemp; int16 LimUmax; int16 LimUmin; } tCFG_METER; #pragma pack() // смещения полей #define SHIFT_CFG_METER_GOEVENTTABLE 0 #define SHIFT_CFG_METER_PRICETARIF SHIFT_CFG_METER_GOEVENTTABLE + 2*NUM_GO_EVENT #define SHIFT_CFG_METER_LIMLOWACTIV SHIFT_CFG_METER_PRICETARIF+(4*(NUM_TARIF+1)) #define SHIFT_CFG_METER_TLOWACTIV SHIFT_CFG_METER_LIMLOWACTIV+2 #define SHIFT_CFG_METER_LIMEPERC SHIFT_CFG_METER_TLOWACTIV+1 #define SHIFT_CFG_METER_FL_CHECKMODELIME SHIFT_CFG_METER_LIMEPERC+1 #define SHIFT_CFG_METER_FL_TARIFMODE SHIFT_CFG_METER_FL_CHECKMODELIME+1 #define SHIFT_CFG_METER_TAUINTERV SHIFT_CFG_METER_FL_TARIFMODE +1 #define SHIFT_CFG_METER_LEVELLNERR SHIFT_CFG_METER_TAUINTERV+1 #define SHIFT_CFG_METER_SUMDIFF SHIFT_CFG_METER_LEVELLNERR+1 #define SHIFT_CFG_METER_TAUPINT SHIFT_CFG_METER_SUMDIFF+1 #define SHIFT_CFG_METER_LIMPPERC SHIFT_CFG_METER_TAUPINT+1 #define SHIFT_CFG_METER_MODELIMP SHIFT_CFG_METER_LIMPPERC+1 #define SHIFT_CFG_METER_LIMPCHECKTARIF SHIFT_CFG_METER_MODELIMP+1 #define SHIFT_CFG_METER_LIMUHIST SHIFT_CFG_METER_LIMPCHECKTARIF+1 #define SHIFT_CFG_METER_LIMFREQ SHIFT_CFG_METER_LIMUHIST+1 #define SHIFT_CFG_METER_LIMTEMP SHIFT_CFG_METER_LIMFREQ+1 #define SHIFT_CFG_METER_LIMUMAX SHIFT_CFG_METER_LIMTEMP+1 #define SHIFT_CFG_METER_LIMUMIN SHIFT_CFG_METER_LIMUMAX+2 Пример расчет адреса a = adr_sh + EEADR_LIMP_CHECK_POW + (subCmd - SMP_OPT_POW_LIM_EVENING_01_CODE) * SIZE_LIMP_CHECK_POW * 2 + SIZE_LIMP_CHECK_POW; // адрес На всем этом фоне #define EEADR_STATE_RE 0x6A10 #define SIZE_STATE_RE 16 #define EEADR_STATE_SIGN_INTERF 0x6A20 #define SIZE_STATE_SIGN_INTERF 40