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

 
 
> IAR. Динамический размер структуры. Micro Menu. IAR
demiurg1978
сообщение Dec 14 2014, 07:45
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Тут пример Micro Menu. Проект написан для WinAVR (AVR Toolchain). В этом проекте размер структуры зависит от размера текстовой строки. В IAR никак не могу добиться и понять, как мне сделать, чтобы размер структуры зависел от размера текстовой строки. Проект компилируется, только если задать так:
Код
//========================================================================
typedef struct menu_item
{
   void      *Parent;
   void      *Child;
   void      *Next;
   void      *Prev;
   FuncPtr    NumFunc;
   FuncPtr    EnterFunc;
   FuncPtr    MenuFunc;
   char       Text[20];
} menu_item;
//========================================================================

Есть ли возможность добиться, чтобы в IAR размер структуры зависел от размера текстовой строки?
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
psL
сообщение Dec 14 2014, 12:47
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Структура меню же не меняется в процессе работы? Может тогда проще __flash сразу ко всем menu_item?
Код
    menu_item __flash submenu1[] = {
        { .Parent=&main[0], Child=&submenu2[0], .Next=&submenu1[1], .Prev=&submenu1[0], ..., .Text="Submenu1" },
        ...
    }
    menu_item __flash main[] = {
        { .Parent=&main[0], Child=&submenu1[0], .Next=&main[0], .Prev=&main[0], ..., .Text="Main" }
    }

Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Dec 14 2014, 18:30
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Цитата(psL @ Dec 14 2014, 18:47) *
...

Что-то как-то сложно у вас...
Код
MAKE_MENU (L_OUT_MODE, NULL_ENTRY, L1_I1_TEMP, NULL_ENTRY, NULL_ENTRY, show_service_menu, out_mode_init, NULL_FUNC, "ПАРАМЕТРЫ");
MAKE_MENU (L1_I1_TEMP, L_OUT_MODE, L2_I1_TEMP, L1_I2_TIME, NULL_ENTRY, NULL_FUNC, menu_parameters_init, NULL_FUNC, "ТЕМПЕРАТУРА");
MAKE_MENU (L1_I2_TIME, L_OUT_MODE, TIME_I1_COOLING, L1_I3_SPEED, L1_I1_TEMP, NULL_FUNC, menu_parameters_init, NULL_FUNC, "ТАЙМЕРЫ");
MAKE_MENU (L1_I3_SPEED, L_OUT_MODE, SPEED_I1_CLOSE, L1_I4_PRESSURE, L1_I2_TIME, NULL_FUNC, menu_parameters_init, NULL_FUNC, "СКОРОСТЬ");


Сообщение отредактировал demiurg1978 - Dec 14 2014, 18:38
Go to the top of the page
 
+Quote Post
psL
сообщение Dec 14 2014, 20:30
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(demiurg1978 @ Dec 14 2014, 21:30) *
Что-то как-то сложно у вас...
Код
MAKE_MENU (...

Это пример. А что, макрос MAKE_MENU делает что-то принципиально иное? laughing.gif
Просто подумал, что раз меню статически задается, то нет необходимости в двусвязном списке - можно узлы подуровеня в дереве сразу в массиив положить, тогда поля.Next и .Prev будут не нужны.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Dec 14 2014, 21:41
Сообщение #19


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата
Чего стоят эти pgm_read_byte, pgm_read_word

Уже сделали просто атрибут - и чтение из другого адресного пространства стало прозрачным. И оптимизатор это лучше обрабатывает.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 09:19
Рейтинг@Mail.ru


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