|
|
 |
Ответов
|
Mar 5 2011, 09:29
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата Это как так? Например в код понадобится добавить подструктуру, добавляем и добавляем в макрос MAXCOUNTSTRUC х +1 больше изменений в коде не нужно делать. Будет что то вроде библиотеки с типами. Цитата Вот именно, как? Ваша структра as имеет вполне определенное число подструктрур:3. Где тут неизвестное, где тут переменная? В вашем примере, где все структуры содержат разнотипные данные и никаких указателей и информации о длинах, никакой цикл не сгодится, ручками в массив заносите. Либо расшифруйте задачу Указатели длины можно добавить там код просто что бы мысль показать
Сообщение отредактировал sergey sva - Mar 5 2011, 09:32
|
|
|
|
|
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 " ) ....
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
sergey sva указатель структур в структуре Mar 5 2011, 07:00 _Pasha Нужно добавить информацию о размере подструктуры. Mar 5 2011, 08:42 zltigo Ничего не понял в этом желании в чем-то вывихнутьс... Mar 5 2011, 08:43 kamil yaminov структурки-то разных размеров! Mar 5 2011, 09:00 sergey sva ЦитатаНичего не понял в этом желании в чем-то выви... Mar 5 2011, 09:00 MrYuran Цитата(sergey sva @ Mar 5 2011, 12:00) Же... Mar 5 2011, 09:14 zltigo В структуре не хранятся ни размеры элементов струк... Mar 5 2011, 09:16 V_G Вот именно, как?
Ваша структра as имеет вполне опр... Mar 5 2011, 09:27 sergey sva Цитата(MrYuran @ Mar 5 2011, 12:35) Мутно... Mar 5 2011, 09:48 _Pasha Цитата(sergey sva @ Mar 5 2011, 13:48) Мо... Mar 5 2011, 10:08  Палыч Вот так нужно сделать?
Кодstruct as S;
memcpy... Mar 5 2011, 11:56 sergey sva Нашел решение помогли . Mar 9 2011, 07:16
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|