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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> LPC11xx и обработка прерываний
Golikov A.
сообщение Feb 8 2013, 13:15
Сообщение #31


Гуру
******

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



ну все, убедили.

переписываю все проекты с прерываниямиsad.gif....

даже тот где кнопки различали еще и комбинации разно длительных нажатий и при том не занимали под себя отдельный таймер.... wink.gif

правда спор на пустом месте. Надо делать как удобнее, плохого в варианте прерываний нет, и полинг допустим также
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 8 2013, 13:17
Сообщение #32


Местный
***

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



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

Ещё не факт...
В 95-98% случаев периодический опрос кнопок даёт наилучший результат...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 15:29
Сообщение #33


Гуру
******

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



Окей Окей sm.gif...
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 8 2013, 18:05
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Пример, конечно, надуманный, но все же: что будет, если на ножку кнопки подать сигнал частотой под мегагерц? в случае работы по прерыванию и в случае работы по опросу? wink.gif
По-моему в случае периодического опроса - ничего страшного, а в случае прерываний - ничего хорошего.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 18:45
Сообщение #35


Гуру
******

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



ну я же согласилсяsm.gif

второй надуманный пример,
что будет если пользователь захочет нажимать на кнопку с частотой под мегагерц? в случае работы по прерыванию все корректно отработается, а в случае полинга половину нажатий пропуститеsm.gif....

ну в целом наверное да, прерывание опаснее... хотя у него так же есть мертвая зона реакции, та что дребезг устраняет...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 8 2013, 19:09
Сообщение #36


Местный
***

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



Цитата(Golikov A. @ Feb 8 2013, 22:45) *
что будет если пользователь захочет нажимать на кнопку с частотой под мегагерц? в случае работы по прерыванию все корректно отработается, а в случае полинга половину нажатий пропуститеsm.gif....

Это почему же? Если частоту опроса выбирать не на след. утро после пьянки, а осмысленно, то тоже ничего не пропустится. wink.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 9 2013, 08:56
Сообщение #37


Гуру
******

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



Цитата(Golikov A. @ Feb 9 2013, 00:45) *
второй надуманный пример,
что будет если пользователь захочет нажимать на кнопку с частотой под мегагерц? в случае работы по прерыванию все корректно отработается, а в случае полинга половину нажатий пропуститеsm.gif....
Так-ли? В случае работы по прерыванию (и особенно наличия ОС), проц скорее всего загрузится на 100% и прикладное ПО встанет колом. В случае периодического опроса, работоспособность остального ПО, не зависящего от событий нажатия, скорей всего не нарушится. smile3046.gif

Ещё один минус прерывания от кнопки Вы сами выше упомянули:
Цитата(Golikov A. @ Feb 8 2013, 17:39) *
кнопка подключена к ножке процессора, которая умеет генерить прерывание на изменение фронта этой ножки. Вешаем на эту ножку кнопку, применяем все меры по устранению дребезга на схемотехническом уровне.
А в случае периодического опроса абсолютно не нужно никаких схемотехнических мер. Более того - схемотехника этой ноги более свободна, и например нога может выполнять ещё и другие функции (светодиод к примеру).

Цитата(Golikov A. @ Feb 8 2013, 19:15) *
даже тот где кнопки различали еще и комбинации разно длительных нажатий и при том не занимали под себя отдельный таймер.... wink.gif
И это надеюсь без привязки к частоте CPU? Вот это интересно! а можно примерчик в студию? laughing.gif
Да и кто кстати сказал что периодический опрос должен занимать отдельный таймер? Почему нельзя его сделать на каком-то уже существующем подходящем периодическом прерывании таймера?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 9 2013, 12:49
Сообщение #38


Гуру
******

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



В целом я уже согласился, прерывание плохо, полинг это хорошо. Просто потому что это ничего не меняет, а вам это почему то важноsm.gif

уточню только эти моменты:
если пользователь хочет нажимать с частотой 1 МГц, а вы пропустите половину нажатий - это некорректная работа! sm.gif

мер не нужно, но они уже сделаны, зачем отговаривать человека от использования прерывания в этом случае?sm.gif

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

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

