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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> LPC11xx и обработка прерываний
Сергей Борщ
сообщение Feb 7 2013, 23:39
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Golikov A. @ Feb 7 2013, 20:48) *
Периодический опрос - потенциально приложения пропускающие клики...
Почему?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 03:22
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



по определению...

быстрые клики попавшие в паузы опроса - не будут замечены. Прерывание чем хорошо, что даже если вы запретили прерывания в момент нажатия, нажатие все равно будет замечено и флаг будет поставлен, и разрешив прерывания вы узнаете что нажатие было.

Главное не понятно откуда такая боязнь прерывания? Любой полинг грузит процессор в разы выше,
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 8 2013, 05:37
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Alex11 @ Feb 7 2013, 20:51) *
0.5 мс, если Вы внимательно прочитали пост, - это время опроса дребезга. Общее время дребезга все равно будет не менее 5 мс. На два фронта - 10 мс, стало быть максимум скорости, которую можно отжать от кнопки - 100 Гц.
Я внимательно прочитал, только всё равно не понял зачем опрашивать дребезг??? Я почему-то всегда считал - его надо гасить...
Если у вас максимальное время дребезга кнопки 5мс, то соответственно частота сканирования кнопок не должна превышать 200Гц иначе будут ложные срабатывания. Вот и всё.

Цитата(Alex11 @ Feb 7 2013, 20:51) *
И иногда удобно, чтобы кнопка срабатывала быстро и на короткий удар отвечала двумя переходами, а не блокировала его как дребезг.
Здесь вроде обсуждается вопрос подавления дребезга, а не генерации его.

Цитата(deplen @ Feb 7 2013, 21:54) *
P.S. да и общий вопрос, вешать такой нестабильный фронт как кнопка на прерывание хорошая идея? или проще и надежнее сделать простой опрос пина в цикле?
И на прерывание и опрос в цикле - обе плохие. Грамотно - делать опрос из периодического прерывания.


Цитата(Golikov A. @ Feb 8 2013, 00:48) *
Периодический опрос - потенциально приложения пропускающие клики...
Обоснуйте.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 8 2013, 05:39
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Golikov A. @ Feb 8 2013, 06:22) *
Главное не понятно откуда такая боязнь прерывания? Любой полинг грузит процессор в разы выше,

Это не боязнь... это осмысленное понимание того, что, и главное как, нужно делать...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 8 2013, 10:45
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Golikov A. @ Feb 8 2013, 05:22) *
по определению...

быстрые клики попавшие в паузы опроса - не будут замечены.
Опрос раз в 50 мс в прерывании таймера. Клик быстрее 50 мс - это не клик, это наводка. Зато никаких ограничений на функции вывода - ему не обязательно иметь возможность генерить прерывания. Он может использоваться для дополнительных функций - например, на нем может висеть еще и индикатор. Он может вообще быть аналоговым и читаться через АЦП. Кнопки могут быть организованы в матрицу или еще каким-то хитрым способом.


QUOTE (Сергей Борщ @ Feb 8 2013, 12:43) *
Опрос раз в 50 мс в прерывании таймера. Клик быстрее 50 мс - это не клик, это наводка. Зато никаких ограничений на функции вывода - ему не обязательно иметь возможность генерить прерывания. Он может использоваться для дополнительных функций - например, на нем может висеть еще и индикатор. Он может вообще быть аналоговым и читаться через АЦП. Кнопки могут быть организованы в матрицу или еще каким-то хитрым способом.


QUOTE (Golikov A. @ Feb 8 2013, 05:22) *
Главное не понятно откуда такая боязнь прерывания? Любой полинг грузит процессор в разы выше,
У меня в ATmega8 только две ноги могут генерить прерывания. Мне отказываться от заказов, в которых более двух кнопок?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 11:39
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надо разделить сложности проектирования и текущую реализацию.


имеем
кнопка подключена к ножке процессора, которая умеет генерить прерывание на изменение фронта этой ножки. Вешаем на эту ножку кнопку, применяем все меры по устранению дребезга на схемотехническом уровне. Теперь вопрос, почему в данной ситуации не использовать прерывание? Чем оно хуже полинга? Зачем в этой ситуации нужен полинг? Какой выигрыш от периодического опроса?

