Итак, общими усилиями получилось следующее:
имеется некая структура типа setup (все-таки структура а не массив, т.к. типы данных разные )
Код
typedef struct SettingMenu
{
char Parametr1;
char Parametr2;
int Parametr3;
char Array[10];
float Parametr5;
..........
};Setup
..........
..........
Setup LocalSetup;// Структура
char *sptr; // Указатель
sptr = (char*)&LocalSetup;// Получили адрес
a=sizeof(Setup);// и размер
for (c=0; c<a; c++)
{
*sptr++ = ReadEprom(StartSetupAdress+c);
}
Работает отлично, заморочек с чтением/записью разных типов данных нет. Большое спасибо!!
Но, допустим, мне необходимо перезаписать всего один элемент структуры - пускай 5 элемент.
Мне нужно узнать его адрес и размерность.
Указано явно:
Код
sptr = (char*)&LocalSetup.Parametr5;
a = sizeof(LocalSetup.Parametr5);// Получили размерность, например, он float - 4 байта
for (c=0; c<a; c++)
{
*sptr++ = ReadEprom(StartSetupAdress+N+c);// где N-адрес в ПЗУ Параметра 5
}
Такой вопрос: как это сделать не с явным указанием, а по номеру элемента структуры
например,
ReadSinglePar(LocalSetup,5), где 5 - пятый элемент структуры, т.е. Parametr5 ?
Если это делать явно, то модуль установочного меню раздуется весьма ощутимо, и будет проблемка синхронизации при изменении самой структуры(при изменении количества или названия элементов).
Можно, конечно, переписать всю структуру, но критично время.