|
Windows и реальное время |
|
|
|
Jun 25 2009, 06:09
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(DMD @ Jun 25 2009, 08:58)  Так там проблема как раз в том, что из аппаратной части - карта сбора данных (то есть не собственная) Не собственная, это хорошо, только "собственные" приходилось видеть сделанные через... "не собственные", они для людей делаются, посему чего-нибудь типа прерываний, DMA, ..., как правило присутствуют. Учите матчасть. Даже если это вдруг действительно огрызок счастья, то 30-50ms это совершенно не время для Windows и в части обработки событий от собственных таймеров.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 27 2009, 05:56
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(DMD @ Jun 25 2009, 09:58)  Так там проблема как раз в том, что из аппаратной части - карта сбора данных (то есть не собственная), поэтому реальное время нужно реализовывать на стороне обрабатывающего ПК (а он работает под ХР)... "Реальное время" в Вашем случае придется реализовывать на уровне драйвера устройства. Не на уровне пользовательской программы. Но плата сбора данных должна для этого предоставить какие-то зацепки - выход прерывания и документацию про это. Если всё закрыто - то драйвер с документацией (или примерами как из программы пользователя можно передать в лрайвер данные дол того, как возникло прерывание). Если ничего нет - проще сделать правильную плату сбора данных. Цитата(DMD @ Jun 24 2009, 23:47)  И ещё: приоритет REALTIME для потока - не поможет? Для потока user mode - не поможет. Во всяком случае, драйвер должен тоже об этом позаботится. Цитата(DMD @ Jun 24 2009, 23:47)  Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области? А попробуйте в "эту область" въехать самостоятельно. Литература и примеры работающих драйверов доступны, за пару месяцев непрерывной работы при наличии пары компютеров и представления об архитектуре операционной системы (и согласии "играть по правилам" которые обязательны при написании kernel-mode программ) можете сделать устраивающее Вас решение (если есть документация на плату с описанием портов и правил работы с ними). И если разработчики предусмотрели прерывания. Что за плата-то?
Сообщение отредактировал Genadi Zawidowski - Jun 27 2009, 06:09
|
|
|
|
|
Jul 10 2009, 15:39
|

Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166

|
Спасибо, ребят. Ща сам покопаю. Плата - дешевая ISA - ACL-8112DG и иже с ней... Спасибо!
--------------------
Все будет хорошо! Я проверял!
|
|
|
|
|
Jul 13 2009, 06:18
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016

|
Цитата(DMD @ Jun 24 2009, 23:47)  Здравствуйте, У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным. Системы - Windows XP/2000/Vista.
Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?
И ещё: приоритет REALTIME для потока - не поможет?
Спасибо. Вообще-то все упирается в то, какие временные интервалы и с какой точностью их надо обеспечивать... Если 30-50 мс то вполне возможно: do { sleep(30) .............(обработка) } while(1) поток в TimeCritical.... Период будет болтаться - 35-40 мс (учитывайте время обраьртки). По опыту знаю - Sleeep(Api32) дает погрешность 1-2 мс+ переключение контекста....(зависит от количества приложений, быстродействия...) Если надо обеспечивать более короткие или более точно временные интервалы, то прерывания. Как правильно Вам подсказывают. В плате это должно быть.
|
|
|
|
|
Jul 15 2009, 03:17
|

Местный
  
Группа: Участник
Сообщений: 344
Регистрация: 3-01-09
Из: УФА
Пользователь №: 42 894

|
Цитата(DMD @ Jun 24 2009, 22:47)  Здравствуйте, У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным. Системы - Windows XP/2000/Vista.
Проблема в том, что все разработки в этой области - платные, причем очень дорогие. Нет ли чего-нибудь бесплатного и простого в этой области?
И ещё: приоритет REALTIME для потока - не поможет?
Спасибо. Процедуры для работы с аппаратурой и синхронизации по времени выполняйте в отдельном потоке с приоритетом REALTIME. Под XP может оеспечить интервал 50-100 микросекунд и лучше. Материал есть на Specosoft и на WASM в "секретах WIN32" . Все на дельфи. Очень занятные статьи. С УСБ в реальном времени из-за буферизации не получится, а вот для встаиваемых плат или для ЛПТ никаких проблем. Естестественно, что эти приемы имеют реальное воплощение в экспериментальных установках безо всяких лишних дров и СИ. Ни о каких деньгах на WASMе не говорят. Свободный сайт для свободных людей. Желаю удачи.
Сообщение отредактировал АНТОН КОЗЛОВ - Jul 15 2009, 03:20
|
|
|
|
|
Jul 15 2009, 07:12
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(DMD @ Jun 24 2009, 23:47)  Здравствуйте, У меня такой вопрос. Я разрабатываю программно-аппаратный комплекс и столкнулся с проблемой: нужно каждые (минимум) 30-50 мс записывать данные на устройство и считывать его тоже с такой же дискретностью. То есть нужно, чтобы мой вычислительный поток получал управление каждые 30-50 мс, но это должно быть гарантированным. Системы - Windows XP/2000/Vista. Windows не RealTime система, так что гарантировать не получится. Цитата И ещё: приоритет REALTIME для потока - не поможет? Поможет, (не забудьте и процессу поставить REALTIME), но гарантию все равно не даст. Кроме того - 30-50мс для User Mode это слишком мало. Смотрите в сторону Device Driver'а (и DPC в нем), но и это не даст 100% гарантию
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|