STC wrote:Да, эти структуры соответствуют друг другу (логически)
Спасибо за разъяснение.
Я посмотрел механизм доступа к таблицам - это выражения типа:
fw_data_t* p_fd =
(fw_data_t*)(p_bytes + m_lip->FIRMWARE_DATA_START);
Как ты смотришь на то, чтобы немного изменить этот механизм?
Например определить структуру
typedef struct
{
typedef struct
{
unsigned char code [SIZE_CODE];
}code_mem;
fw_data_t fwd;
typedef struct
{
unsigned char bootloader [SIZE_BTLDR];
}bootloader_mem;
}device_mem;
SIZE_CODE, fw_data_t, SIZE_BTLDR известны на этапе компиляции.
Доступ к fw_data_t сводится к команде
(если p_bytes - указатель на массив содержащий прошивку):
fw_data_t* p_fd =
(fw_data_t*)(p_bytes + offsetof(device_mem ,fw_data_t) );
Вычисление смещения - на этапе компиляции.
Можно даже так:
fw_data_t* p_fd = &((device_mem*)p_bytes)->fw_data_t;
PS
Структура device_mem немного не читабельна из-за отсутствия пробелов -)