реклама на сайте
подробности

 
 
> безымянные struct и union, WinAVR
ARV
сообщение Jul 28 2010, 07:31
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



расширение GNU для GCC вводит возможность задавать в структурах безымянные поля типа struct или union, например, так:
Код
typedef struct {
  uint8_t fix;
  union {
      uint8_t param;
      void *ptr;
   };
}flex_struct_t;

flex_struct_t rec;
и потом в зависимости от условий обращаться rec.param или rec.ptr, как будто эти поля родные для структуры. все хорошо (если не считать того, что Eclipse такой записи не понимает и не подсказывает при вводе имена этих объединенных полей), пока не начинаешь запихивать такие структуры во flash:
Код
PROGMEM flex_struct_t fixed = {.fix=0, .param = 123};
приводит к ошибке unknown field 'param' specified in initializer

вопрос, как обычно, традиционный: что делать? это баг или фича?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
neiver
сообщение Jul 29 2010, 12:09
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



А это стандарт такой в Си, что можно инициализировать только первый элемент в union.
Об этом можно на RSDN спросить, там любят стандарт обсуждать/цитировать.
А если делать универсальное, гибкое меню, то можно как-то так:

Код
struct ItemHeader
{
    prog_char    *text;
              uint8_t        type;
    void *content;
};

struct Type1Item
{
      union
    {
                   uint8_t id;
                   int *num;
    };
    void (*func);
};


struct Type2Item
{
    uint8_t        vcnt;
    uint8_t        *vid;
    prog_char    **var;
};

PROGMEM Type1Item Item1 =
{
    100, NULL
};

PROGMEM Type2Item Item2 =
{
    50, NULL, NULL
};

PROGMEM char m1[] = {"Hello"};
PROGMEM char m2[] = {"Hello2"};

PROGMEM ItemHeader mainmenu[] =
{
    {m1, 0, &Item1},
    {m2, 1, &Item2},
};


ЗЫ. компилировал в С++ режиме

Сообщение отредактировал neiver - Jul 29 2010, 12:11
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   безымянные struct и union   Jul 28 2010, 07:31
- - MrYuran   Цитата(ARV @ Jul 28 2010, 11:31) все хоро...   Jul 28 2010, 07:44
- - dimka76   а если попробовать проинитить так КодPROGMEM flex...   Jul 28 2010, 07:49
|- - ARV   Цитата(dimka76 @ Jul 28 2010, 11:49) а ес...   Jul 28 2010, 07:57
|- - dimka76   Цитата(ARV @ Jul 28 2010, 11:57) Цитата(d...   Jul 28 2010, 08:00
- - ARV   если инициализировать переменную - ошибка все равн...   Jul 28 2010, 07:50
- - MrYuran   А если так: КодPROGMEM flex_struct_t fixed = {.fix...   Jul 28 2010, 07:54
- - IgorKossak   QUOTE ... Eclipse такой записи не понимает и не по...   Jul 28 2010, 09:00
|- - ARV   Цитата(IgorKossak @ Jul 28 2010, 13:00) H...   Jul 28 2010, 10:58
- - MrYuran   что-то у вас странное... Цитата#define var_item(t,...   Jul 28 2010, 11:46
|- - ARV   Цитата(MrYuran @ Jul 28 2010, 15:46) что-...   Jul 28 2010, 12:02
- - MrYuran   Что-то вы перемудрили... Как можно инициализироват...   Jul 28 2010, 12:12
- - ARV   почему все? я инициализирую только в одном вариант...   Jul 28 2010, 12:17
- - ARV   Жаль, что все знатоки Си, которых тут немало, не ж...   Jul 29 2010, 09:35
|- - ReAl   Цитата(ARV @ Jul 29 2010, 12:35) Жаль, чт...   Jul 29 2010, 11:32
- - dimka76   Кодunion{ uint8_t id; int *num; }; Вы...   Jul 29 2010, 10:30
|- - ARV   Цитата(dimka76 @ Jul 29 2010, 14:30) Кодu...   Jul 29 2010, 10:42
- - ARV   до этого предположения я как бы дошел, но у меня з...   Jul 29 2010, 11:48
|- - ReAl   Цитата(ARV @ Jul 29 2010, 14:48) я ведь и...   Jul 29 2010, 12:29
|- - ReAl   Цитата(ReAl @ Jul 29 2010, 15:29) Но в да...   Jul 30 2010, 09:51
- - ARV   что-то не выходит каменный цветок и с -fms-extensi...   Jul 30 2010, 04:20
- - ARV   на avrfreaks в очередной раз посоветовали написать...   Jul 30 2010, 10:58
- - ARV   все-таки на avrfreaks подали идею, как выкрутиться...   Jul 30 2010, 18:10
- - ReAl   Цитата(ARV @ Jul 30 2010, 21:10) все-таки...   Jul 30 2010, 18:21


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 04:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016