Высокочастотный таймер

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Высокочастотный таймер

Сообщение Zer » 04.07.2008 (Пт) 18:37

Есть в компе плата(PCI) восьмиканального ЦАПа. Есть возможность установить некоторое выходное напряжение на ЦАПе по средством прилигающейся библиотеки. Нужно формировать различные сигналы. Частота дискретизации порядка 10 кГц. Есть написанный модуль(подпрограмма) для VB, устанавливающий на выходе оперелённые напряжения.
Суть проблемы: нужно вызывать эту подпрограмму 10000 раз в секунду. Никакими стандартными средствами(таймер, sleep и т.д.) такой частоты не добиться. Как быть?
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.07.2008 (Пт) 20:40

Никак. Читать про архитектуру PC
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 04.07.2008 (Пт) 20:47

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

Эту задачу нужно решать аппаратно или копать в сторону осей реального времени.
Лучший способ понять что-то самому — объяснить это другому.

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 04.07.2008 (Пт) 21:11

Физически это сложновато. Будешь вызывать эту ПП 10000 в секунду, у тебя уйдёт только 30000 тактов только на то что бы вызывать подпрограмму. Это ещё без выполнения того что находится в самой ПП.
Я бы посоветовал написать на асме 1 функцию, которая вызывает 10000 раз твою функцию через loop _metka_, это ещё примерно 20000+(более 3) тактов. А как соединить асм с VB здесь где-то было.

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 21:17

Никак. Читать про архитектуру PC

Может, архитектура ОС? Не вижу проблем с PC.
Допустим ты просто гоняешь цикл с QueryPerfomanceCounter

Можно по подробнее? Исключить посторонние проги можно, т.к. комп будет заниматься только этой задачей. Пока...
Я бы посоветовал написать на асме 1 функцию, которая вызыва

Не катит. Вызовы должны быть равномерно растянуты во времени, а не кучами идти...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Re: Высокочастотный таймер

Сообщение ACiD » 04.07.2008 (Пт) 21:26

Zer писал(а):нужно вызывать эту подпрограмму 10000 раз в секунду.
Zer писал(а):Не катит. Вызовы должны быть равномерно растянуты во времени, а не кучами идти...
Противоречишь, хотя можновставлять пустые такты. Рассчитываешь сколько времени должно пройти, пишешь ПП, которая "тормозит" процессор на N количество тактов и вставляешь вызов этой пп в цикл. Но тогда процессор должен быть очень мощным.
Последний раз редактировалось ACiD 05.07.2008 (Сб) 1:02, всего редактировалось 4 раз(а).

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 21:30

Где это противоречу? Вызываться должно каждые 100 мкс.
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 04.07.2008 (Пт) 21:43

Смотри VB вызывает ПП1 написанную на АСМе
Код: Выделить всё
АСМ:
ПП1
    mov cx, 10000
    метка
        вызов нужной функции
        вызов ПП2
    loop метка
конец ПП1
ПП2
    ;вставляешь сюда всякие
    ;xor, push pop и т. д.
    ;рассчитать тебе придётся самому
    ;сколько будет 100 мкс
конец ПП2

(да кстати эта хрень не работает на 2х, 3х, 4х ядерных процессорах, только на 1 ядерном)
Последний раз редактировалось ACiD 05.07.2008 (Сб) 1:02, всего редактировалось 1 раз.

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 22:23

Глупость. На разных компах 100 мкс занимают разное кол-во тактов. И пока это выполняется вообще ничего не сделаешь. Даже мышью не пошевелишь.
Кстати, в режиме отладки очень неплохо работает в бесконечном цикле. Причём с большей частотой. Так что с ресурсами проблем не будет. Надо только контролировать это...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 04.07.2008 (Пт) 22:37

О разных компах речи не было! Главное чтобы процессоры одинаковые были.(а реализовать можно получив тактовую частоту процессора тынц)
Последний раз редактировалось ACiD 05.07.2008 (Сб) 1:03, всего редактировалось 3 раз(а).

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.07.2008 (Пт) 22:40

Не вижу проблем с PC.
А зря. Процессор это не предназначен для этих задач. Если процессору нужно передать устройству большой объем данных, то этим должен заниматься DMA-контроллер. Иными словами - в архитектуре PC не процессор ждет пока медленное килогерцовое устройство усвоит порцию данных, а медленное устройство само читает, так быстро, как может.
Иначе это будет крайне нерациональным применением процессора.
Если же вернуться в мир windows, то все становится еще хуже.
Мышью ты пошевелить сможешь. А вот избежать переключения нитей(а значит и длительных сбоев в своем генераторе) ты не сможешь.
Ну а что написал ACiD - глупость полная, потому что цикл в VB и ассемблере суть одно и то же.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 22:47

Ну на нерациональность пока пофиг, а вот сбои - это плохо... :(
И что делать?
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.07.2008 (Пт) 22:54

Ну не знаю. Может все таки почитать про архитектуру PC? Или еще раз спросить что делать и послушать очередной бред про ассемблер?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 23:05

Что-то я не пойму...
Данных там почти не передаётся. Смысл использовать DMA? Да и отсылки тоже надо контролировать...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.07.2008 (Пт) 23:21

Если их не передается, то что тогда ты делаешь с раз в 100 мкс?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 04.07.2008 (Пт) 23:25

Там пару байта за раз. Не так и существенно.
И вопрос не в передаче, а как организовать задержку. Лучше б с этим помог... :(
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 05.07.2008 (Сб) 7:15

Он выбрал бред :)
Лучший способ понять что-то самому — объяснить это другому.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.07.2008 (Сб) 10:23

KeDelayExecutionThread даёт сделать задержку от 100 наносекунд. Так что всё возможно, но всё равно нужно контролировать величину новой задержки, оценивая, сколько реально прошло времени.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.07.2008 (Сб) 10:58

keks-n
:idea:
Ты тупо ищешь функции по слову "delay", не включая мозг?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.07.2008 (Сб) 18:48

ANDLL
Цикл с задержкой. Я просто не вдавался в подробности, а это ядрёный аналог Sleep, который я несколько раз использовал.
Изображение

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Высокочастотный таймер

Сообщение SSecurity » 10.11.2008 (Пн) 17:33

1. рисуешь свой девайс паяльником
2. вешаешь его на ЮСБ или компорт,
3. рисуешь драйвер под девайс
4. управляешь как хошь:)

Это самый надежный сопособ чтоб АЧХ на выходе соответсвовали тому что нужно.
..или хотябы таковый генратор если частота стабильная, а форма сигнала должна меняться


С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Re: Высокочастотный таймер

Сообщение Zer » 10.11.2008 (Пн) 22:51

Не катит. В качестве выходов - PCI-ЦАПы.
Тему можно закрывать.
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList  
cron