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

 
 
> Обработка прерываний в Linux
GMavr
сообщение Jul 22 2008, 16:26
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 21-06-04
Пользователь №: 79



Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14.

Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая.

Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить?

Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amw
сообщение Jul 22 2008, 17:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(GMavr @ Jul 22 2008, 19:26) *
Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14.

Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая.

Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить?

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

Ничего удивительного и необычного.
1. Linux не реалтайм ОС.
2. Подавляющее большинство драйверов, использующих прерывания (последовательный порт например) используют конструкцию
Код
spin_lock_irqsave(lock, flags);
выполнение действий.
spin_lock_irqrestore(lock, flags);

И именно для запрета прерываний.
3. Есть еще lock_kernel().


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post



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

 


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


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