Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переделка драйвера для SMP  (Прочитано 10352 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
dimm
Гость
« : 16-08-2007 07:41 » 

Был драйвер в стиле NT, обслуживал самодельную ISA-плату (не PnP) с портами и обработкой прерываний.
Потом он был переведен без изменений в XP, т.е. остался в стиле NT. Всё работало.

Теперь грозит переход на индустриальный компьютер с двухьядерным процессором.
Что нужно учесть, для адаптации этого драйвера под SMP? В нынешнем варианте я так понимаю он работать не будет?

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-08-2007 13:08 » 

так сразу сложно сказать... может и заработает)
смотря как сделан был...
по мелочи - надо ISR заблокировать от паралельного выполнения (спинлоками, либо указанием affinity mask при захвате). если есть.
Главное - блокировка одновременного доступа к общим данным... а это уже от конкретики зависит.

Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
dimm
Гость
« Ответ #2 : 22-08-2007 05:24 » 

Спасибо за ответ!
Буду пробовать позже - пока новый комп не приехал еще. Но за советы про ISR спасибо.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 23-08-2007 08:11 » 

вообще от специфики зависит... если прерывания раз в минуту а обработка ISR за один такт- гарантия что паралельных не будет)))
а вот IOCTL и прочие процессы надо отдельно смотерть...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
dimm
Гость
« Ответ #4 : 23-08-2007 11:32 » 

Хм, прерывания идут с частотой 24.4 Гц, в процедуре ISR выполняется пересылка 6 кБ данных во внешнее устройство по параллельному интерфейсу.
А IOCTL и прочее было сделано без учета SMP точно, т.к. я сам писал этот драйвер.
Значит, я так понимаю, нужно спинлоками защитить ISR и обработку IOCTL? Или еще что-то?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 23-08-2007 11:55 » new

в процедуре ISR выполняется пересылка 6 кБ данных во внешнее устройство по параллельному интерфейсу.
хм... пересылка 6кБ - выполняется без ожиданий, командой типа __asm outsb/w/d dx, m32?
тогда скорее всего пройдет и так... 20Гц не та скорость... 150кБ/сек - копейки...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
dimm
Гость
« Ответ #6 : 23-08-2007 12:29 » 

Делал всё по примерам NTDDK 4.0, пересылка идет макросом WRITE_PORT_UCHAR.
Вкратце вся ISR состоит из:
Код:
pFrom = (FREQ_STRUCT *)extension->pAdr;
for(i=0; i<2048; i++) {
// средний байт в 0-й порт
 WRITE_PORT_UCHAR((PUCHAR)((ULONG)extension->PortBase + 0x00),(UCHAR)pFrom->byte_med);
// старший байт в 1-й порт
 WRITE_PORT_UCHAR((PUCHAR)((ULONG)extension->PortBase + 0x01), (UCHAR)pFrom->byte_hi);
// младший байт во 2-й порт
 WRITE_PORT_UCHAR((PUCHAR)((ULONG)extension->PortBase + 0x02), (UCHAR)pFrom->byte_lo);
 pFrom++;
}
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 23-08-2007 12:49 » 

скорее всего прокатит. не думаю что это занимает больше 40мс)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
dimm
Гость
« Ответ #8 : 23-08-2007 13:39 » 

Вся обработка прерывания занимает около 10-15мс, никак не 40, иначе внешнее железо неправильно работало бы.

Хорошо, успокоили, дождусь, когда всё будет готово, тогда потестю.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 24-08-2007 08:36 » 

вообще то 10-15 это дофига... это настолько дофига что я бы перенес все на DPC...
думаю вы на порядка на три ошибаетесь)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines