|
|
 |
Ответов
|
Dec 17 2007, 16:29
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
А если такая ситуация Код for (c=0; c<sizeof(Setup); c++) *sptr++ = get_eeprom(BASE_IMAGE+c); // Записываем по адресу некое значение P.S. А првельней мне кажеться Код Read_eeprom(BASE_IMAGE, sptr, sizeof(Setup)); //:)
|
|
|
|
|
Dec 18 2007, 08:34
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535

|
Итак, общими усилиями получилось следующее: имеется некая структура типа 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 ? Если это делать явно, то модуль установочного меню раздуется весьма ощутимо, и будет проблемка синхронизации при изменении самой структуры(при изменении количества или названия элементов). Можно, конечно, переписать всю структуру, но критично время.
|
|
|
|
|
Dec 18 2007, 13:10
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(Andrei_S @ Dec 18 2007, 11:34)  Но, допустим, мне необходимо перезаписать всего один элемент структуры - пускай 5 элемент. Мне нужно узнать его адрес и размерность. Код //------------------------------------------------------------- // Вычисление смещения до поля в структуре //------------------------------------------------------------- #define OFFSET(type,field) ((char *)&(((type *)0)->field) - (char *)0) Как пользоваться - OFFSET(тип_структуры, имя_элемента) выдаст смещение от начала структуры до указанного элемента. Размер элемента можно получить по sizeof(type.field). Цитата(Andrei_S @ Dec 18 2007, 16:01)  Но а все-таки, а как уйти от названия элементов структуры к порядковому номеру элемента этой структуры?
Хотелось бы вместо названия поля info_1 писать номер этого поля, например 1 Тогда я бы сделал еще одну табличку с дескрипторами полей. Например, массив структур с описателями параметров. В него заносил бы тип поля, смещение от начала, размер, формат вывода, строку с именем, минимальное и максимальное значения и т.д. А индекс этого массива для читабельности описал как enum.
|
|
|
|
Сообщений в этой теме
Andrei_S struct - непонятка с косвенной адресацией Dec 17 2007, 09:51 sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 12:51) Set... Dec 17 2007, 10:05 VladislavS Хотите массив - используйте!!!
typedef... Dec 17 2007, 10:18 Andrei_S Спасибо sergik_vrn , попробую...
А насчет массива:... Dec 17 2007, 10:35 sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 13:35) Спа... Dec 17 2007, 10:52  Юрий Санвальд Цитата(sergik_vrn @ Dec 17 2007, 13:52) .... Dec 17 2007, 11:25  Andrei_S Цитата(sergik_vrn @ Dec 17 2007, 13:52) 1... Dec 17 2007, 11:35   Юрий Санвальд Цитата(Andrei_S @ Dec 17 2007, 14:35) ...... Dec 17 2007, 11:48    Andrei_S Цитата(Юрий Санвальд @ Dec 17 2007, 14:48... Dec 17 2007, 12:01     aaarrr Цитата(Andrei_S @ Dec 17 2007, 15:01) Пар... Dec 17 2007, 12:12      Andrei_S Цитата(aaarrr @ Dec 17 2007, 15:12) Ага, ... Dec 17 2007, 12:26       Юрий Санвальд Если уж все элементы однотипные, то чем тогда не п... Dec 17 2007, 12:34       sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 15:26) Име... Dec 17 2007, 12:34     Юрий Санвальд Цитата(Andrei_S @ Dec 17 2007, 15:01) Пар... Dec 17 2007, 12:18   sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 14:35) ...... Dec 17 2007, 12:20    tag Цитата(sergik_vrn @ Dec 17 2007, 15:20) у... Dec 18 2007, 10:45     Andrei_S Цитата(tag @ Dec 18 2007, 13:45) ...как в... Dec 18 2007, 11:48 zhevak присоединяюсь к sergik_vrn
Структура, все элемент... Dec 17 2007, 11:41 Юрий Санвальд Цитата(zhevak @ Dec 17 2007, 14:41) ...
С... Dec 17 2007, 12:01 Сергей Борщ Цитата(zhevak @ Dec 17 2007, 13:41) Струк... Dec 17 2007, 12:36  Andrei_S Цитата(Сергей Борщ @ Dec 17 2007, 15:36) ... Dec 17 2007, 12:52   sergik_vrn Цитата(Andrei_S @ Dec 17 2007, 15:52) Воо... Dec 17 2007, 13:27    Andrei_S Большое спасибо всем!
Буду пробовать... Dec 17 2007, 13:33 vmp Почитайте про перечислимый тип (enum).
Именно он н... Dec 17 2007, 11:53 digital union {
unsigned char mass[10];
struct... Dec 17 2007, 13:28 digital по поводу enum:
не хорошо, так как заставляет сам... Dec 17 2007, 13:47 MALLOY2 ЦитатаГоспода, что-то не понимаю следующего:
Даю ... Dec 17 2007, 14:40 vet memset(&LocalSetup, 0, sizeof(Setup)) тогда уж... Dec 17 2007, 14:47  sergik_vrn Цитата(Andrei_S @ Dec 18 2007, 11:34) Ита... Dec 18 2007, 09:00   Andrei_S Цитата(sergik_vrn @ Dec 18 2007, 12:00) я... Dec 18 2007, 10:26 _dem Цитата..как вариант#define BAUD_RATE ... Dec 18 2007, 12:31 Andrei_S КодRead_EEPROM((u8 *)&config.info_... Dec 18 2007, 13:01 _dem Если типов данных сравнительно немного, сделайте о... Dec 18 2007, 14:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|