|
Приоритет прерываний, и прерывание прерываний |
|
|
|
 |
Ответов
|
Aug 30 2008, 08:31
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Дам пару советов. Во первых, код написать таким образом (правда, это для IAR, но для гнуся все остается в силе) Код #pragma vector=INT0_vect __interrupt void INT0_proc(void) { unsigned char t=pos-1; if (PIND&0x01) t+=2; pos=t; }
#pragma vector=TIMER1_OVF_vect __interrupt void T1_proc(void) { unsigned char t; __enable_interrupt(); t=PORTC; t<<=1; if (PORTC&0x08) t=1; PORTC=t; TCNT1 = 0x10000 - 62500 / Frq; } Общая идея в том, чтобы не работать с глобальными переменными, а работать с регистровыми. Например, обработчик INT0 после переделки занимает 27 тактов со всеми входами и выходами (это результат IAR'а). Далее, если Вы боитесь, что в прерывании от переполнения Timer1 возможен второй вход - поставьте его в режим Clear On Compare Match и в OCR1 занесите 1. В результате, после переполнения, произойдет прерывание, а таймер дальше не пойдет, его все время Compare Match будет сбрасывать. Как только Вы занесете в таймер значение больше 1 - опять начнется отсчет.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 31 2008, 22:01
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Rst7 @ Aug 30 2008, 07:31)  Общая идея в том, чтобы не работать с глобальными переменными, а работать с регистровыми. Например, обработчик INT0 после переделки занимает 27 тактов со всеми входами и выходами (это результат IAR'а) Интересно бы взглянуть на код. Хотя по смыслу переменные t, pos должны быть 16-битными, если не 32-битными. У меня для целых (16-битных) на асме получилось 18 тактов. А вообще вывод неутешительный, время выполнения двух прерываний порядка 83 тактов, явно подпадает под расстрельную статью...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Sep 1 2008, 08:07
|

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

|
Цитата(Dog Pawlowa @ Sep 1 2008, 12:36)  Ну не знаю, кто как, но я зарекся делать системы без запаса 50%. Само собой, 250 кГц, для текущего проека, это запас примерно 1000%. 250 кГц были определены среднепотолочным методом, просто с учетом планов на будущее. Реально прерывания от таймера "шлепают" с частотой 12 кГц, а от INT0 с частотой около 30 кГц, причем это тоже, вероятно с запасом.  p.s. А в WinAVR можно результат работы компилятора как в посте Rst7, да и где взять время выполнения команд? Вообщем как можно быстро расчитать время обработки прерывания?
--------------------
Если все, то не я...
|
|
|
|
|
Sep 1 2008, 11:34
|

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

|
Цитата(PhX @ Sep 1 2008, 11:07)  p.s. А в WinAVR можно результат работы компилятора как в посте Rst7, да и где взять время выполнения команд? Вообщем как можно быстро расчитать время обработки прерывания? Проэмулировать прерывание в AVR-Studio. Запускаем отладку, открываем окно дизассемблера. Запускаем выполнение программы. Жмем паузу. убеждаемся что стоим не на команде ®JMP/®CALL/RET. Ставим точку останова на сл. команду. Выставляем условия для возбуждения проверяемого обработчика. Запоминаем показания счетчика циклов в отладчике как C0. жмем "run". считываем показания счетчика циклов как C1. Время выполнения обработчика соответвенно (C1 - C0) + 4 такта макс длинная команда во время выполнения которой произошло прерывание. еще вариант: Открываем дизассемблер в отладчике, ставим break point на вектор интересующего прерывания. Запускаем отладку. Запоминаем C0 когда отладчик остановится, по шагам проходим обработчик прерывания пока из него не выйдем, тогда запоминаем C1. Время работы обработчика будет C1 - C0 + Tcall + 3такта => C1 - C0 + 8 PS: Cycle Counter находится в view->toolbars->processor. Цитата(Rst7 @ Sep 1 2008, 14:07)  Кстати, где вы там нашли 83 такта на все? 27+36, а если сделать через таймерное прерывание через OCR, то еще меньше. Это не я нашел, это =GM= нашел в #46, его спросите  Если меньше тогда вообще никаких вопросов.
|
|
|
|
Сообщений в этой теме
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 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     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 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|