|
организация пользовательского меню с выводом на дисплей |
|
|
|
Aug 13 2013, 15:31
|
Местный
  
Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856

|
Вот подсмотрел пример организации меню. http://easyelectronics.ru/organizaciya-dre...nogo-menyu.html Пробую для STM32 , на IAR. CODE // структура для меню typedef struct PROGMEM{ void *Next; void *Previous; void *Parent; void *Child; uint8_t Select; const char Text[]; } menuItem;
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \ menuItem Next; \ menuItem Previous; \ menuItem Parent; \ menuItem Child; \ menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }} #define NULL_ENTRY Null_Menu menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}}; enum { MENU_CANCEL=1, MENU_RESET, MENU_MODE1, MENU_MODE2, MENU_MODE3, MENU_SENS1, MENU_SENS2, }; // NEXT, PREVIOUS PARENT, CHILD MAKE_MENU(m_s1i1, m_s1i2, NULL_ENTRY, NULL_ENTRY, m_s2i1, 0, "Запуск");
и вот на строки menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}}; MAKE_MENU(m_s1i1, m_s1i2, NULL_ENTRY, NULL_ENTRY, m_s2i1, 0, "Запуск"); IAR выдаёт ошибку. Error[Pe146]: too many initializer values Что ему не нравится ?
Сообщение отредактировал IgorKossak - Aug 13 2013, 21:17
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
 |
Ответов
|
Aug 13 2013, 17:53
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
У меня со скрипом, но собралось (в вижуал студии). Верните в макрос extern как в примере. Все ссылки на другие меню Next, Previous должны быть описаны с помощью MAKE_MENU иначе линкер будет ругаться. Вот как у меня получилось: CODE #define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \ extern menuItem Next; \ extern menuItem Previous; \ extern menuItem Parent; \ extern menuItem Child; \ menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }}
menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}}; #define NULL_ENTRY Null_Menu
enum { MENU_CANCEL=1, MENU_RESET, MENU_MODE1, MENU_MODE2, MENU_MODE3, MENU_SENS1, MENU_SENS2, };
MAKE_MENU(Level1Item1, Level1Item2, Level1Item3, NULL_ENTRY, Level1Item1Sub1, 0, "Запуск"); MAKE_MENU(Level1Item2, Level1Item3, Level1Item1, NULL_ENTRY, NULL_ENTRY, 0, "Запуск2"); MAKE_MENU(Level1Item3, Level1Item1, Level1Item2, NULL_ENTRY, NULL_ENTRY, 0, "Запуск3"); MAKE_MENU(Level1Item1Sub1, NULL_ENTRY, NULL_ENTRY, Level1Item1, NULL_ENTRY, 0, "Запуск4");
int _tmain(int argc, _TCHAR* argv[]) { return 0; }
Сообщение отредактировал andrewlekar - Aug 13 2013, 17:53
|
|
|
|
Сообщений в этой теме
alexdos организация пользовательского меню с выводом на дисплей Aug 13 2013, 15:31 Golikov A. все не правильно сказал....
а если
"Запуск... Aug 13 2013, 15:34 alexdos Цитата(Golikov A. @ Aug 13 2013, 18:34) в... Aug 13 2013, 16:33  _Артём_ Цитата(alexdos @ Aug 13 2013, 19:33) Ниче... Aug 13 2013, 17:07   alexdos Цитата(_Артём_ @ Aug 13 2013, 20:07) У ва... Aug 13 2013, 17:13   Golikov A. Цитата(_Артём_ @ Aug 13 2013, 21:07) У ва... Aug 13 2013, 20:48 V.K Уберите кириллицу. Замените её HEX-кодами. Aug 13 2013, 17:17 andrewlekar Попробуйте перебить макрос вот так:
Код#define MA... Aug 13 2013, 17:19 alexdos Цитата(andrewlekar @ Aug 13 2013, 20:19) ... Aug 13 2013, 17:27  Lotor Цитата(alexdos @ Aug 13 2013, 21:27) Може... Aug 14 2013, 07:11 alexdos Мда... пол дня убил.. а оказалось все просто..
... Aug 13 2013, 20:51 Golikov A. это слишком простое и очевидное решение.
Для мале... Aug 14 2013, 03:35 alexdos Цитата(Golikov A. @ Aug 14 2013, 06:35) э... Aug 14 2013, 07:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|