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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение/запись  (Прочитано 17446 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
student
Гость
« : 25-06-2006 09:19 » 

В драйвере есть функции Read/write . Чтение и запись производится по 1слову(2 байта) по одному и тому же адресу. Надо записать 2^19 слов. Что лучше, делать цикл в пользовательском приложении и запускать много раз(2^19). старые Read/Write. Или переделать Read/write. чтобы можно было записывать массвивы? Но вот размер массива 2^19 слов ,все таки не маленький. Посоветуйте, как лучше?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 26-06-2006 15:00 » 

student, много непонятных или недоговорённых предложений Улыбаюсь , но спиной чувствую, что проще и быстрее записать/прочитать сразу массив

что то вроде

WORD buf[19];
write(buf,19);
Записан

student
Гость
« Ответ #2 : 27-06-2006 11:17 » 

Если массив маленький, то конечно просто. А вот массив у меня большой. И запись такого массива в устройство  занимает у меня минуты 2. Хорошо ли это? Не многовато ли, находится в функции драйвера 2 минуты? может много раз вызвать функцию драйвера, но на какие то милисекунды, чем один раз но на 2 минуты. 2^19 <---------- 2  в 19 степени.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 27-06-2006 14:35 » 

student, отдельный поток пусть пишет... и наверное да, кусками. Чтоб прервать можно было, если что. Но это я в общем, по идее я с драйверами дела не имел. Может там механизмы есть специальные, не знаю
Записан

Ochkarik
Модератор

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

« Ответ #4 : 28-06-2006 08:46 » 

комбинируй
выбри размер блока который пишется порядка ну скажем... 20-50мс.
или... пересылай все данные за раз, но делай асинхронный ввод-вывод - так даже луче наверное.

иначе при вызове Write на каждый блок - у тебя накладных расходов немерянно будет. это ж на каждый вызов IRP проинициализировать да отправить) 2^19 раз....
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
student
Гость
« Ответ #5 : 25-08-2006 11:40 » 

 Теперь все сложнее. Устройство на Isa шине(т. е скорость 8 мб/с). Надо примерно на этой скорости и передавать данные. Посоетуйте как сделать.  Пока у меня каждое слово передается по отдельности , и занимает это у меня очень много времени. Использую буфферизированный ввод/вывод. Пробовал передавать как массив, но похоже что в UserBuffer измеряется совсем не в мб(а может я что то криво делал). Подскажите как сделать, и чтоб скорость ыла достойной, где то 8 мб в с
Записан
Ochkarik
Модератор

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

« Ответ #6 : 26-08-2006 09:31 » new

мегабайт или мегабит?
кстати... в ISA карту данные как пишутся? через мапируемую память, DMA или через порт? через порт - чего то я сильно сомневаюсь что такие скорости пройдут...  8 мегобайт/с?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
student
Гость
« Ответ #7 : 26-08-2006 13:47 » 

Пишу через порт.  Ну пусть не 8 мб/с, ну так , чтобы как можно быстрее, и желательно без DMA(я никогда с ней не сталкивался). А чтобы пользоваться DMA, устройство должно его поддеживать, или DMA можно организовать с любым устройством?
Записан
Ochkarik
Модератор

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

« Ответ #8 : 26-08-2006 15:37 » 

поддержка DMA - аппаратная. ультра простая но аппаратная... (тут задумался а была ли в ISA вообще мапируемая память?)))
ввод потоковый? или блоками?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
student
Гость
« Ответ #9 : 26-08-2006 16:29 » 

Изначально задачу ставили писать/читать. Потом попросили, чтобы можно было писать массив(очень длинный массив). Вот позавчера заикнулись про какой- то поток данных с бешенной скоростью. Не разберешь, что от меня хотят. Но я думаю остановлюсь на вводе очент длинного масива. Как это сделать и еще чтоб быстро было, не подскажешь? Там наверно как-то память надо выделять под длинный массив? Вроде UserBuffer не очень большой.
Записан
Ochkarik
Модератор

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

