Цитата(ViKo @ Jun 19 2018, 09:17)

Да, я гений. Я умею задать дефайнами размеры, варианты. Слышали такое: #ifdef, #else, #endif?
Гений, знающий про ifdef, вот Вам пример из конкретного коммерческого проекта (ПО для линейки устройств). Покажите пожалуйста как вы сделаете распределение страниц FLASH в Вашем стиле?
А мы посмотрим - чей вариант нагляднее и читаемее.
Код
//каждый байт структуры соответствует странице DFLASH
union DFLASH {
struct {
u8 nastr[8];
u8 jrnDayEnergy[10];
u8 jrnMonthEnergy[5];
u8 jrnEventFwUpdate[2];
u8 jrnEventSetPwd[2];
u8 jrnEventAccessDeny[2];
u8 jrnEventTamper[2];
u8 jrnEventClearEnergy[2];
u8 jrnProfilePower[700];
u8 jrnProfileBillingData1[39];
u8 jrnProfileBillingData2[73];
#if FIRMWARE_TARGET == FIRMWARE_TARGET_S04 || FIRMWARE_TARGET == FIRMWARE_TARGET_S07
u8 jrnProfile_phase_A[510];
u8 jrnProfile_phase_B[510];
u8 jrnProfile_phase_C[510];
u8 jrnProfileBillingData1_A[36];
u8 jrnProfileBillingData2_A[64];
u8 jrnProfileBillingData1_B[36];
u8 jrnProfileBillingData2_B[64];
u8 jrnProfileBillingData1_C[36];
u8 jrnProfileBillingData2_C[64];
#ifdef PKE
u8 jrnEvent_PKE[2002]; //Журнал текущих данных ПКЭ
u8 jrnEvent_PKE_PandP[34]; //Журнал провалов,прерываний напряжения и перенапряжений
u8 jrnEvent_PKEStatistic[368]; //Общий статистический журнал событий ПКЭ
u8 jrnEvent_PKE_PandP_statistic[124]; //Журнал статистики по провалам, прерываниям, перенапряжениям
#endif //PKE
#endif
u8 jrnEventCosem[45];
u8 jrnEventMonitorRegister[45];
u8 jrnEventMeterConfiguration[45];
#if FIRMWARE_TARGET == FIRMWARE_TARGET_S07
u8 jrn_change_transformation_coefficient[10];
#endif
u8 jrn_Events_not_erase[10];
u8 unuse0[FIRM_BUF_SIZE]; //резерв для DFLASH::firmware
};
struct {
u8 unuse1[DF_N_PAGES - FIRM_BUF_SIZE];
u8 firmware[FIRM_BUF_SIZE];
};
};
Раз уж в теории никак не доходит, то может хоть на реальном примере дойдёт

Цитата(ViKo @ Jun 19 2018, 10:40)

Где и когда вы сравниваете размер вашей структуры (в байтах, умноженных на размер страницы) и размер памяти? Кому вы доверяете эту процедуру, или просто забили, на авось?
Я эту "процедуру" доверяю стандартному инструменту, называемому
assert_static.
А Вы какому авосю доверяете?