|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Mar 5 2011, 09:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Вот именно, как? Ваша структра as имеет вполне определенное число подструктрур:3. Где тут неизвестное, где тут переменная? В вашем примере, где все структуры содержат разнотипные данные и никаких указателей и информации о длинах, никакой цикл не сгодится, ручками в массив заносите. Либо расшифруйте задачу
p.s. Кстати, название темы более осмысленное, чем постановка задачи. Попробуйте рыть в строну структуры с указателями. Указатели тем приятны, что все имеют одинаковый размер
Сообщение отредактировал V_G - Mar 5 2011, 09:31
|
|
|
|
|
Mar 5 2011, 09:29
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата Это как так? Например в код понадобится добавить подструктуру, добавляем и добавляем в макрос MAXCOUNTSTRUC х +1 больше изменений в коде не нужно делать. Будет что то вроде библиотеки с типами. Цитата Вот именно, как? Ваша структра as имеет вполне определенное число подструктрур:3. Где тут неизвестное, где тут переменная? В вашем примере, где все структуры содержат разнотипные данные и никаких указателей и информации о длинах, никакой цикл не сгодится, ручками в массив заносите. Либо расшифруйте задачу Указатели длины можно добавить там код просто что бы мысль показать
Сообщение отредактировал sergey sva - Mar 5 2011, 09:32
|
|
|
|
|
Mar 5 2011, 10:08
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(sergey sva @ Mar 5 2011, 13:48)  Можно и так, но интересно в цикле сделать. Интересно, для чего, если структура статически существует. Можно этот массив также статически и заполнить Код void *asshole[MAX_ASSHOLE_HACKS]={offsetof(as,a),offsetof(as,b) /*etc etc*/};
|
|
|
|
|
Mar 5 2011, 11:56
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Вот так нужно сделать? Код struct as S; memcpy(adrr, &S, sizeof(as)); Судя по Цитата(sergey sva @ Mar 5 2011, 12:00)  Структура в ней разнотипные структуры, их нужно перебрать в цикле и адреса подструктур структуры as записать в массив адресов. Желательно все в цикле так как не известно сколько будет подструктур. наверное, что-то нужно другое... Что? У Вас не структуры нет, ни массива адресов... Может, вот так хотите сделать? Код struct as S; void * addr[]= { &S.a, &S.b, &S.c };
|
|
|
|
|
Mar 6 2011, 12:00
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(MrYuran @ Mar 5 2011, 13:35)  И что мешает вашему макросу ...? Да, в макросизации нужно идти до конца! Я не знаю, что именно хочет автор, но сам делаю что-то подобное присвоением типам структур условных номеров через enum, ну и конечно же есть тяжелое место в коде - по условному номеру структуры выполнить требуемые действия - "жосткий" switch, не красящий код (см ниже). Врагу не пожелаешь  Код char GetRecordParametersError(uchar area, uchar index) { switch (area) { #define BACKUP_AREA(type_name,var_name,qty_name, mask,show_name) case type_name: \ record_parameters.eeprom_offset=OFFSET(EEPROM_TYPE,var_name[index]); \ record_parameters.bytes_qty=sizeof(type_name##_TYPE); \ record_parameters.ram_address=(uchar *) &var_name; \ record_parameters.checksum_address=&var_name.checksum; \ break; #include "k__areas.h" #undef BACKUP_AREA default: return WRONG_AREA; } if (index>area_qty[area]-1) return WRONG_AREA_INDEX; else return 0; }
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 8 2011, 00:54
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Dog Pawlowa @ Mar 6 2011, 14:00)  Врагу не пожелаешь  Ох и хороша же травка  задвинуто-то как!  точно подмечено, врагу не пожелаешь такого. Код switch(area) { case type_name Тут наверно не type_name, а все же area_id надо бы. А зачем всё это, можно полюбопытствовать?
|
|
|
|
|
Mar 9 2011, 07:52
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(defunct @ Mar 8 2011, 03:54)  А зачем всё это, можно полюбопытствовать? Да банально все - размещение данных в EEPROM Код // EEPROM areas // type_name var_name qty mask name BACKUP_AREA (SETUP, se, 2, SETUP_MASK, "Setup " ) BACKUP_AREA (STATISTIC, stat, 1, STATISTIC_MASK, "Statis " ) ....
--------------------
Уходя, оставьте свет...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|