Цитата(Idle @ Jul 20 2007, 18:18)

Все настройки представляют собой только одну cтруктуру, располагаемую в eeprom.
Внутри этой структуры есть переменные с глобальными настройками и массив структур с настройками профилей.
Задача в том, чтобы разместить структуры с настройками профилей с отступом друг от друга и отступом от настроек глобальных.
Нужно это для того, чтобы при увеличении количества настроек как глобальных, так и настроек профилей, они не затирали уже существующие данные.
Пишу на C, ARM SDT 2.51.
Кроме ручной вставки больших paddingo-в и последующего пересчета размеров оных при изменении структур, ничего не придумывается.
Отделить структуру global_data от profile_data и пользоваться указателями
Код
#define PROFILE_CNT 64
#define PROFILE_SIZE 128
typedef struct {
int g1;
//.....
uint8_t profiles[PROFILE_CNT * PROFILE_SIZE];
}global_data_t;
global_data_t global_data;
typedef struct {
int p1;
int p2;
//....
}profile_data_t;
profile_data_t* get_profile(unsigned num)
{
return (profile_data_t*)(global_data.profiles+num*PROFILE_SIZE);
}
Цитата(Idle @ Jul 20 2007, 18:18)

Все настройки представляют собой только одну cтруктуру, располагаемую в eeprom.
Внутри этой структуры есть переменные с глобальными настройками и массив структур с настройками профилей.
Задача в том, чтобы разместить структуры с настройками профилей с отступом друг от друга и отступом от настроек глобальных.
Нужно это для того, чтобы при увеличении количества настроек как глобальных, так и настроек профилей, они не затирали уже существующие данные.
Пишу на C, ARM SDT 2.51.
Кроме ручной вставки больших paddingo-в и последующего пересчета размеров оных при изменении структур, ничего не придумывается.
Отделить структуру global_data от profile_data и пользоваться указателями
Код
#define PROFILE_CNT 64
#define PROFILE_SIZE 128
typedef struct {
int g1;
//.....
uint8_t profiles[PROFILE_CNT * PROFILE_SIZE];
}global_data_t;
global_data_t global_data;
typedef struct {
int p1;
int p2;
//....
}profile_data_t;
profile_data_t* get_profile(unsigned num)
{
return (profile_data_t*)(global_data.profiles+num*PROFILE_SIZE);
}