Rulik
Помогающий
Offline
|
|
« : 08-11-2005 03:32 » |
|
Добрый день. Ситуация такая: В режиме ядра сиди драйвер, он через определенные интервалы времени должен вызывать код из User режима. Как сие можно сделать и вообще возможно ли это. Небходимо ето для того чтобы обойти диспетчер, А то в случае с большой нагрузкой на процессор, он может отобрать время у потока. В общем по русски надо чтоб код из User-mode вызывался в реальном времени. И задержки от момента возникновения события до его обработки было минимальным и фиксированным. А может я слишком много хочу от винды?
|
|
|
Записан
|
|
|
|
IRP
Постоялец
Offline
|
|
« Ответ #1 : 08-11-2005 08:05 » |
|
Врядли это тебя спасет. Вся юзер память расположена в PagedPool области, что не дает возможности ею пользоваться на высоких уровнях IRQL. Чтобы оградить себя от шидулинга распределения времени нада поднять свой IRQL до DISPATH_LEVEL, на котором работа со страничной памятью запрешенна. Как вариант перенеси критическую работу в драйвер и там поднимай уровень до DISPATH_LEVEL и пользуйся NonPagedPool либо из юзер мода используй RealTime приоритет.
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #2 : 09-11-2005 02:22 » |
|
Дело в том, что задача решена в UserMode с приоритетом TimeCritical, но при нагрузке на процессор все падает. Т.е. временные интервалы расползаются. Даже если само окно программы начинаешь таскать по рабочему столу, то интервалы начинают плавать приблизительно от -10..120мс до +8..45мс при допустимом отклонении +-1мс. Вот я идумаю как извратится. Перенести код в драйвер сложновато. Я работаю с микрухой FT245BM а у нее свой драйвер значит прийдется как-то к нему аттачится, и выяснять стандартные пакеты. Т.к. драйвер идет еще и с DLL UserMode которая всем заправляет.
Может есть другие идее?
|
|
|
Записан
|
|
|
|
IRP
Постоялец
Offline
|
|
« Ответ #3 : 09-11-2005 08:56 » |
|
Врядли в User_Mode получится что то выжать. Очень много всего выполняется в системе на уровне выше PASSIVE_LEVEL, отложенные процедуры, обработчики прерываний и.т.д. Вариант хоть немного выжать для себя времени это поднять уровень до DISPATH_LEVEL и оставаться там в критические моменты времени - но в этом случае, если мы там долго задержимся, мы как бы останавливаем планировщик потоков. Если машина двух и более процесорная, то все не так уж плохо. Windows это система не реального времени - так что от нее это получить легальным способом не выйдет. Как вариант раскопать dll - посмотреть какие IOCTL команды отправляются драйверу микрухи и отправлять их из драйвера. !! НО если наш уровень будет DISPATH_LEVEL а микрушный драйвер это не учитывает - то возможен BSOD! Кстати если идет интенсивный обмен данными с драйвером и юзер модом, очень много процесорного времени тратится на переход из юзер мода в кернел. Можно раскопать спецификацию микрухи, ее порты, адреса I/O и самому написать драйвер по обмену информацией - это не проше, но зато будет работать на кринических участках кода.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #4 : 09-11-2005 11:53 » |
|
Дело в том, что задача решена в UserMode с приоритетом TimeCritical, но при нагрузке на процессор все падает. Т.е. временные интервалы расползаются. Даже если само окно программы начинаешь таскать по рабочему столу, то интервалы начинают плавать приблизительно от -10..120мс до +8..45мс при допустимом отклонении +-1мс.
что ж вы хотите от виндов то...) по умолчанию квант времени который отводится потоку - 6=60мс, если он не освододит его раньше, или если не появятся потоки с большиам приоритетом. и это на пассив-левел. а вы хотите еще и окошки перетаскивать!... ))) не хватит никакой производительности. кстати если в потоке функция ожидания любого объекта стоит- в случае успешного выполнения вычитает единицу из кванта...- учесть стоит. а если поток таймкритикал - вообще остаток кванта сбрасывает) ... это я только что книжек умных начитался) Руссиновича. как раз по этой теме) можете еще попробовать переключить систему на использование длинных квантов (=12), но наврядли это поможет... кстати FT245BM - это кто такой?)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
dachny
Гость
|
|
« Ответ #5 : 09-11-2005 12:08 » |
|
>>кстати FT245BM - это кто такой?) Это visualbasic от электороники г..но это вот
сначала хватаются за халяву типа и дрова писать не надо и фирваре к контролеру и ввобще даже думать не надо как тама USB работает а потом начинаются грабли вот такого вот плана причем в 95 процентов случаев
И если грабли удается обойти то получаются уродцы как в програмировании так и в схемотехнике с нулевой производительностью с ужором проца в 100% с глюками причем не только со своими обсолютно не сопровождаемое
а надо то было ... ладно не буду
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #6 : 10-11-2005 02:37 » |
|
>>кстати FT245BM - это кто такой?) Это visualbasic от электороники г..но это вот
А чем тебе микруха ненравится? Ты можешь сделать лучше? И давайте не будем кричать что вон то лажа, а это круть. Тема не об этом. Микруха работает просто замечательно и поддержка неплохая. (Просто надо уметь работать) А на тему: сначала хватаются за халяву типа и дрова писать не надо и фирваре к контролеру и ввобще даже думать не надо как тама USB работает а потом начинаются грабли вот такого вот плана причем в 95 процентов случаев
И если грабли удается обойти то получаются уродцы как в програмировании так и в схемотехнике с нулевой производительностью с ужором проца в 100% с глюками причем не только со своими обсолютно не сопровождаемое
Я работаю в НПО "Автоматика" и люди здесь имею ни одну докторскую. И ты считаешь неправильно, что они пришли к выводу, что незачем заморачивать голову и разбиратся в тонкостях реализации USB. Я рад, что ты разбираешся в тонкостях USB. И насчет загрузки процессора, приложение съедает мене 1% от проца. А грабли везде разложены. И форумы призваны помогать их обходить. И еще раз повторюсь ТЕМА не о том ЧТО Г..НО, а что нет!!! Если кого обидел, приношу свои извинения. Просто хочется видеть реальные ответы по теме, а не очередную демогогию. Которой полны форумы в инете и от которой уже тошнит!.
|
|
« Последнее редактирование: 10-11-2005 02:41 от Rulik »
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #7 : 10-11-2005 06:50 » |
|
>>А чем тебе микруха ненравится? Если бы они задокументировали ендпоинты что позволило бы самому к ней дрова написать цены бы ей не было
>>Ты можешь сделать лучше? Для конкретной задачи я всегда сделаю лучше чем это будет сделано на FT245BM
>> Я работаю в НПО "Автоматика" и люди здесь имеют не одну докторскую. >>И ты считаешь неправильно, что они пришли к выводу, что незачем заморачивать голову и разбиратся в тонкостях реализации USB А зачем разбираться в тонкостях как работают КОНКРЕТНЫЕ ВЕЩИ. Не барское ето дело. Докторские строчить ето куда прикольние.
>> И насчет загрузки процессора, приложение съедает мене 1% от проца. А разве не было разговоров про приоритеты TimeCritical
>> Просто хочется видеть реальные ответы по теме Переехать на документированный контроллер и написать к нему фирмваре и дров
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #8 : 14-11-2005 02:16 » |
|
Dachny. Я не говорю, что у меня не хватает процессора. Мне нужны интервалы времени с точностью до 1мс. Просто таймер который доступен из юзер моде слишком не стабилен. И WaitFor...Object(...) может вернуть управление как на 1-5 мс раньше, а может и на 1..20 мс позже. Вот в чем проблема. Вот я и пытаюсь написать драйвер, который даст стабильный таймер. Отсюда и ворос "Можно ли из Kernel Mode вызывать код в User Mode?" А может есть способы и попроще сделать ето (высмысле таймер).
|
|
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #9 : 14-11-2005 08:13 » |
|
>>Отсюда и ворос "Можно ли из Kernel Mode вызывать код в User Mode?"
скажу честно МОЖНО. Из кенела можно запустить user mode процесс например
и добавлю вот ету проблему: >> Мне нужны интервалы времени с точностью до 1мс ЭТО НЕ РЕШИТ
|
|
|
Записан
|
|
|
|
npak
|
|
« Ответ #10 : 14-11-2005 08:13 » |
|
Rulik,
дело не в таймере, а в планировщике. Windows - не realtime система, поэтому пользовательский поток пробуждается планировщиком только в свободное от работы время. Даже если таймер будет срабатывать с наносекундной точностью, управление обычному потоку будет передано не мгновенно, а с задержкой в 1-20 мс или более (на сильно нагруженной системе). Интервал между срабатыванием таймера и пробуждением потока можно сократить, подняв приоритет ждущего потока.
Более точные срабатывания таймера (по слухам), реализованы в timer queue. CreateTimerQueue создаёт очередь таймеров, CreateTimerQueueTimer создаёт таймер, который будет вызывать функцию пользователя в специальном потоке с заданным интервалом времени.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #11 : 14-11-2005 09:58 » |
|
CreateTimerQueueTimer - НЕ поможет. точности 1 мс в юзермоде добится ИМХО нереально, - рано или поздно произойдет вытеснение потока на неоределенное время, и в этот момент будет пауза на порядки больше 1мс. а вытеснение потока произодйет непременно... выход который могу предложить - если для готового драйвера расписаны его IOCTL-ы - писать драйвер фильтр, который будет заниматься обработкой и вызывать IOCTL готового драйвера... - это с заданной точностью можно попробовать реализовать, да и то - я бы не гарантировал... и даже на DISPACH_IRQL!!!, который у вас будет от системного таймера - он тоже с точностью до 1мс задается, а дальше +/- трамвайная остановка... (при том что потоки Диспач- не вытесняются переключением потоков...) Кроме того - не факт что IOCTL готового драйвера можно вызывать на DISPACH_IRQL! скорее всего только на PASSIVE_IRQL - когда может так же произойти переключение потоков...
PS вызов юзермоде... где то читал об етом... ща вспомню... напишу...
PPS наврал!!! - 100нс таймер драйвера... - может сработать... если готовый драйвер на DISPATCH возможно вызвать. что вряд ли. кстати... а кто запрещает код юзера вызывать? можно влоб попробовать... тока обязалово на PASSIVE_IRQL.
|
|
« Последнее редактирование: 14-11-2005 10:16 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
npak
|
|
« Ответ #12 : 14-11-2005 10:17 » |
|
Есть ещё Windows Multimedia Timers В MSDN сказано, что предельное разрешение 1 миллисекунда
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #13 : 14-11-2005 10:25 » |
|
там не сказано что оно гарантированное и с вызовом юзер-моде из кернел напрямую я наверное погорячился
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
dachny
Гость
|
|
« Ответ #14 : 14-11-2005 10:52 » |
|
>> и с вызовом юзер-моде из кернел напрямую я наверное погорячился а как же RtlCreateUserProcess
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #15 : 14-11-2005 11:13 » |
|
RtlCreateUserProcess ? это где вы такой нашли?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
dachny
Гость
|
|
« Ответ #16 : 14-11-2005 11:54 » |
|
>>RtlCreateUserProcess ? это где вы такой нашли? в ntdll ею винда winlogon.exe запускает из кернела между прочим
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #17 : 14-11-2005 14:06 » |
|
классно.... тока я в ДДК ни описания ни определения не обнаружил...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
IRP
Постоялец
Offline
|
|
« Ответ #18 : 14-11-2005 15:20 » |
|
А ты считаешь что ребята из MS в DDK все недокументированные и неэкспортируемые функции включить должны были? Если интересно как работает погляди в серцах винды
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #19 : 14-11-2005 15:57 » |
|
хорошо бы!!!
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #20 : 15-11-2005 02:43 » |
|
Догда неувязока получатся. Ведь библиотека реального времени RTX ставится под винду и работат както!!! (Я бы использовал ее, но ... начальство ... экономия ... и тд и тп)
|
|
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #21 : 15-11-2005 07:51 » |
|
>>Ведь библиотека реального времени RTX ставится под винду и работат както!!! >>(Я бы использовал ее, но ... начальство ... экономия ... и тд и тп)
я думаю для решения Вашей задачи хватит бесплатного DDK и нормально документированного usb контроллера
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #22 : 17-11-2005 02:33 » |
|
2 dachny
А что если перенести критически важный код в драйвер. Его загнать на уровень DISPACH_IRQL и завести таймер KeSetTimerEx, и ждать на етом уровне срабатывание таймера. А в ето время планировщик продолжает свою работу (наверное), таймер сработал я обменялся. И снова стою у таймера. И так в цикле я периодически буду вытеснять планировщик на 10-20мс. Возможно ли такое?
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #23 : 17-11-2005 02:36 » |
|
Может есть вариант через недокументированные функции "поиметь" (да простят меня модераторы) планировщик в шедевре мальчика Билли?
|
|
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #24 : 17-11-2005 05:45 » |
|
>>А что если перенести критически важный код в драйвер иммено так и нужно сделать А именно Перенести весь код реализующий логику работы с устройством (ПОСТРОЕННОМ НЕ НА FTDI А НА НОРМАЛЬНО ДОКУМЕНТИРОВАНОМ КОНТРОЛЛРЕ) в кернел мод, А имменно в драйвер этого устройства
|
|
|
Записан
|
|
|
|
Rulik
Помогающий
Offline
|
|
« Ответ #25 : 17-11-2005 06:38 » |
|
2 dachny Если несложно можешь поделиться на каком контроллере ето можно сделать? Если не трудно кинь на мыло rulik00@bk.ru доки по этому контроллеру.
|
|
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #26 : 17-11-2005 08:43 » |
|
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #27 : 17-11-2005 10:17 » |
|
Гы)))) не было у бабы заботы - купила баба порося) записываюсь в клуб FTDI... ща буду с ней копаться) с такой же... есть отладочный модуль с амтелом DLP-USB245M и наша железка... в ближайшее время посмотрим сего он может а чего нет... будет информация - выскажусь...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Ochkarik
|
|
« Ответ #28 : 29-11-2005 11:55 » |
|
высказываюсь... драйвер родной дравйер эмуляции ком порта - гАвно. (думаю что и библиотека ...х200? - то же самое) можно написать свой на нумеге за пол часа...) но мне наш девайс не дали, времени нет - им хватило и родного, 600кб прокачивает... а отладочный кит - юзать лениво, он сам данные отдавать не умеет) так что мои изыскания откладываются, временно... единственное что сделал - нумеговскую рыбу, на чтение и запись... и те и те запросы проходят без ошибок, но надо мониторить еще поля пришедших пакетов, а для этого источник данных нужен... формат судя по всему примитивнный...один-два байта заголовка что ли плюс данные? но в этом шибко не копался... на опыты ушло часа два неспешной возни) а микруха вроде ничего... драйвера ток Г. но это не у них одних такое) займусь еще как-нибудь... как тока уломаю железячников пилу туда вписать... и индикатор подключить... а мукруха ребятам понравилась в целом...
|
|
« Последнее редактирование: 29-11-2005 12:00 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
|