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

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

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 28 2008, 20:23
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(zltigo @ Aug 28 2008, 22:40)  INT0 и так разрешено, а запретить нужно таймерные и прочие, кроме INT0, иначе они будут тоже прерывать текущее. Как правило, таймерные приходят с определённой периодичностью. Периодичность вполне высчитывается. Если их период превышает означенный период (4мс), то достаточно просто разрешить прерывание в таймерных обработчиках. Возможность 3 вложенных - не проблема. Это лишь незначительно увеличит время реакции на прерывание. Хотя здесь надо учитывать объём контекста для этих прерываний (при написании на Си). Важно также чтобы не использовались совместные переменные в прерываниях. Также необходимо увеличить размер стека (что естественно) Цитата Если их несколько, то их частота уже не имеет значения, ибо могут перекрыватся. Нескольким подряд INT0 просто вообще хватит времени, если между ними вклинится 64 такта таймера. INT0 потеряется при обработке предыдущего INT0. Не совсем понятно. Лишь бы не пришли одинаковые прерывания. То есть необходимо чтобы суммарное время обработки всех прерываний было меньше (с запасом) чем период найменьшего из прерываний. Есть ещё ограничения. Столкнулся недавно. Нельзя так обрабатывать те прерывания, флаг которых не сбрасывается автоматически при входе в прерывание. Либо надо их запрещать перед разрешением. Например при обработке USART_UDRE.
|
|
|
|
|
Aug 28 2008, 20:46
|

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

|
Цитата(SasaVitebsk @ Aug 28 2008, 22:23)  Это лишь незначительно увеличит время реакции на прерывание. В этом и проблема, ибо хотят обрабатывать прерывания с частотой в 250KHz тут уже каждый такт для AVR становится значительным. Цитата(defunct @ Aug 28 2008, 22:35)  И откуда у таймера будет некратный период. Я что,не имею права запустить таймер, напимер, на 1000 и 10001 тик? Или любые другие нацело не деляющиеся...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 28 2008, 20:54
|

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

|
Цитата(zltigo @ Aug 28 2008, 23:46)  В этом и проблема, ибо хотят обрабатывать прерывания с частотой в 250KHz тут уже каждый такт для AVR становится значительным. Именно, но необходимое и достаточное условие для того чтобы не терять события частоты F это: A ) обрабока события должна происходить строго быстрее 1/F. B ) Время между возникновением события и входом в обработчик должно быть сторого меньше 1/F. Вот от этого и плясать. "A" никак не зависит от обработчиков других прерываний. "B" зависит от обработчиков других прерываний и может быть достигнуто двумя путями - 1)разрешением прерываний внутри левых обработчиков 2)сокращением латентности обработчиков. Вот собсно и все. Все это легко считается по крайней мере для AVRки, т.к. кол-во тактов на обработчик известно, приоритеты обработчиков при одновременном возникновении нескольких прерываний - известны. Цитата Я что,не имею права запустить таймер, напимер, на 1000 и 10001 тик? Или любые другие нацело не деляющиеся... Имеете право конечно, но для простоты расчетов мы возмем минимальный период (или макс возможную частоту).
|
|
|
|
Сообщений в этой теме
PhX Приоритет прерываний Aug 28 2008, 16:53   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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|