![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Courier |
|
|||
|
Unregistered |
Прошу помочь мне в таком важном для меня деле, как выполнение простых действий каждые 50-100 микросекунд (10-20 кГц). У меня на LPT-порте висит железяка, которую нужно опрашивать, и строить графики по этим данным - зависимость измеряемого напряжения от времени... Как выполнять команду "In port, Data" через эти проклятые 100 микросекунд?
|
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Если точно через 100 то никак. Среда многозадачная. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Может быть попытаться эту железяку к звуковухе подцепить, точнее сам источик сигнала? или LPT нужен обязательно?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| p0s0l |
|
||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Courier, можно сделать примерно так:
Давно мучал вопрос, насколько велика погрешность в таких случаях из-за многозадачности. Поэтому решил проверить собственноручно. Поясню на "картинке":
Тут изображен случай, когда на 80 mkсекунде произошло переключение задачи, и выполнение вернулось на 170 mkсекунде. Программе же требуется замерить данные на 100-ой mkсекунде. Ближайшее замеренное значение - на 80мкс. Его и берем. И так продолжается дальше. Разрывы происходят не так часто (при повышенном приоритете - за 1 секунду всего 40 раз произошли "ощутимые" переключения)... Ниже приведены результаты теста. По незнанию, как назвать некоторые параметры, обозвал их так: Переключений задач - сколько обнаруженных переключений произошло за время цикла (обнаружились из-за того, что перескочили во времени за нужный интервал). Положительная погрешность - разница между текущим временем и требуемым (на рис.: 170-100=70 мкс) Отрицательная погрешность - разница между требуемым и предыдущем значением времени (на рис.: 100-80=20 мкс) Просто погрешность - выбирается в каждом такте цикла как наименьшее из полож. и отриц. погрешностей Пропущеных тактов - сколько пропущено тактов цикла из-за "долгих" чужих процессов. Например, если бы на рисунке выполнение программы продолжилось не на 170 мкс, а на 370 мкс, то было бы пропущено 2 такта. Результаты:
Это сообщение отредактировал(а) p0s0l - 17.3.2004, 22:59 -------------------- С уважением, г-н Посол. |
||||||
|
|||||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Для таких задач надо подумать о смене оси на QNIX
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
Или возложить эти функции на внешний контроллер. Т.е. контроллер работает в реальном времени в синхронном режиме, а управление им и обмен информации осуществляется с персоналки асинхронно.
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
to p0s0l Для какого процессора приведены данные в таблице? Как влияет применение более слабого/сильного процессора?
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
[s]remax, Athlon2000.
Тут зависит от нагрузки системы/типов выполняемых задач/самой ОС. Например, вылез в инет, но всё лишнее поснимал из процессов - и с RealTime приоритетом получилось 200 пропущенных тактов (вместо прежних 35), поднялась макс. положит. погрешность до 700, хотя остальные параметы остались как были... -------------------- С уважением, г-н Посол. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Вот, если кто сам захочет у себя сделать замеры - исходник проги (5 кб)...
Присоединённый файл ( Кол-во скачиваний: 12 )
HighFreqTimer.zip-------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |