Numega Driver Studio
Господа, а нет-ли случаем у кого дистрибутива Numega Driver Studio (ежели мне не изменяет память - где-то 25 метров в архиве будет).
И ежели есть, не могли-бы вы совершить добрый поступок и поделиться сим нужным продуктом? Шибко надо - а где сидюк искать (и есть ли он вообще) незнаю.
И еще один вопрос, уже касаемо драйверов.
Ежели я ни разу не ошибаюсь, дрова обладают большими правами и приоритетами, чем приложения 3-го кольца.
А не подскажет-ли кто-нибудь, сколько системных тиков выделяется системой на работу драйвера?
Всем добрый день!
Господа, а нет-ли случаем у кого дистрибутива Numega Driver Studio (ежели мне не изменяет память - где-то 25 метров в архиве будет).
И ежели есть, не могли-бы вы совершить добрый поступок и поделиться сим нужным продуктом? Шибко надо - а где сидюк искать (и есть ли он вообще) незнаю.
Куда класть? Давай FTP
И еще один вопрос, уже касаемо драйверов.
Ежели я ни разу не ошибаюсь, дрова обладают большими правами и приоритетами, чем приложения 3-го кольца.
А не подскажет-ли кто-нибудь, сколько системных тиков выделяется системой на работу драйвера?
Не корректный вопрос.
1. Интервалы времени выделяются не процессам, и т.п., а потокам.
2. Драйвера работают на различных уровнях. Наиболее распространенные PASSIVE_LEVEL и DISPATCH_LEVEL.
Куда класть? Давай FTP
Не корректный вопрос.
1. Интервалы времени выделяются не процессам, и т.п., а потокам.
2. Драйвера работают на различных уровнях. Наиболее распространенные PASSIVE_LEVEL и DISPATCH_LEVEL.
Попробую пояснить:
Задача в принципе простая. Мне нужно реализовать отправку сигналов в LPT порт с частотой от 40 КГц и выше.
Начнем с того что команда out под NT вообще запрещена на уровне приложений - так что все это нужно пихать в дривер.
Так вот. По поводу отправки с такой высокой частотой. Нарыл разных там примеров таких высокоразрядных таймеров. Реализовал. Все в конечном итоге сводится к команде rdtsc. ПРИБЛИЗИТЕЛЬНО все это работает - правда сигнал гнал, создавая в приложении отдельный поток с приоритетом THREAD_PRIORITY_HIGHEST.
Так вот.
Сигнал гонится - но возникает одна неувязочка!
rdtsc считает тики процессора - а процессы имеют привычку переключаться между собой - иногда на время большее, нежели требуемый интервал между отправкой сигнала. А так как интерфейс нагружен графикой (надо), то эти проскоки еще увеличиваются - и в результате частота начинает плавать (не шибко в больших диапазонах но все-же).
Так вот, по этому я и хотел узнать - сколько выделяется тиков на работу одного драйвера? Ведь они-же между собой тоже должны делиться временем! Или нет? Вот именно это и хотел узнать.
FTP шника щас у меня нету. Попробую поискать.
Попробую пояснить:
Задача в принципе простая. Мне нужно реализовать отправку сигналов в LPT порт с частотой от 40 КГц и выше.
Начнем с того что команда out под NT вообще запрещена на уровне приложений - так что все это нужно пихать в дривер.
Так вот. По поводу отправки с такой высокой частотой. Нарыл разных там примеров таких высокоразрядных таймеров. Реализовал. Все в конечном итоге сводится к команде rdtsc. ПРИБЛИЗИТЕЛЬНО все это работает - правда сигнал гнал, создавая в приложении отдельный поток с приоритетом THREAD_PRIORITY_HIGHEST.
Так вот.
Сигнал гонится - но возникает одна неувязочка!
rdtsc считает тики процессора - а процессы имеют привычку переключаться между собой - иногда на время большее, нежели требуемый интервал между отправкой сигнала. А так как интерфейс нагружен графикой (надо), то эти проскоки еще увеличиваются - и в результате частота начинает плавать (не шибко в больших диапазонах но все-же).
Так вот, по этому я и хотел узнать - сколько выделяется тиков на работу одного драйвера? Ведь они-же между собой тоже должны делиться временем! Или нет? Вот именно это и хотел узнать.
FTP шника щас у меня нету. Попробую поискать.
На DISPATCH_LEVEL никто никому ничего не должен. :D
Поэтому рекомендуют:
Interrupt disable should not exceed 100 microseconds nor peak over 200 microseconds in any 1-millisecond interval. In WDM, the interrupt service routine (ISR) should not run at priority above DISPATCH_LEVEL for more than 100 microseconds in any 1 millisecond interval.
Never allocate memory from paged pool, or access memory in paged pool, while running at IRQL >= DISPATCH_LEVEL. It is a fatal error.
Never wait on a kernel dispatcher object for a nonzero interval at IRQL >= DISPATCH_LEVEL. It is a fatal error.
Never call any function that causes the calling thread to wait directly or indirectly while executing at IRQL >= DISPATCH_LEVEL. It is a fatal error.
и т.д.
Я как-то писал дрова под LPT для программирования через него внешнего контроллера. Там были жесткие требования по временным интервалам. Могу выслать код, но не принимай этот код, как пример хорошего программирования драйверов, т.к. это по сути был мой первый серьезный опыт в этой области.
Driver Studio для него не требуется, только DDK. Я вообще не советую использовать Driver Studio для генерации драйверов. Это как VCL в Borland Builder-е, огромные размеры и куча багов.
Я как-то писал дрова под LPT для программирования через него внешнего контроллера. Там были жесткие требования по временным интервалам. Могу выслать код, но не принимай этот код, как пример хорошего программирования драйверов, т.к. это по сути был мой первый серьезный опыт в этой области.
Driver Studio для него не требуется, только DDK. Я вообще не советую использовать Driver Studio для генерации драйверов. Это как VCL в Borland Builder-е, огромные размеры и куча багов.
Пришли исходники - ежели не трудно! Буду весьма признателен! Мне в плане ознакомления - все равно ведь логику свою прошивать придется. Кидать можно на мыло - [email]begemot_cat@mail.ru[/email].
Теперь хучь чего-то начинает проясняться :)
Пришли исходники - ежели не трудно! Буду весьма признателен! Мне в плане ознакомления - все равно ведь логику свою прошивать придется. Кидать можно на мыло - [email]begemot_cat@mail.ru[/email].
Теперь хучь чего-то начинает проясняться :)
можно мне тоже примерчик? на [email]xelos@front.ru[/email]