« Ответ #10 : 28-08-2006 08:14 » 

размер буфера на твое усмотрение...
второй вопрос, доступ к устройству монопольный? пока одно приложение пишет - другое может туда же обращатся?

насчет потокового ввода или блока - вообще говоря две большие разницы, но можно попробовать совместить.
я бы предложил следующий механизм (на первое время). Read/Write процедуры с использованием асинхронного ввода. приложением заполняешь массив и вызываешь Write для драйвера с этим массивом. в драйвере объявляешь полученный MJ_WRITE (или как он там назывался) Pending - то бишь отложенная обработка и запускаешь драйверную нить записи в карту. в этой нити - пишешь полученный массив в карту. по окончанию записи перед выходом из нити - выставляешь завершение MJ_WRITE.
как-то так...
почему нужна нить  - если блок достаточно большой - (запись порядка секунд) - приложение перестанет реагировать на сообщения операционки, что не очень хорошо.
если не больше десятых секунд, можно попробовать всё в вызове Write сделать.

а вообще все очень сильно от специфики задачи зависит...
еще, рекоменндую сначала со скоростью разобраться... напиши банальные обработчики Write и для какого нибудь большого блока данных протестируй с какой скоростью все это в порт уйдет (или что ты используешь для передачи данных). от этого и пляши дальше. если в таком ключе устроит - потом сможешь в дальнейшем в этот же механизм и нить встроить и асинхронный вызов. Размер блока данных - сделай произвольным сразу - в дальнейшем будет проще.
для начала я бы так поступил...
хотя опять же в зависимости от специфики.
удачи)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
maaaaaad
Гость
« Ответ #11 : 01-09-2006 20:57 » 

8мб.с? Сделай на PCI. Я на PCI 30мб/с (просто больше и не надо) на старой 2.2 спецификации с загрузкой процессора 10-15% получаю играючи Улыбаюсь
« Последнее редактирование: 01-09-2006 20:59 от maaaaaad » Записан
student
Гость
« Ответ #12 : 01-09-2006 21:05 » 

Вот щас все брошу и переделаю ISA устройство в PCI.
Записан
maaaaaad
Гость
« Ответ #13 : 01-09-2006 21:09 » 

Очк, была на Isa память мапируемая. Никакой асинхронный в/в не спасет если в/в PIO Улыбаюсь
Записан
maaaaaad
Гость
« Ответ #14 : 01-09-2006 21:10 » 

как определяется что данные записалить в девайс и можно пихать следующие? опрос бита?
Записан
maaaaaad
Гость
« Ответ #15 : 01-09-2006 21:15 » 

а лучше сразу на новой PCIe 5Ghz шиной и c 640мб/с пропускной
« Последнее редактирование: 01-09-2006 21:17 от maaaaaad » Записан
Ochkarik
Модератор

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

« Ответ #16 : 03-09-2006 09:22 » 

Мааааад, почему?
я предлагал исползование асинхронного в/в исключительно чтобы процесс не завешивать на несколько секунд. не люблю когда кнопку нажимаешь и ничего сдеать не можеш потому что окно сообщения не получает.
а так... PIO конечно не для таких целей)
а точно была память? DMA помню пользовал... до 128к помоему? но это почти как PIO былопо скорости. переписывал дрова для L-Card какой то старой.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
maaaaaad
Гость
« Ответ #17 : 03-09-2006 23:04 » 

Короче вопрос не правильный. Отвечу вопросом.
А как тебе больше нравится чтобы комп "завешивался" во время твоего ввода вывода или не завешивался, но ввод-вывод был чуть медленней?

Как я понимаю устроство предоставляет простейший интерфейс вв типа регистр адреса, регистр данных, флаг готовности (не прерывание). Пояснение требуется. Буферизация тоже не поможет, т.к. уменьшение затрат на системные издержки транспортировки данных из приложения в драйвер сожрет поллинг.

смысл улучшать даже такой код котрый ты описал (буферизированный вв по dword) особого смысла нет...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines