Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > рассчёт временных задержек


Автор: Duron 24.2.2006, 12:05
Добрый день,уважаемые господа! Всех с праздником!
У меня вопрос. Если можете, помогите. Устройство на СОМ-порту
выдаёт сигналы с миллисекундными задержками.Я их вынимаю РидФайлом по одному.
Нужно точно рассчитать время между приходами этих сигналов.
Заранее спасибо. С уважением Александр.
magdu@yandex.ru
sasha008@rambler.ru

Автор: Partizan 24.2.2006, 13:52
возможно завести статическую переменню и считать разницу между двумя приёмами сигналов...

Автор: Lotrex 27.2.2006, 10:59
Такие штучки ИМХО, в dos-e лучше делать, если хочешь поточней посчитать время между приходом сигналов.

Автор: Nuzur 27.2.2006, 12:58
Или делать GetTickCount(). Должно точно получться.

Автор: Lotrex 27.2.2006, 22:36
Скорей всего, в винде вообче ничего не выйдет... smile
Вот такую картиночку видели(это win98)?

user posted image

ИМХО, тут надо для начала размер входного буфера поставить 1 байт (но и то не факт, что сразу по приходу байта в буфер приложение будет оповещено). Другое дело в DOS-е - написал программу обработки прерывания - и пжалста, как она вызвалась - значить, байт пришел smile Уверен, что будет точнее. Хотя, наверно и в винде можно посчитать точно, если сделать приложению real-time приоритет.

Автор: Lotrex 5.3.2006, 21:31
Вот, Duron, special for you smile
Старенькая DOS - программа (исходник):
http://jamwarrior.narod.ru/sources/com_inp.tar.gz

Там есть файлик readme.txt, он на русском, но в dos-кодировке - надеюсь, расшифруете.

Пока понятия не имею, как Вашу задачу под Win решить... smile

Автор: Partizan 5.3.2006, 21:52
он же говорит, что вынимает их ридфайлом....

можно использовать ф-ю timeGetTime() из mmtime.lib

Автор: sdeniss 5.3.2006, 21:54
Устройство сигналы RTS выставляет?

Автор: Lotrex 5.3.2006, 22:14
Ридфайлом вряд ли в принципе можно эту проблему решить. По той причине, что не известен момент прихода байта в буфер (это во первых). Где гарантия, что тот байт (если даже он один) был помещен в буфер в тот момент, когда функция нам вернула его значение? Windows - система многозадачная smile

Что дает timeGetTime?
Цитата

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.


Она возвращает время в миллисекундах с момента старта Windows. И ничего более. Она не сообщает времени с момента прихода байта в буфер com-порта. Если есть такая ф-ция в WinAPI - плз, в студию! smile Тогда я с покрасневшей поверхностью лица возьму свои слова обратно. smile

Во-вторых, предложенная прога анализирует состояние линий (счас уж не помню, каких smile ) и реагирует на каждое изменение их состояния, а не только после того, как привалил цельный байт. ИМХО, для данной задачи это лучше. Пусть решает автор темы, что ему больше нравится.

Я думаю, в DOS-е точнее получится измерение задержек. Если еще переопределить процедуру обработки прерывания таймера и увеличить его частоту - можно повысить точность до десятых долей миллисекунд (а может, и еще точнее). Правда, под виндами такая прога точно не заработает, а часы вообще встанут (ну, если их в своей процедуре не переставлять smile ). А если под Dos можно использовать timestamp проца, то вообще голова кругом smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)