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

 
 
> Меню на LCD 16х2 (Си WinAVR)+5кнопок, Как организовать меню , принцип
Кастусь Рыжов
сообщение Aug 9 2009, 15:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 16-07-07
Из: Беларусь, г.Гомель
Пользователь №: 29 165



Нужно написать меню на Си, Атмега16 +5кнопок +ЖКИ 16х2
Меня интересует сам принцип организации меню и какие средства языка Си лучше использовать для написания меню
Опыта в Си мизер, ткните пальцем для направления верного или может у кого наработки есть, поделитесь для примера, посмотреть исходник. Заранее спасибо всем откливнувшимся. (использую Си компилятор WinAVR и AVR Studio)
ЗЫ: может не умею искать, но поис по форуму у меня не увенчался успехом smile3046.gif


--------------------
Прибор должен работать не в принципе, а в корпусе!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Scanner
сообщение Sep 7 2009, 19:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 355
Регистрация: 23-07-08
Из: Пензенская область
Пользователь №: 39 157



Цитата(zltigo @ Aug 9 2009, 20:33) *
Тогда продолжайте учиться искать. Тема на этом форуме избитая, не говоря уже о AVR-овском Butterfly

Тоже не смог найти темы - помогите ссылками! Заранее спасибо.
Go to the top of the page
 
+Quote Post
Legotron
сообщение Sep 8 2009, 14:04
Сообщение #3


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(Scanner @ Sep 7 2009, 23:58) *
Тоже не смог найти темы - помогите ссылками! Заранее спасибо.

Внесу свои 5 копеек.
Я решал задачу построения и обработки меню следующими способами:
1 способ - аля AVR Butterfly
Качаете исходники и по 5 раз перечитываете их в отношении меню (я именно так и делал, когда-то давно, сразу понять принцип было тяжело smile.gif ) но у меня был сам батерфлай, поэтому мне было проще.
Какие плюсы на мой взгляд:
1. Красивая организация кода
2. Достаточно просто прослеживается логика
3. Всё написано на чистом С
2 способ - жесткий самопал smile.gif
Подходит для совсем маленьких меню, ~10-20 пунктов.
Просто пишите конструкции switch, if, else
Для простых меню, которые не подразумевается расширять - то что надо, писать быстро, код получается читабельным (повторюсь, только для маленьких меню!)
3 способ - мой любимый biggrin.gif (да простят меня гуру) - Visual State Machine
IAR Visual State
Quantum Leaps (сложнее и мощнее)
Начну с плюсов на примере IAR VS:
Если не брать в расчет сколько времени нужно потратить чтобы ваш конечный автомат заработал нормально, ощущение когда всё правильно работает с Deep-state и Shallow-state логикой - просто поросячий восторг!!!
Рисуете графическую UML-диаграмму своего меню (оооо-да всё перед глазами, сразу видно biggrin.gif , несомненный плюс)
Симулируете свою диаграмму в реальном времени!!! просто жмёте кнопки событий, видите как работают таймеры таймаутов и прочие-прочие сладости..
Отлаживаете свою диаграмму в железе в IAR-e, я так отладил коммуникационный протокол по RS-485 прямо под JTAG. Тоже детский восторг вызывает, скажу честно.
Всё что вам нужно - это добавить несколько авто-сгенерированных файлов в свою программу и немного во всё это воткнуться...
Также поддерживает C++.. там тоже есть прелести..
Есть очереди, ну и многое другое, копаться можно долго.
Минусы я вижу в том что это слишком долго настраивается и изучается, по сравнению со способом 2 день и ночь.
Также возможны трудно уловимые баги самой программы, на которые можно наткнуться..
Вообщем сейчас уже этой штукой не пользуюсь для меню, но время потраченное на ее освоение не жаль, если бы мне приходилось очень часто писать конечные автоматы, я бы по сей день бы пользовался, а так многое забывается и приходиться тратить слишком много времени на то, чтобы вспомнить.

P.S. Вообщем, мои 5 копеек smile.gif

Добавлено:
Не подумайте что IAR VS можно использовать только с IAR! просто в ИАРе есть дебаггер для визуал стэйт. А так подходит для любых ANSI C компиляторов.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 8 2009, 14:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Legotron @ Sep 8 2009, 16:04) *
если бы мне приходилось очень часто писать конечные автоматы, я бы по сей день бы пользовался....

