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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Вложенные прерываня
zltigo
сообщение Jul 8 2006, 13:08
Сообщение #16


Гуру
******

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



Цитата(Andrew2000 @ Jul 8 2006, 16:00) *
А на мой вопрос про завменитель CLZ кто-нить может ответить?

В ядре ARM7 нет. Если нужна скорость - используйте _сразу_ полную или частичную таблицу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Jul 8 2006, 13:48
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



Цитата(aaarrr @ Jul 8 2006, 17:06) *
Могли бы уже и сами посмотреть список команд для архитектуры V4. Нет там прямой замены.

Знаю, что нет, поэтому (повторю вопрос)

Написал такое, но асм для ARM я почти не знаю, может кто подскажет как оптимизировать?

/* in: r3 - bit mask */
/* out: r1 - int num */
MOV r1,#0
findirqstart:
AND r4, a3, #1
CMP r4, #0
BNE findirqend

ADD r1, r1, #1
MOV r3, r3, lsr #1
B findirqstart
findirqend:


Про таблицу не понял, ну младшую 1 выделить не сложно, а дальше...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 14:00
Сообщение #18


Гуру
******

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



Цитата(Andrew2000 @ Jul 8 2006, 16:48) *
Про таблицу не понял, ну младшую 1 выделить не сложно, а дальше...

Таблица содержащая номер бита или _сразу_ указатель на функцию.
Если предполагается работа с полноразрядным числом, то можно для экономии размера таблицы использовать сокращенную 16, 8 или 4 битную.
0x0 ?
0x1 0
0x2 1
0x3 0
0x4 2
0x5 0
0x6 1
0x7 0
0x8 3
0x9 0
......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 8 2006, 14:12
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrew2000 @ Jul 8 2006, 17:48) *
Написал такое, но асм для ARM я почти не знаю, может кто подскажет как оптимизировать?

Здесь посмотрите. Пост №48 by sergeeff.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 15:22
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Jul 8 2006, 16:38) *
Не коварнее организации вложенных прерываний на любом другом процессоре, но проектировать систему со вложенными прерываниями действительно нужно только в случае крайней необходимости.

Ага. Скажите прямо, проектировать систему в которой будут сидеть на прерываниях более одного периферийного устройства крайне опасно. Бог его знает, что может произойти. И если в моей программе вдруг потребовалось одновременно обрабатывать все 8 capture-входов, PWM, два UARTа, RTC и пару вшешних прерываний, то это ну очень крайняя необходимость, которая у других никогда не возникает. Причём всё бы ничего, если бы capture не требовали максимально быстрого отклика. А так пришлось все прерывания кроме них сделать вложенными. Гордится этим? Слишком мелко как-то. Я бы гордился скажем 20-ю вложенными прерываниями. Если у вас ничего интересного нет по поводу смешивания вложенных и невложенных прерываний и как с помощью их комбинаций можно оптипизировать систему в целом, то можете говорить и дальше что это плохо и неразумно. Многие с удовольствием послушают.

Сообщение отредактировал GetSmart - Jul 8 2006, 15:26


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 15:52
Сообщение #21


Гуру
******

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



Цитата(GetSmart @ Jul 8 2006, 18:22) *
И если в моей программе вдруг потребовалось одновременно обрабатывать все 8 capture-входов, PWM, два UARTа, RTC и пару вшешних прерываний, то это ну очень крайняя необходимость, которая у других никогда не возникает. Причём всё бы ничего, если бы capture не требовали максимально быстрого отклика. А так пришлось все прерывания кроме них сделать вложенными.

Ну и где в описанной системе 8 "УРОВНЕЙ ВЛОЖЕННОСТИ" помянутые в ПЕРВОНАЧАЛЬНОМ посте???
В этом черным по белому описан вариант одного уровня, причем его наличие обосновано, хотя и не понятно, почему-бы не использовать для CAP FIQ, если конечно у Вас не дебильноватый контроллер типа STR7..... В принципе именно армовские IRQ+FIQ без дополнительной организации вложенности достаточно хорошо закрывают массу вариантов применения, в том числе и описанный Вами.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 8 2006, 16:42
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



А вот и не подеретесь unsure.gif smile3009.gif
Zltigo - а чего в ентих STR дебильного ? Просто интересно.. Вкратце, пару слов
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 17:17
Сообщение #23


Гуру
******

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



Цитата(DASM @ Jul 8 2006, 19:42) *
Zltigo - а чего в ентих STR дебильного ? Просто интересно.. Вкратце, пару слов

Там на FIQ вешаются _только_ Watchdog и Timer0 - абсолютно необъяснимая дурь.

Да и в остальном контроллер прерываний там заметно примитивнее :-( по отношению к прочим сделанным производителями чипов по ARMовским лекалам.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 8 2006, 17:38
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



a14.gif Да уж... Мне как-то повезло... Ни разу FIQ не надо было и вложенность тоже... Отсюда гигантская дыра в знаниях =)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 17:38
Сообщение #25


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Jul 8 2006, 21:52) *
Ну и где в описанной системе 8 "УРОВНЕЙ ВЛОЖЕННОСТИ" помянутые в ПЕРВОНАЧАЛЬНОМ посте???

Собственно 8 уровней мне не надо было. Они возникают сами по себе при объявлении любого прерывания __nested. Поэтому если в системе 8 прерываний, 2 простых, 6 __nested, то если никак дополнительно не извращаться, будут именно 7 уровней вложенности. А теперь почему они сделаны __nested. Например, после приёма байта по UARTпрямо в прерывании вызывается драйвер связи, который может долго не возвращать управление, ну скажем до 100 мкс. Всё это время он не мешает никаким прерываниям с более высоким приоритетом. А в некоторых случаях (приём полного пакета) он ещё и взводит софтовое прерывание с более низким приоритетом. Так, что как только это прерывание завершится и если ничего более важного не произойдёт, управление вернётся не в основную прогу, а в софтовое прерывание связи. В нём вообще может управление застрять на десятки миллисекунд. И никто не обломается! Никаких критических секций и прочих извращений для этого применять не нужно вообще. Всё продумано и очень просто в применении. Бояться вложенных прерываний - в лес не ходить.

Насчёт FIQ'ов, я всё прекрасно знал. И всё-таки решил сделать так. Всё написано на Си, никаких макросов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 18:41
Сообщение #26


Гуру
******

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



Цитата(GetSmart @ Jul 8 2006, 20:38) *
Они возникают сами по себе при объявлении любого прерывания __nested.

Когда что-то "возникает само по себе" это не радует :-(. А реально никто не мешает для описанного Вами случая в __nested запретить прерывание одного __nested другим ввиду ПОЛНОЙ НЕНУЖНОСТИ сего действия. И я не назвал-бы это "извращением" - напротив. Если-бы в ARMообразных контроллерах могли назначаться одинаковые приоритеты для разных источников, то это вообще реализовывалось без каких-либо дополнительных телодвижений.
Цитата
А теперь почему они сделаны __nested.

Это не нуждается в дополнительных объяснениях - "надо быстро реагировать на CAP" было вполне достаточно.
Цитата
Бояться вложенных прерываний - в лес не ходить.

Я не призываю их бояться я сам их использую, просто их не надо использовать без необходимости и уж точно бороться с возникающими "сами по себе" побочными эффектами в виде вложенности в местах, где это без надобности. Ибо, как минимум, ведет к дополнительным затратам временных ресурсов и памяти. При этом можно получить неожиданные проблемы (особенно при дописывании через годик-другой) при работе обработчиков с общими ресурсами. При совсем уже чрезмерном увлечении длинными вложенными обработчиками можно и повторный вызов обработчика схлопотать, от которого тоже надо защиту вписывать. В общем оно это надо без крайней необходимости?
Цитата
Насчёт FIQ'ов, я всё прекрасно знал. И всё-таки решил сделать так.

Т.е. для конкретного описанного случая запутаннее и тормознее :-( без явной на то необходимости, а только по причине наличия в EWARM
удобного ключевого слова __nested :-(.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 19:32
Сообщение #27


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата
можно и повторный вызов обработчика схлопотать

Повторный вызов не схлопотать. Запрещаются все приоритеты равные и ниже текущего. А то, что нельзя делать одинаковые приоритеты я и сам жалею. Помню как удобно было на 51/52 процах с трёхуровневой системой прерываний. Быстро и удобно.

В данном вопросе только один минус - лишняя многоуровневость. Но гораздо больше плюсов. Особенно быстрое время реакции на все прерывания с учётом приоритетов. А медленные софтверные прерывания вообще не сделать без вложенности.

Цитата
просто их не надо использовать без необходимости

Не-а. Я бы советовал не использовать обычные прерывания без особой необходимости. Особенно длинные или использующие много стека.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
moonrock
сообщение Jul 8 2006, 19:37
Сообщение #28


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

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



блин, тут все такие умные, один умней другого, аж страшно задавать следующий глупый вопрос smile.gif , но всё же задам: мой компилятор(keil uVision) не знает ключевое слово __nested, чем вы пользуетесь?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 20:02
Сообщение #29


Гуру
******

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



Цитата(moonrock @ Jul 8 2006, 22:37) *
мой компилятор(keil uVision) не знает ключевое слово __nested, чем вы пользуетесь?

1. Я не полльзуюсь Keil.
2. А зачем своими руками выдрав и отпостив из кейловских рекомендаций два макроса спрашивать
чем пользоваться в Keil???

Не сильно страшно?





Цитата(GetSmart @ Jul 8 2006, 22:32) *
Не-а. Я бы советовал не использовать обычные прерывания без особой необходимости. Особенно длинные или использующие много стека.

Без коментариев.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 20:02
Сообщение #30


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я старым (уже) IAR 4.20
Тут где-то выкладывали ссылку на 4.30, а может даже и на 4.40.


Цитата(zltigo @ Jul 9 2006, 02:02) *
Без коментариев.

Без коментариев.

Сообщение отредактировал GetSmart - Jul 8 2006, 20:05


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:21
Рейтинг@Mail.ru


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