этот сквозной таймер могут использовать все модули, без возможности менять его параметры. Проект легко обслуживается, и поддерживается. Можно делать все что хочешь в основном цикле, хоть пихать паузы while(1), делать длительные обработки, реакция на кнопки будет правильной и корректной.


Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 9 2013, 17:24
Сообщение #39


Гуру
******

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



Вот!!! Так и думал! laughing.gif
Т.е. - таймер у вас всё-же есть и кнопка его использует. А теперь просто вместо использования чтения переменной счётчика таймера, делаем в процедуре ISR таймера вызов нашей процедуры сканирования кнопы (с соответствующим делителем). И всё - раньше этот один таймер использовался и теперь так же один таймер используется wink.gif

PS: А ведь могли-бы, из неприязни к таймерам, на ещё одну ногу прицепить RC-цепочку, по нажатию кнопки включать зарядку её и ловить прерывание по достижении порога. Лишние ноги конечно, но зато без таймера! biggrin.gif

Шутка, не обижайтесь sm.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 9 2013, 17:36
Сообщение #40


Гуру
******

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



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

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

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

Причем еще один момент, этот таймер может быть и не регистром контроллера, это может быть таймер внешний в ЛПИСе или же спец микросхема с высокой стабилизацией времени, которые могут и не иметь возможности генерить прервания с интервалами или вообще не иметь возможности генерить прерывание...



заряжать конденсатор - это сильно конечно, там и АЦП можно к процессу подключить, но достаточно просто внешнего таймераsm.gif как я и написал...

Кстати! совсем забылsm.gif)))

Кнопка на прерывании легко и безоговорочно побеждает кнопку по полингу если речь идет о режиме энергосбережения и пробуждению по нажатию кнопки... При полинге вы либо не проснетесь вообще, либо регулярными пробуждениями потратите всю энергию!

тадам!!!! прерывание - полинг 1 : 0
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 18:20
Сообщение #41


Местный
***

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



Цитата(Golikov A. @ Feb 9 2013, 21:36) *
Кнопка на прерывании легко и безоговорочно побеждает кнопку по полингу если речь идет о режиме энергосбережения и пробуждению по нажатию кнопки...

Вот так и знал, что про это зайдет. Но не надо путать, событие "wake_up" и событие "button_pressed" - абсолютно разные, хотя, как частный случай, могут наступить от одного источника. Для "wake_up" - только прерывания, без вариантов. А дальше... угу, он самый, поллинг кнопок.
Go to the top of the page
 
+Quote Post
deplen
сообщение Feb 10 2013, 18:31
Сообщение #42


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

Группа: Участник
Сообщений: 143
Регистрация: 19-11-12
Пользователь №: 74 471



даже не думал, что обработка нажатия на кнопку вызовет такое обсуждение на 3 страницы sm.gif
Go to the top of the page
 
+Quote Post
deplen
сообщение Feb 11 2013, 15:12
Сообщение #43


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

Группа: Участник
Сообщений: 143
Регистрация: 19-11-12
Пользователь №: 74 471



Реализовал чтение порта на нажатие кнопки. Каждые 0.05 секунды выполняется чтение нажатия. Никакого дребезга больше нет.

Но хотелось бы как то заставить таймер следить что бы не было слишком длительных ожидания нажатий. Всмысле, например, пользователь нажал 2 раза, а третий не нажал, то в памяти так два раза и останется. А хотелось бы, если было хотя бы одно нажатие, то запускался счетчик на 5 секунд втечении которых пользователь должен успеть нажать еще 2 раза. Может есть идеи как это реализуется в таймере LPC?

Сообщение отредактировал deplen - Feb 11 2013, 16:03
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 11 2013, 15:21
Сообщение #44


Гуру
******

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



запустить в таймере счетчик?
Go to the top of the page
 
+Quote Post
deplen
сообщение Feb 11 2013, 15:49
Сообщение #45


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

Группа: Участник
Сообщений: 143
Регистрация: 19-11-12
Пользователь №: 74 471



Цитата(Golikov A. @ Feb 11 2013, 19:21) *
запустить в таймере счетчик?


Счетчик, который таймер внутри себя считает?
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 - 08:16
Рейтинг@Mail.ru


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