Когда я пишу потенциально - это значит потенциально, а не всегда. пишешь приложение с главным циклом

опрос кнопок
измерение
вывод на экран

а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор. А за ней начинает расти скорость реакции на кнопку после нажатия, то есть время между тем как вы нажали и тем как приложение отозвалось.

И тут мы приходим к светлому решению вынести кнопки в отдельный поток на таймер. Сделать прерывание и опрашивать с периодами, все супер, но только пришли к тому же прерыванию что и от кнопки, но еще в добавок заняли таймер. А что выиграли то?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 8 2013, 12:03
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Golikov A. @ Feb 8 2013, 13:39) *
Какой выигрыш от периодического опроса?

Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет.

Цитата(Golikov A. @ Feb 8 2013, 13:39) *
а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор.

Проверяйте состояние входа в функции прерывания таймера.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 8 2013, 12:06
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Feb 8 2013, 15:39) *
Какой выигрыш от периодического опроса?

Я думал, это очевидно: поллинг проще. Техническое совершенство - это прекрасно, но в условиях ограниченных ресурсов (чаще всего - времени) часто приходится выбирать решения, которые не совершенны, но с задачей справляются.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 12:14
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(_Артём_ @ Feb 8 2013, 16:03) *
Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет.


Проверяйте состояние входа в функции прерывания таймера.


про таймер написал чуть ниже, тоже прерывание, только еще и таймер заюзали.

Про то что будет работать для любого входа, аргумент, но есть ли смысл? Если есть устройство, в нем есть прерывание и кнопка, зачем писать так чтобы работало и без этого? На будущее?
Мы решаем эти вопросы во время проектирования, если прерывания выделить невозможно, решается так, если есть порты с прерываниями - сяк. Конкретный прибор - конкретная реализация, переносимость кода и его изменяемость решается на более высоком уровне, на том где уже состояние кнопок получено, а как получается состояние кнопок - это уже конкретный прибор == конкретный способ.


Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 8 2013, 12:21
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Golikov A. @ Feb 8 2013, 14:14) *
тоже прерывание, только еще и таймер заюзали.

На то они и таймеры, чтобы их юзать...
К тому же в программе как правило нужен таймер для формирования времени и тп.

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 12:27
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(scifi @ Feb 8 2013, 16:06) *
Я думал, это очевидно: поллинг проще. Техническое совершенство - это прекрасно, но в условиях ограниченных ресурсов (чаще всего - времени) часто приходится выбирать решения, которые не совершенны, но с задачей справляются.


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

Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 8 2013, 12:31
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Feb 8 2013, 16:27) *
Хоть как-то - это сырой продукт

Есть одно НО: периодический опрос кнопок - это не хоть как-то. Попробуйте на досуге - работает замечательно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 12:41
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



sad.gif мне кажется меня не слышат, наверное вам кажется так же.

у человека есть проц
есть ножка с прерыванием
есть кнопка
есть прерывание

спрашивает так делать хорошо или плохо? ему говорят плохо, потому что в АВР нет прерыванияsm.gif))... ну смешно же!
Мой ответ так делать в конкретно этом случае хорошо!





Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 8 2013, 12:46
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Feb 8 2013, 16:41) *
Мой ответ так делать в конкретно этом случае хорошо!

Скажу больше: и так, и так хорошо. А с учётом времени, потраченного на спор, мой аргумент о недостатке времени в данном случае не применим :-)
Но есть иные аргументы: переносимость кода, например. Хотя в данном случае он тоже может быть не применим - автору вопроса виднее. Со своей стороны замечу, что при прочих равных стараюсь выбирать переносимый вариант, причём на практике это реально приносило плоды при переходе на другой компилятор, МК и т.д.
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 8 2013, 12:57
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Golikov A. @ Feb 8 2013, 16:14) *
Если есть устройство, в нем есть прерывание и кнопка, зачем писать так чтобы работало и без этого? На будущее?

У меня есть один, но убийственный аргумент. Никогда не доводилось реализовывать функциональность кнопки чуть сложнее, чем просто нажатие? А именно, различать короткие и длинные нажатия? Ну и как тут без таймера? А в варианте с поллингом, это реализовывается на раз. wink.gif
Go to the top of the page
 
+Quote Post

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

 


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


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