Точный таймер для MS DOS Точный таймер для MS DOSпод Octagon PC 510 |
Ответить | Страница 12> |
Автор | |
Новичок Присоединился: 14 Октябрь 2008 Категория: Kazakhstan Online Status: Offline Публикации: 19 |
Опубликовано: 12 Ноябрь 2009 08:44 |
Доброго времени суток господа.
Имею одноплатный компьютер Octagon PC 510 (процессор 133 MHz). Возникла производственная задача, при которой надо измерить разность времени срабатывания дискретного сигнала с точностью 0.5 миллисекунд. Подозреваю, что это можно сделать через подсчет тактов процессора, но Гугл на подобный запрос упорно выдает про QueryPerformanceCounter, а это реализация по Windows, а не под MS-DOS. Уважаемые знатоки, расскажите, пожалуйста, как вы считаете короткие периоды времени (порядка миллисекунд) в своих задачах. |
|
Участник Присоединился: 04 Декабрь 2008 Категория: Russian Federation Online Status: Offline Публикации: 81 |
|
Единственный выход - это подсчитывать тики таймера RTC (или ловить прерывания от него).
Но по умолчанию он тикает с частотой 18.2 Гц, поэтому придется перезагрузить его делитель другим числом, чтобы он стал тикать быстрее. Но как поведет себя при этом компьютер - ХЗ |
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 07 Октябрь 2004 Категория: Russian Federation Online Status: Offline Публикации: 359 |
|
Я подобную задачу решил с помощью внешнего генератора и модуля счетчика импульсов. Контролируемый дискретный вход завязывается на сигнал разрешения счета. Точность измерения интервала времени будет зависить от опорной частоты счетных импульсов. Такая система у меня работает уже года три.
|
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Поищите книги братьев Фроловых. Они называются что-то похоже "MS-DOS для программиста" и "Аппаратные средства IBM PC". Там должны быть примеры работы с системным таймером (не RTC!). Или любую другую книгу по IBM PC. Идея такова: перепрограммируете этот таймер под свои нужды на нужное количество тиков. Тики будут кратны тем, что были ранее по умолчанию. В прерывании считает эти тики и, отсчитав определённое количество тиков вызываете старый обработчик прерывания. В этом случае MS-DOS будет работать штатно и все системные интервалы останутся прежними. |
|
Участник Присоединился: 21 Июнь 2004 Категория: Russian Federation Online Status: Offline Публикации: 66 |
|
Все верно, только программа будет резидентной, и если основная задача обьемная, в целях экономии памяти лучше написать на асемблере, если нет, пойдет и си-паскаль. Когда то подобных (резидентных) задач у меня было много. PS: А книги Фроловых я до сих пор не выкидываю.
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
|
Вот, это у меня работало, пользуйтесь!
Лицензионное соглашение Скачивая данные исходные тексты, вы соглашаетесь с тем, что автор не несет никакой ответственности за любые последствия какого бы то ни было их использования. Вы имеете право использовать эти исходные тексты каким угодно образом и распространять их по вашему усмотрению. 85FFB_Timer.rar Здесь исходник функции new_divisor на С, на ассемблере и объектный файл для модели small. Как ей пользоваться: #include <dos.h> #include "timer.h" static void interrupt (*old_timer)(); // обработчик прерывания: void interrupt timer() // ticks once per millisecond { static unsigned count_55ms = 0; // здесь пишете что-то свое // выполнение стандартного обработчика if (++count_55ms == 55) { old_timer(); count_55ms = 0; } else outp (0x20, 0x20); }; // в теле основной программы: void main() { // инициализировать таймер new_divisor (1193); // 1 тик за 1ms old_timer = _dos_getvect (8); // сохранить вектор _dos_setvect (8, timer); // установить обработчик // тут собственно ваша программа new_divisor (0); // восстановить делитель таймера _dos_setvect (8, old_timer); }; Желаю удачи! |
|
Инженер-системотехник
+7 (916) 477 3925 |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
|
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Мда, как-то подразумевал резидентность и не указал в явном виде Собственно, в резидентной части оправдано только считать тики, объявив переменную как внешнюю, а в основной программе только читать эту переменную. P. S. А у меня и CD-ROM-чик с книжками Фролова есть |
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 02 Октябрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 427 |
|
Реально чсики компьютора имеют выход с частотой 1024 Гц. Можно разрешить этот выход. Их можно посадить на прерывание. Вроде бы все это можно сделать программно. Но сам не пробовал. К сожалению пользователю действительно предлагают пользовательское прерывание с частотой 18.2 раза в сек и все. Лазить в системный таймер и контроллеры прерываний не советую - поиграться можно , но потратите время.
На мой взгляд - лучше на любом процессоре сделать узелок для замера времени и по посл порту его спрашивать - затраченного времени будеть точно меньше и результат гарантированный. |
|
При экспериментах ни один чайник не пострадал
----------- Плохому системному интегратору всегда OPC сервер мешает. ______________ Пишу на C++ за еду |
|
Участник Присоединился: 21 Июнь 2004 Категория: Russian Federation Online Status: Offline Публикации: 66 |
|
Сейчас наверное действительно лучше так. Но когда то давным давно, когда вся автоматизация была на самопале и рассыпухе, собрали быстрый АЦП под ISA-слот, перепрограммировали таймер на 100мкс и работало год без нареканий в фоновом режиме, не мешая ребятам играть в тетрис и диггера. PS: Задача бала информационная, без управления.
|
|
Ответить | Страница 12> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |