Официальный форум СВД Встраиваемые Системы
23 Апрель, 2024, 18:37:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Время снятия сигнала аппаратного прерывания.  (Прочитано 2118 раз)
LH
Ветеран

Сообщений: 345


« : 07 Октябрь, 2011, 07:32:14 »

Недавно разбирались с работой довольно старой платы АЦП, работающей на ISA-шине по аппаратному прерыванию.

В QNX4.25 работает программа обслуживания этой платы собственной разработки. Обработчик аппаратного прерывания выглядит так:

...
pid_t far handler()
{
return(proxy_int);
}
Т.е никакой работы обработчик не производит, данные из платы вычитывает программа при приходе proxy_int в цикле приема сообщений.


С помощью цифрового осциллографа посмотрели время между возникновением и снятием фронта аппаратного прерывания. Передний фронт формирует аппаратура платы. Задний фронт образуется при снятии запроса прерывания операционной системой.

Результат такой:

в QNX4.25 - примерно 12-15 мкс.

С фирменным драйвером платы АЦП  в WindowsXP SP3 - примерно 4-5 мкс.

Вроде бы ожидалось, что будет наоборот Smiley

Как можно объяснить полученный результат?

Спасибо.
Записан
Олег Большаков
Легенда

Сообщений: 3140



« Ответ #1 : 07 Октябрь, 2011, 07:56:10 »

Первое что приходит в голову -- фирменный драйвер в Windows снимает запрос в обработчике прерывания. Попробуйте делать тоже самое.

Используйте monitor и msgprint, чтобы разобрать ситуацию. Ведь мы не знаем, что ещё делает Ваш цикл приёма сообщений.
Записан
Александр Варварик
Администратор
Легенда

Сообщений: 1353



WWW
« Ответ #2 : 07 Октябрь, 2011, 09:28:22 »

Первое, что приходит в голову, у автора вопроса нет понимания термина "реальное время", очень рекомендую разобраться с этим вопросом.
Второе, приведенный код обработчика всего лишь уведомляет вашу программу о прерывании и как, правильно вы заметили, "данные из платы вычитывает программа при приходе proxy_int в цикле приема сообщений". Невозможно догадаться, что вы делаете в этом цикле и как долго не сбрасываете прерывание, но об этом Вам уже сказали. Я думаю вы понимаете, что proxy посылается процессу, который производит обработку, а следовательно это время в течении которого не происходит обработки прерывания.

Записан

LH
Ветеран

Сообщений: 345


« Ответ #3 : 07 Октябрь, 2011, 10:30:21 »

По приходу proxy_int прикладная программа вычитывает и обрабатывает данные из платы. Эта работа занимает 3-4 миллисекунды, а период между прерываниями
составляет примерно 12 миллисекунд.

Прикладная программа сама не снимает запрос на прерывание...

Работу с контроллером прерываний делает QNX возможно еще до того, как отправляет proxy_int прикладной программе.


Я не знаю как устроен фирменный драйвер платы в Windows, может быть он действительно сам работает с регистрами контроллера прерываний.
Спасибо за пояснение.
Записан
Александр Варварик
Администратор
Легенда

Сообщений: 1353



WWW
« Ответ #4 : 07 Октябрь, 2011, 13:04:10 »

LH, вот вы и ответили на свой вопрос. В вашем случае обработка прерывания состоит из времени реакции системы + время на формирование и доставку proxy + время переключения на Вашу задачу и получение proxy + время обработки в задаче.
Насчет снятия прерывания, надо смотреть спецификации на устройство, может быть оно снимается автоматически после чтения каких-либо данных.
Записан

LH
Ветеран

Сообщений: 345


« Ответ #5 : 07 Октябрь, 2011, 14:13:28 »

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

Если бы так было на самом деле, то опять все печально: программа QNX начинает читать в 4 раза позднее, чем драйвер в Windows. Я запускал программу на очень высоком приоритете, это картину не меняло.

Думаю что запрос снимает все же сама ОС QNX. Как сделано в Windows - опробую узнать у разработчика драйвера и "отпишусь"
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #6 : 08 Октябрь, 2011, 00:17:25 »

Если бы так было на самом деле, то опять все печально: программа QNX начинает читать в 4 раза позднее, чем драйвер в Windows. Я запускал программу на очень высоком приоритете, это картину не меняло.

Ваши выводы видятся мне сомнительными. Во-первых, если мне не изменяет память, драйверы ОС Windows выполняются в контексте ядра и, по мере надобности вольны использовать ISR как им заблагорассудится. Во-вторых, разница между обработкой прерываний в потоке и в ISR действительно может достигать 8мкс+. И это не предел даже для QNX6 (в зависимости от аппаратуры), не говоря уже об ОС общего назначения. Было бы интересно взглянуть на среднюю оценку времени завершения отработки IRQ в потоке Windows. Linux, например, в подобных условиях склонен показывать себя отнюдь не с лучшей стороны (хотя ввиду отсутствия требований РВ ему это можно простить). Также интересны результаты по обработке прерывания именно в обработчике QNX4.

Думаю что запрос снимает все же сама ОС QNX.

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

в QNX4.25 - примерно 12-15 мкс.

С фирменным драйвером платы АЦП  в WindowsXP SP3 - примерно 4-5 мкс.

Просто для справки: тесты проводились на одной и той же машине? И не было ли разделений прерываний?
« Последнее редактирование: 08 Октябрь, 2011, 00:23:28 от Андрей Докучаев » Записан

LH
Ветеран

Сообщений: 345


« Ответ #7 : 08 Октябрь, 2011, 03:38:00 »

Тесты проводились на одной и той же машине с QNX4.25 и Win XP.

Разделения прерываний не было, т.к. на ISA шине их не может быть в принципе ( механизм срабатывания прерывания по фронту, а не по уровню ).
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1075



WWW
« Ответ #8 : 08 Октябрь, 2011, 08:07:39 »

Действительно, упустил момент, что речь идет о шине ISA.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 10 Январь, 2021, 14:34:03