Вся эта бодяга с Visual State на самом деле подходит для ОЧЕНЬ простых автоматов проектируемых, что называется тупо в лоб. Если состояний много, воздействий еще больше - поведение становится формально трудно описуемым нужно добавлять элементы размытой логики... Вся эта красота от IAR идет лесом. Проверено на собственной шкуре года четыре назад - простое и так пишется просто а сложное с этой приблудой только сложнее sad.gif


Цитата(Legotron @ Sep 8 2009, 16:04) *
1 способ - аля AVR Butterfly

Да, уже поминал в начале топика в качестве примера. Особого пиетета не стоит (ну разве только по отношению к коду генеримому IAR VS smile.gif ), но достаточно добротно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 8 2009, 14:45
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



А я вот пришел к макросам описания состояний и доволен.
Переходы между состояниями - ручками внутри соответствующих функций.
Единственная проблема - время компиляции после всей "макросизации" состояний, портов, ошибок, событий, клавиш) выросло драматически.

Да, вот это хорошо:
"просто поросячий восторг!!! .... Вообщем сейчас уже этой штукой не пользуюсь для меню " smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Sep 8 2009, 15:08
Сообщение #6


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Делал довольно разветвлённые меню путём организации состояния программы с перебором в основном цикле и функциями перехода.
Чтото типа такого:

Код
//основной цикл
while(1)
{
switch(state)
{
   case 1: Case1();
   break;
  
   case 2: Case2();
   break;
  
   case 3: Case3();
   break;
}
}

//процедура перехода (для каждого case своя)
void JumpToCase1(void)
{
   state = 1;
  
  //вывод на индикатор чего-либо
  ...................................................

//изменение каких-либо параметров
......................................................
}

//процедура для case1
void Case1(void)
{
   //любые действия в case1
   ....................................................................

   //условия перехода в другие состояния
   if(button1 == push) JumpToCase2;
   elseif(button2 == push) JumpToCase3;
}


Всем состояниям давал осмысленые названия и в итоге получалась легко читаемая программа менюшки (даже после 2х-3х месяцев) smile.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 9 2009, 05:50
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(mempfis_ @ Sep 8 2009, 18:08) *
Делал довольно разветвлённые меню путём организации состояния программы с перебором в основном цикле и функциями перехода.

Особенно красиво получается, когда вся работа помещается в idle(), тогда как меню, так и интерфейсную логику можно не стесняясь выполнить в основном цикле. Раньше я считал конструкции типа бесконечного цикла внутри другого бесконечного цикла чем-то позорным. Теперь попустило - на надежность девайса это не оказывает ровно никакого влияния.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Кастусь Рыжов   Меню на LCD 16х2 (Си WinAVR)+5кнопок   Aug 9 2009, 15:12
- - zltigo   Цитата(Кастусь Рыжов @ Aug 9 2009, 18:12)...   Aug 9 2009, 16:33
- - _Pasha   Меню - разные бывают. Чаще в таких случаях - редак...   Aug 9 2009, 16:35
- - Vishv   Да не нужно искать специальные средства языка - их...   Aug 9 2009, 16:42
- - Кастусь Рыжов   Народ, извиняюсь за размножение избитых тем. сильн...   Aug 9 2009, 17:01
|- - zltigo   Цитата(Кастусь Рыжов @ Aug 9 2009, 20:01)...   Aug 9 2009, 17:25
|- - ZVE   Цитата(Кастусь Рыжов @ Aug 9 2009, 20:01)...   Aug 9 2009, 17:38
- - ARV   я для многих проектов с меню приспособился делать ...   Aug 9 2009, 17:48
- - Legotron   Цитата(zltigo @ Sep 8 2009, 18:28) воздей...   Sep 8 2009, 15:20
|- - zltigo   Цитата(Legotron @ Sep 8 2009, 17:20) В да...   Sep 8 2009, 15:29
|- - Dog Pawlowa   Цитата(Legotron @ Sep 8 2009, 18:20) К ма...   Sep 8 2009, 17:20
- - Legotron   Цитата(zltigo @ Sep 8 2009, 19:29) Шла, д...   Sep 8 2009, 15:37


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

 


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


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