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

 
 
> Приоритет прерываний, и прерывание прерываний
PhX
сообщение Aug 28 2008, 16:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Есть три обработчика прерываний:
От Timer1
от INT0
и допустим
от Timer2
Прерывание от INT0 наиважнейшее не обработается вовремя расстрел (считает импульсы энкодера максимальная частота 250 КГц). Вопрос как сделать так, чтобы это прерывание имело наивысший приоритет и прерывало обработчики остальных прерываний?
Компилятор WinAVR.


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bzx
сообщение Aug 29 2008, 17:52
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



Цитата(PhX @ Aug 28 2008, 20:53) *
Прерывание от INT0 наиважнейшее не обработается вовремя расстрел (считает импульсы энкодера максимальная частота 250 КГц).

Если в задачи int0 входит только тупой подсчёт импульсов, то не проще ли, я бы да же сказал рациональнее, было бы завести данный сигнал не на int0, а на счётный вход таймера, который аппатарно будет считать импульсы, и не спеша далее делать свои дела. Да же на C все можно следать при таком подходе.


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 29 2008, 18:48
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Взгляд со стороны. Ибо в жаркой дискусси я неучвствовал, хотя все постинги прочитал.

Попробую объяснить на пальцах.

1. Возмите у жены/сестры/матери сантиметр (хотя, там все 150 сантиметров! Почему они его сантиметром называют -- отдельный вопрос.) -- это будет шкала времени. Пусть 10 сантиметров (длины) будут равены 1 мс.

2. Теперь прикиньте, сколько времени потребуется для обрабтки INT0. Допустим, 2 мс. Эквивалентная длина 20 сантимов. Нарежьте несколько полосок цветной бумаги (или провода) этой длины. Из условия задачи мы знаем, что INT0 прет с частотой 250 кГц. Значит, INT0 будет возникать через каждые 4 мс. Теперь, разложите цветные полоски на шкале времени через каждые 40 сантиметров. Это время занято.

3. Проделайте те же действия с плолосками бумаги другого цвета для проерываний от таймеров. Разложите "таймерные" полоски на свободном месте, с учетом примерной периодичности поступления этих прерываний.

4. Если есть еще какие-то процессы -- добавьте еще бумаги.


Понятно, что какие-то из полосок придется сдвигать вправо по оси времени. Сейчас главное уяснить два вопроса:

1) А хватит-ли вообще процессорного МК времени для обработки прерываний?
2) То, на сколько может сдвинуться полоска (обработка), это будет дрожжание обработчика -- ждиттер. Нужно прикинуть, оценить величину этого дрожжания.

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


Итак, дело за автором топика: внесите ясность.

ЗЫ
Для прерываний, которые не привязаны жестко ко времени (у которых полоски бумаги допустимо сдвигать) можно предложить следующий способ обработки. Обнаруженное, но необработанное событие (postpone) можно зафиксировать не в переменной-флаге, а в переменной-счетчике. Т.е. возникло прерывание, уходим в обработчик, инкрементируем счетчик, выходим. Все! Достаточно быстро, ничего лишнего, никакой обработки. Обработка будет потом.

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

Тут правда есть подводные камни. У AVR отсутствуют команды, котрые позволяют производить операцию инкремента/декремента в памяти. Значит, что бы декрементировать счетчик нужно сначала переменную считать в регистр, затем декрементировать, а после этого записать обратнно в память. Т.е. нарушается принцип атомарности операции. Что произойдет, если мы считали переменную в регистр, а в это время произошло прерывание, где эта же переменная успешно будет инкрементирована. Получается так, что после окончания прерывания, значение в регистре будет не верным. картина Репина "А мужики-то не знают!"

Для решения этого придется эту переменную либо размещать в регистре (расточительно и небезопасно), либо обрамлять тройку команд (ld-dec-st) командами разрешения/запрещения прерываний. Т.е. нужен нам нужен какой-то семафор. У АВР есть хорошая атомарная команда swap. Можно поиграться сней. Но я, кажись, увлекся... Извините smile.gif


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PhX   Приоритет прерываний   Aug 28 2008, 16:53
- - zltigo   Цитата(PhX @ Aug 28 2008, 18:53) ...как П...   Aug 28 2008, 17:11
|- - smac   Цитата(zltigo @ Aug 28 2008, 21:11) Поско...   Aug 28 2008, 19:28
|- - zltigo   Цитата(smac @ Aug 28 2008, 21:28) поэтому...   Aug 28 2008, 19:40
|- - defunct   Цитата(zltigo @ Aug 28 2008, 22:40) Если ...   Aug 28 2008, 19:47
||- - zltigo   Цитата(defunct @ Aug 28 2008, 21:47) вот ...   Aug 28 2008, 20:02
||- - defunct   Цитата(zltigo @ Aug 28 2008, 23:02) Так с...   Aug 28 2008, 20:35
||- - zltigo   Цитата(defunct @ Aug 28 2008, 22:35) ...п...   Aug 28 2008, 20:54
||- - defunct   Цитата(zltigo @ Aug 28 2008, 23:54) Нет. ...   Aug 28 2008, 21:10
||- - zltigo   Цитата(defunct @ Aug 28 2008, 23:03) очев...   Aug 28 2008, 21:14
||- - defunct   Цитата(zltigo @ Aug 29 2008, 00:14) Поско...   Aug 28 2008, 21:26
||- - zltigo   Цитата(defunct @ Aug 28 2008, 23:26) не с...   Aug 28 2008, 21:48
||- - defunct   Цитата(zltigo @ Aug 29 2008, 00:48) Повто...   Aug 28 2008, 21:59
||- - zltigo   Цитата(defunct @ Aug 28 2008, 23:59) гм?...   Aug 28 2008, 22:37
||- - defunct   Цитата(zltigo @ Aug 29 2008, 01:37) Ладно...   Aug 29 2008, 00:19
||- - zltigo   Цитата(defunct @ Aug 29 2008, 02:19) Они ...   Aug 29 2008, 08:18
||- - defunct   Цитата(zltigo @ Aug 29 2008, 11:18) -При ...   Aug 29 2008, 11:00
||- - =GM=   Прям операционка получилась...кооперативная(:-).   Aug 29 2008, 11:06
||- - zhevak   Цитата(=GM= @ Aug 29 2008, 17:06) Прям оп...   Aug 29 2008, 16:43
||- - Боинг749   Вот кстати ещё тема с похожей тематикой (касающаяс...   Aug 29 2008, 19:15
|- - smac   Цитата(zltigo @ Aug 28 2008, 23:40) INT0 ...   Aug 28 2008, 20:03
|- - SasaVitebsk   Цитата(zltigo @ Aug 28 2008, 22:40) INT0 ...   Aug 28 2008, 20:23
|- - zltigo   Цитата(SasaVitebsk @ Aug 28 2008, 22:23) ...   Aug 28 2008, 20:46
|- - defunct   Цитата(zltigo @ Aug 28 2008, 23:46) В это...   Aug 28 2008, 20:54
- - defunct   Цитатапри входе в прерывания запретить индивидуаль...   Aug 28 2008, 19:28
- - =GM=   Цитата(PhX @ Aug 28 2008, 15:53) как сдел...   Aug 28 2008, 23:11
|- - zltigo   Цитата(=GM= @ Aug 29 2008, 01:11) ..да и ...   Aug 28 2008, 23:23
- - PhX   Честно говоря не ожидал, что проблема вызоет такую...   Aug 30 2008, 06:26
|- - Сергей Борщ   Цитата(PhX @ Aug 30 2008, 09:26) Как ли э...   Aug 30 2008, 08:42
- - Rst7   Дам пару советов. Во первых, код написать таким об...   Aug 30 2008, 08:31
|- - =GM=   Цитата(Rst7 @ Aug 30 2008, 07:31) Общая и...   Aug 31 2008, 22:01
|- - defunct   Цитата(=GM= @ Sep 1 2008, 01:01) А вообще...   Aug 31 2008, 23:23
|- - Dog Pawlowa   Цитата(defunct @ Sep 1 2008, 02:23) Тайме...   Sep 1 2008, 07:36
|- - PhX   Цитата(Dog Pawlowa @ Sep 1 2008, 12:36) Н...   Sep 1 2008, 08:07
|- - defunct   Цитата(PhX @ Sep 1 2008, 11:07) Реально п...   Sep 1 2008, 10:43
||- - =GM=   Цитата(defunct @ Sep 1 2008, 09:43) Если ...   Sep 1 2008, 11:03
|- - ReAl   Цитата(PhX @ Sep 1 2008, 11:07) p.s. А в ...   Sep 1 2008, 11:00
|- - defunct   Цитата(PhX @ Sep 1 2008, 11:07) p.s. А в ...   Sep 1 2008, 11:34
- - Rst7   Цитата if (!(PORTC & (1 << 3)))   //...   Aug 30 2008, 09:27
|- - Сергей Борщ   Цитата(Rst7 @ Aug 30 2008, 12:27) Это над...   Aug 30 2008, 09:38
|- - sKWO   Цитата(Сергей Борщ @ Aug 30 2008, 12:38) ...   Aug 30 2008, 09:45
- - Rst7   Цитатаоэтому делать ее в этом месте вполне безопас...   Aug 30 2008, 10:14
|- - defunct   ЦитатаTCNT1 += 0x10000 - 62500 / Frq; выбросить вс...   Aug 30 2008, 20:59
|- - Боинг749   Цитата(defunct @ Aug 31 2008, 00:59) выбр...   Aug 30 2008, 21:08
||- - defunct   Цитата(Боинг749 @ Aug 31 2008, 00:08) Как...   Aug 31 2008, 07:34
|||- - Боинг749   Цитата(defunct @ Aug 31 2008, 11:34) Прям...   Aug 31 2008, 07:40
||- - Сергей Борщ   Цитата(Боинг749 @ Aug 31 2008, 00:08) НАП...   Aug 31 2008, 10:39
|- - PhX   Цитата(defunct @ Aug 31 2008, 01:59) выбр...   Aug 31 2008, 06:43
- - Боинг749   Цитата(PhX @ Aug 28 2008, 20:53) Есть три...   Aug 30 2008, 17:52
- - SasaVitebsk   В одном из изделий у меня использовался следующий ...   Aug 30 2008, 21:54
- - Rst7   Цитатас какого момента вы были наделены правами и ...   Aug 31 2008, 14:14
- - Rst7   ЦитатаИнтересно бы взглянуть на код Код RSEG COD...   Sep 1 2008, 05:49
|- - =GM=   Цитата(Rst7 @ Sep 1 2008, 04:49) А старши...   Sep 1 2008, 09:23
- - Rst7   ЦитатаИ как вы себе представляете правку старшего ...   Sep 1 2008, 09:49
|- - =GM=   Цитата(Rst7 @ Sep 1 2008, 08:35) Вполне п...   Sep 1 2008, 09:52
|- - PhX   Цитата(Rst7 @ Sep 1 2008, 14:49) А смысл?...   Sep 1 2008, 09:53
- - Rst7   ЦитатаТо есть был 127, стал 128 - меняем старший б...   Sep 1 2008, 10:02
- - Rst7   Цитатаavr-gcc делает лишнее Кстати, не пора ли лю...   Sep 1 2008, 11:02
|- - ReAl   Цитата(Rst7 @ Sep 1 2008, 14:02) Кстати, ...   Sep 1 2008, 11:20
- - Rst7   Цитата77% загрузка процессора. Необходимо учесть ...   Sep 1 2008, 11:07
|- - =GM=   Цитата(Rst7 @ Sep 1 2008, 10:07) Кстати, ...   Sep 1 2008, 11:21
- - Rst7   ЦитатаКодвижн такие времена даёт для интиджер. Ды...   Sep 1 2008, 11:24
|- - =GM=   Цитата(Rst7 @ Sep 1 2008, 10:24) Дык поль...   Sep 1 2008, 11:40
|- - PhX   Цитата(Rst7 @ Sep 1 2008, 16:24) Дык поль...   Sep 1 2008, 11:50
|- - defunct   Цитата(PhX @ Sep 1 2008, 14:50) где можно...   Sep 1 2008, 11:54
|- - =GM=   Цитата(PhX @ Sep 1 2008, 10:50) Асм это х...   Sep 1 2008, 12:56
||- - Сергей Борщ   Цитата(=GM= @ Sep 1 2008, 15:56) Ещё раз ...   Sep 1 2008, 13:11
||- - defunct   Цитата(=GM= @ Sep 1 2008, 15:56) То-то вс...   Sep 1 2008, 13:12
||- - =GM=   Цитата(defunct @ Sep 1 2008, 12:12) Опред...   Sep 1 2008, 15:25
||- - defunct   Цитата(=GM= @ Sep 1 2008, 18:25) Ну, прек...   Sep 1 2008, 15:47
||- - =GM=   Цитата(defunct @ Sep 1 2008, 14:47) ОК Ч...   Sep 1 2008, 16:14
||- - zltigo   Цитата(=GM= @ Sep 1 2008, 18:14) ...как б...   Sep 1 2008, 16:25
||- - defunct   Цитата(=GM= @ Sep 1 2008, 19:14) Ну, а ес...   Sep 1 2008, 16:38
||- - =GM=   Краткие выводы из всех наших долгих разговоров. 1...   Sep 1 2008, 20:32
||- - zltigo   Цитата(=GM= @ Sep 1 2008, 22:32) 3) Из по...   Sep 1 2008, 21:50
|- - sKWO   Цитата(PhX @ Sep 1 2008, 14:50) Если не ж...   Sep 1 2008, 15:19
- - Rst7   ЦитатаК примеру, у вас прерывание выполняется за 2...   Sep 1 2008, 11:45
|- - =GM=   Цитата(Rst7 @ Sep 1 2008, 10:45) Значения...   Sep 1 2008, 12:05
- - Rst7   ЦитатаЭто должен делать компилятор, причём во всех...   Sep 1 2008, 12:18
- - SasaVitebsk   Я бы ещё отметил, в дополнение к сказанному, что е...   Sep 2 2008, 09:58
|- - =GM=   Цитата(SasaVitebsk @ Sep 2 2008, 08:58) В...   Sep 2 2008, 12:17
- - SasaVitebsk   В массовых изделиях, совершенно обосновано максима...   Sep 2 2008, 20:29


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:37
Рейтинг@Mail.ru


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