|
Вопрос скорее по Си |
|
|
|
Jun 1 2007, 15:17
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
В программе объявлен такой тип данных Код #define MAX_DATA_SIZE 128 struct TStructure { unsigned char DataSize;// размер данных unsigned char Data[MAX_DATA_SIZE]; }; Соответственно есть переменные такого типа: Код struct TStructure st1={ 3, {1,2,3} }; struct TStructure st1={ 1, {1} }; Структуры должны хранится в программной памяти и загружаться в ОЗУ соответственно ситуации. Проблема в том, что Data может быть разной длины (от 1 до 128), то есть программная память зря расходуется. Как определить структуру, чтобы поле Data имела размер не больше чем требуется?
|
|
|
|
|
 |
Ответов
|
Jun 1 2007, 17:50
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Наверное присоединюсь к defunct и zltigo. И структура здесь не мешает. Хотя я бы всёже в структуру вводил ссылку на массив и его длину. Со строками пример приведу, а массив ничем по сути не отличается. Код struct AddrKom_e { uint8_t Name; // Имя команды uint16_t TimeStart; // Время начала исполнения команды uint8_t TimeRealH; // Время реальное часы uint8_t TimeRealM; // Время реальное минуты } *Kom_e;
struct AddrKomT { uint8_t Name; // Имя команды uint16_t TimeStart; // Время начала исполнения команды uint8_t TimeMashtabTek, // Текущее значение масштаба для времени исполнения TimeMashtab; // Масштаб для времени исполнения uint16_t TimeLife; // Время исполнения команды с учётом масштаба int16_t BegX,BegY; // Начало объекта (X,Y) int8_t VecX,VecY; // вектор перемещения объекта (X,Y) uint8_t text[10]; // Текст сообщения } *KomT;
struct AddrKomR { uint8_t Name; // Имя команды uint16_t TimeStart; // Время начала исполнения команды uint8_t TimeMashtab; // Изменение масштаба для времени исполнения uint16_t TimeLife; // Изменение времени исполнения команды с учётом масштаба int16_t BegX,BegY, // Изменение начала объекта (X,Y) SizeX,SizeY; // Изменение размеров объекта (X,Y) int8_t VecX,VecY; // Изменение вектора перемещения объекта (X,Y) uint8_t NAktive; // Номер изменяемого объекта } *KomR;
..... А применяю так Код KomXx = (struct AddrKomXx*) AdrActiveKom[i]; // Прочитать адрес текущей активной команды if(KomXx->TimeStart>Status.TekTime) continue; // Если не подошло время для исполнения команды, то пропустить данную команду switch (KomXx->Name) { /* Команда "END" - "Ролик завершить" */ case 'E': ...... case 'e': Kom_e = (struct AddrKom_e*) AdrActiveKom[i];// Прочитать адрес текущей активной команды if((Kom_e->TimeRealH>Status.Hour)&&(Kom_e->TimeRealM>Status.Minute)){ .....
|
|
|
|
Сообщений в этой теме
_Артём_ Вопрос скорее по Си Jun 1 2007, 15:17 rezident ИМХО, забейте на эту структуру! Объявите одно... Jun 1 2007, 15:28 _Артём_ Цитата(rezident @ Jun 1 2007, 18:28) P.S.... Jun 1 2007, 15:44  rezident Цитата(_Артём_ @ Jun 1 2007, 21:44) Данны... Jun 1 2007, 16:30   _Артём_ Цитата(rezident @ Jun 1 2007, 19:30) Вы с... Jun 1 2007, 16:49 zltigo Цитата(rezident @ Jun 1 2007, 18:28) ИМХО... Jun 1 2007, 17:17  rezident Цитата(zltigo @ Jun 1 2007, 23:17) Соверш... Jun 1 2007, 18:43   zltigo Цитата(rezident @ Jun 1 2007, 21:43) Стру... Jun 1 2007, 19:00   defunct Цитата(rezident @ Jun 1 2007, 21:43) Чита... Jun 1 2007, 21:24    Сергей Борщ Цитата(defunct @ Jun 2 2007, 00:24) сравн... Jun 2 2007, 08:43     defunct Цитата(Сергей Борщ @ Jun 2 2007, 11:43) С... Jun 2 2007, 12:40      ReAl Цитата(defunct @ Jun 2 2007, 15:40) Под o... Jun 2 2007, 13:52       defunct Цитата(ReAl @ Jun 2 2007, 16:52) Т.е. раз... Jun 2 2007, 16:42       defunct Цитата(ReAl @ Jun 2 2007, 16:52) (кстати,... Jun 2 2007, 18:53 _artem_ первый элемент структуры (для всех структур) можно... Jun 1 2007, 15:44 defunct Как вариант - использовать "open array" ... Jun 1 2007, 15:48 Сергей Борщ Цитата(defunct @ Jun 1 2007, 18:48) Как в... Jun 1 2007, 18:20  rezident Цитата(Сергей Борщ @ Jun 2 2007, 00:20) 3... Jun 2 2007, 18:24   zltigo Цитата(rezident @ Jun 2 2007, 21:24) Кста... Jun 2 2007, 19:00    rezident Цитата(zltigo @ Jun 3 2007, 01:00) The ar... Jun 2 2007, 19:16     zltigo ЦитатаЭта цитата означает что...
Да.
Цитата(rezide... Jun 2 2007, 19:27   Сергей Борщ Цитата(rezident @ Jun 2 2007, 21:24) Кста... Jun 2 2007, 19:52    zltigo Цитата(Сергей Борщ @ Jun 2 2007, 22:52) И... Jun 2 2007, 20:11     Сергей Борщ Цитата(zltigo @ Jun 2 2007, 23:11) А каки... Jun 2 2007, 20:37      zltigo Цитата(Сергей Борщ @ Jun 2 2007, 23:37) А... Jun 2 2007, 21:38 sensor_ua IMHO, лучше массивы не пытаться укладывать в струк... Jun 1 2007, 16:23 defunct Цитата(sensor_ua @ Jun 1 2007, 19:23) IMH... Jun 1 2007, 17:14 singlskv Цитата(_Артём_ @ Jun 1 2007, 19:17) Струк... Jun 1 2007, 22:15 _Артём_ Цитата(singlskv @ Jun 2 2007, 01:15) Може... Jun 1 2007, 22:33  tag Цитата(_Артём_ @ Jun 2 2007, 01:33) Пробл... Jun 4 2007, 08:03   _Артём_ Цитата(tag @ Jun 4 2007, 11:03) ...непоня... Jun 4 2007, 21:14    zltigo Цитата(_Артём_ @ Jun 5 2007, 00:14) Вариа... Jun 4 2007, 21:27     _Артём_ Цитата(zltigo @ Jun 5 2007, 00:27) Ой... Jun 5 2007, 20:20      zltigo Цитата(_Артём_ @ Jun 5 2007, 23:20) Приво... Jun 5 2007, 20:30       _Артём_ Цитата(zltigo @ Jun 5 2007, 23:30) Ну и п... Jun 5 2007, 21:22    Сергей Борщ А про С++ в вопросе не было!
Цитата(_Артём_ ... Jun 5 2007, 08:14     ReAl Цитата(Сергей Борщ @ Jun 5 2007, 10:14) В... Jun 5 2007, 10:17      Oldring Цитата(ReAl @ Jun 5 2007, 14:17) На мой в... Jun 5 2007, 11:06       rezident Цитата(Oldring @ Jun 5 2007, 17:06) Если ... Jun 5 2007, 11:09        Oldring Цитата(rezident @ Jun 5 2007, 15:09) Я эт... Jun 5 2007, 11:44 sensor_ua Цитатаприсваивать указателю на такую структуру адр... Jun 2 2007, 12:41 sensor_ua Если нужно, то указателем вполне пожно пользоватьс... Jun 2 2007, 14:33 SasaVitebsk Честно говоря я уже в рассуждениях несколько потер... Jun 2 2007, 17:44 rezident Цитата(Сергей Борщ)Или динамическое выделение памя... Jun 2 2007, 20:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|