Easyelectronics.ru

Электроника для всех
Текущее время: 17 сен 2019, 01:38

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 06 окт 2014, 10:16 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 617
Откуда: Челябинск
Mirmik писал(а):
А тот вариант, который я приводил выше, про событийный подход... Является автоматом?

Вообще-то, в англоязычной литературе есть соответствующий термин - state-machine (машина сотояний). С другой стороны, есть еще один термин - event driven program (событийно управляемая программа). Зачем придумывть два термина для обозначения одной и той же сущности?
Простой пример. Программа находится в основном цикле ожидая появления какого-либо события. Это можно реализовать по-разному: либо периодически опрашивать флажки различных событий, либо крутиться в холостом цикле ожидая появления прерываний. Далее, допустим, что одним из таких событий является прием некоторой информации по UART. И теперь вопрос: что именно является событием?
Допустим, что от UART ожидается поступление только одного байта. Тогда собыытием будет являться любое прерывание от UART. А если по UART ожидается получение не единственного байта, а некоторого множества байтов, оформленного в виде некоторого пакета. Для примера, пакет состоит из трех байт - байта заголовка пакета и двух байт информации. Стало быть, в этом случае событие возникает только по завершению приема всего пакета. И здесь прерывание от UART уже не является событием. Вопрос: именно организовать прием всего пакета?
Идем дальше. Одним из вариантов лрганизации приема пакета является автоматный подход, т.е. программная реализация машины состояний. Для приема трех байт можно четко выделить три состояния: ожидание приема заголовка паета, ожидание прима первого информационного байта, ожидание появления приема второго информациоого байта. Чем хорош данный подход? Поскольку переход программы из одного состояния в другое происходит только при появлении некоторого условия, то происходи естественная фильтрация ложной информации. В данном случае если программа находится в состоянии ожидания заголовка, то прием всякой другой информации не приводит к изменению состояния. Второе достоинство - наглядность программы и легкость ее модификации.
Второй подход - Опять же событийно управляемая программа, когда прием того или иного байта сопровождается установкой соответствующего флажка. Но тогда программа будет содержать в себе множество проверок тех или иных флажков, что отнюдь не способствует пониманию логики работы программы и легкости ее модификации.
Наконец, можно предложить и такой подход - просто принять требуемое число байт и анализ принятого пакета проводить в программе более высокого уровня. И, опять же часто побный анализ (parsing) оформляется как машина состояний.
К слову сказать, такой метод используется давным давно, во всяком случае гораздо раньше 90-х годов прошлого века. Или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 06 окт 2014, 10:56 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1578
Откуда: Киев
Вставлю свои пять копеек в копилку )

Event - это элемент межпроцессного взаимодействия. А внутри процесса почти всегда получается автомат. Да, можно всю программу изобзить в виде одного автомата, технология позволяет, но дико разрастается количество состояний и переходов, типа "введем пять промежуточных технологических состояний".

На чистых событиях тоже не торт - встает вопрос подключения/отключения и иерархии обработчиков события, чтобы события не "проваливались" на ненужные процессы. Все равно без автоматов никуда (состояния, матьих).

Отчасти и поэтому в каждой программе кто-то видит диспетчер, кто-то автомат, кто-то элементы событий, что кому ближе.


Вложения:
466591903.jpg
466591903.jpg [ 24.93 Кб | Просмотров: 1994 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 06 окт 2014, 11:12 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 617
Откуда: Челябинск
Steel.ne писал(а):
Event - это элемент межпроцессного взаимодействия. А внутри процесса почти всегда получается автомат. Да, можно всю программу изобзить в виде одного автомата, технология позволяет, но дико разрастается количество состояний и переходов, типа "введем пять промежуточных технологических состояний".

В общем, да. Только все равно возникает вопрос: как именно реализовать этот автомат. Можно в явном виде, осознанно, т.с. А можно неявоно, не осозавая этого. И мне какжется, что в этом-то и причина всех дискуссий. Или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 19 окт 2014, 21:24 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
Steel.ne писал(а):
А внутри процесса почти всегда получается автомат.

Внутри процесса да, можно разместить и автомат, но зачем это нужно???
У меня внутри процесса всегда несколько ветвей простейшего и понятнейшего линейного алгоритма :)

PS: Внутри процесса автомат, а внутри автомата логические формулы (типа релейной логики) - что называется, попробуй через неделю вспомнить, что там :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 19 окт 2014, 21:39 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Black Warrior писал(а):
...

И? К чему это написано?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 19 окт 2014, 22:08 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
demiurg1978 писал(а):
Black Warrior писал(а):
...

И? К чему это написано?

К тому, что задача включения/выключения лампочки одной кнопкой идеально ложится на релейную логику.
Во всех контроллерах и системах ЧПУ данный подход используется миллионами людей :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 19 окт 2014, 22:21 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Black Warrior писал(а):
demiurg1978 писал(а):
Black Warrior писал(а):
...

И? К чему это написано?

К тому, что задача включения/выключения лампочки одной кнопкой идеально ложится на релейную логику.
Во всех контроллерах и системах ЧПУ данный подход используется миллионами людей :)

Хе-хе. Релейно-контактная логика - программная реализация катушек, контактов. Каждый такт ПЛК - состояние. Почитайте внимательно про ПЛК.
Если вы вздумаете спорить, подумайте еще раз. Если все равно надумали, то еще раз подумайте.
Невозможно без состояний в состоянии "стоп" опрашивать "запуск", в состоянии "пуск" опрашивать "стоп". Одни и те же датчики в разных состояниях дают совершенно другой результат.
Так что я с большим интересом послушаю, какая же будет альтернатива, по вашему, конечному автомату.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB