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

 
 
> Приоритет прерываний, и прерывание прерываний
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
Ответов
zltigo
сообщение Aug 28 2008, 17:11
Сообщение #2


Гуру
******

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



Цитата(PhX @ Aug 28 2008, 18:53) *
...как

Поскольку никакой аппаратной поддержки ни вложенности, ни приоритетов у AVR нет, то только руками - при входе в прерывания запретить индивидуально таймерные и затем поднять контроллеру флаг I автоматически сброшенный при входе в обработчик. Не забыть породелать обратную оперрацию при выходе. Это все лишние такты и критические секции, что для 250KHz-64такта не подарок.... Легко можете пролететь.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smac
сообщение Aug 28 2008, 19:28
Сообщение #3


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

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(zltigo @ Aug 28 2008, 21:11) *
Поскольку никакой аппаратной поддержки ни вложенности, ни приоритетов у AVR нет, то только руками - при входе в прерывания запретить индивидуально таймерные и затем поднять контроллеру флаг I автоматически сброшенный при входе в обработчик. Не забыть породелать обратную оперрацию при выходе. Это все лишние такты и критические секции, что для 250KHz-64такта не подарок.... Легко можете пролететь.

По-моему, в ваш ответ вкралась некоторая неточность, не сочтите за наглость. Сам подход, конечно единственно правильный, но у автора темы задача прерывать не внешнее INT0 прерывание, а наоборот таймерные, поэтому нужно при входе в таймерные прерывания разрешать прерывание от инт0 вскинуть флаг разрешения общих, а вот в обработчике инт0 ничего делать по идее не нужно. Конечно, при таком подходе есть вероятность "пролететь" таймерные прерывания, во время обработки инт0.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 28 2008, 19:40
Сообщение #4


Гуру
******

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



Цитата(smac @ Aug 28 2008, 21:28) *
поэтому нужно при входе в таймерные прерывания разрешать прерывание от инт0 вскинуть флаг разрешения общих

INT0 и так разрешено, а запретить нужно таймерные и прочие, кроме INT0, иначе они будут тоже прерывать текущее.


Цитата(defunct @ Aug 28 2008, 21:28) *
Если интервалы между таймерными прерываниями достаточно большие...

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


Цитата(defunct @ Aug 28 2008, 21:28) *
Если латентность каждого из них в отдельности будет меньше 64 тактов, то гарантированно ни один INT0 не потеряется.

Нескольким подряд INT0 просто вообще хватит времени, если между ними вклинится 64 такта таймера. INT0 потеряется при обработке предыдущего INT0.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 28 2008, 19:47
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Aug 28 2008, 22:40) *
Если их несколько, то их частота уже не имеет значения, ибо могут перекрыватся.

вот и надо считать с учетом что их несколько.
Напр. INT0 занимает 48 тактов на обработку (период - 64 такта) - 75% ресурса проца.
T1 - 100 тактов (период - 10K тактов)
T2 - 200 тактов. (период - 10K тактов)

считаем.
гарантированное время для обработчика T1 (при любых раскладах он получит столько времени до наступления следующего прерывания) - 10K * 0.25 - 200 = 2300 тактов, 2300 > 100 все Ок.
гарантированное время для обработчика T2 соответвенно:
10K * 0.25 - 100 = 2400 (> 200).

Не нравится одинаковый период, попробуем для разных:
INT0 - 48 тактов (75%).
T1 - 100 тактов (период - 10K тактов)
T2 - 200 тактов. (период - 1K тактов)

гарантированное время для обработки T1 = 10K * 0.25 - (10K/1K * 200) = 2500 - 2000 = 500 (> 100).
для T2 без изменений 2400.
И здесь все Ок.

Цитата
Нескольким подряд INT0 просто вообще не хватит времени, если между ними вклинится 64 такта таймера.

хватит если как сказано выше не 64такта таймера, а гарантировано меньше 64-х (напр 63).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 28 2008, 20:02
Сообщение #6


Гуру
******

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



Цитата(defunct @ Aug 28 2008, 21:47) *
вот и надо считать с учетом что их несколько.

Так считайте. Два с некратными периодами и что там будет при прерывании одного другим.
Цитата
хватит если как сказано выше не 64такта таймера, а гарантировано меньше 64-х (напр 63).

Разумеется нет. Думайте, сколько времени остается обработчику INT0 после Ваших 63 тактов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 28 2008, 20:35
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Aug 28 2008, 23:02) *
Так считайте. Два с некратными периодами и что там будет при прерывании одного другим.

так посчитал. что неустраивает в расчетах.
И откуда у таймера будет некратный период.

Цитата
Разумеется нет. Думайте, сколько времени остается обработчику INT0 после Ваших 63 тактов.

Очевидно - все оставшееся время. Таймер не сможет прервать INT0.
Самое главное не пропустить ни одного INT, - влететь в обработчик INT0 до того как произойдет следующий INT0. Все остальное фиолетово, при условии что обработка самого INT0 занимает тоже строго меньше 64 тактов.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 28 2008, 20:54
Сообщение #8


Гуру
******

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



Цитата(defunct @ Aug 28 2008, 22:35) *
...при условии что обработка самого INT0 занимает тоже строго меньше 64 тактов.

Нет. третьи сутки идут "расстрельные" прерывания каждое длится по 63 такта. Периодически приходят несколько таймерных по 63 такта. Вопрос, что будет, если
1. таймерные не прерываются.
2.Если таймерные прерываются, но естественно, для программной реализации вложенности и приоритетов требуются критические секции.
3. Что-то мне подсказывает smile.gif что Автор поднял вопрос не уложив программу в несколько тактов smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 28 2008, 21:10
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Aug 28 2008, 23:54) *
Нет. третьи сутки идут прерывания INT0 каждое длится по 63 такта. Периодически приходят несколько таймерных по 63 такта. Вопрос, что будет, если
1. таймерные не прерываются.

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

Цитата
2.Если таймерные прерываются, но естественно, для программной реализации вложенности и приоритетов требуются критические секции.

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

Цитата(zltigo @ Aug 28 2008, 23:54) *
3. Что-то мне подсказывает smile.gif что Автор поднял вопрос не уложив программу в несколько тактов smile.gif

Да - много неизвеcтных в его задаче.
Нужно знать как минимум периоды T1, T2 и хотя бы приблизительное время обработки каждого из трех событий. Тогда можно советовать наверняка.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 28 2008, 21:14
Сообщение #10


Гуру
******

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



Цитата(defunct @ Aug 28 2008, 23:03) *
очевидно таймерные будут курить бамбук, т.к. INT0 приоритетнее.

Поскольку Вы начали строить всевозможные предположения, то я специально в вопросе убрал INT0 smile.gif,
но Вы успели отцировать первоначальный copy-paste вариант Ж(.
Цитата
Требуются, но можно обойтись и без них, если есть гарантия, что повторный вход в этот же обработчик никогда не успеет произойти.

Таких гарантий при нескольких источниках прерывания нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 28 2008, 21:26
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Aug 29 2008, 00:14) *
Поскольку Вы начали строить всевозможные предположения, то я специально в вопросе убрал INT0 smile.gif,
но Вы успели отцировать первоначальный copy-paste вариант Ж(.

не суть важно, по условию задачи нам нужно не пропустить ни одного INT0. О всех остальных автор умолчал ;> Преполагаем что они не важны и их пропускать можно.
Цитата
Таких гарантий при нескольких источниках прерывания нет.
Заблуждение. И Вы сами это прекрасно понимаете, но не хотите сдаваться smile.gif
Гарантии достигаются за счет опять же двух составляющих:
- минимальный период;
- макс время обработки
каждого прерывания.

Если время обработки == 0, гарантия 100%.
Если период стремится к бесконечности - гарантия 100%.

ну а для всех остальных случаев гарантии оцениваются/считаются.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PhX   Приоритет прерываний   Aug 28 2008, 16:53
||- - 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
- - bzx   Цитата(PhX @ Aug 28 2008, 20:53) Прерыван...   Aug 29 2008, 17:52
|- - zhevak   Взгляд со стороны. Ибо в жаркой дискусси я неучвст...   Aug 29 2008, 18:48
- - 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 Текстовая версия Сейчас: 20th July 2025 - 20:00
Рейтинг@Mail.ru


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