Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
BarDimS
Зарегистрирован: 13.03.2007 Сообщения: 3
|
Добавлено: Вт Мар 13 2007 15:11 Заголовок сообщения: Как сделать временную задержку не более 1 мсек |
|
|
ОС: Windows 2000
ЯП: Builder C++ 6
Мне потребовалось приостанавливать выполнение программы на время порядка сотен наносекунд(в худшем случае на одну миллисекунду).
В Windows и в среде разработки есть средства приостановки выполнения на одну миллисекунду, но те из них, которые я знаю, в действительности приостанавливают выполнение больше чем 1 мсек и это видно когда этих приостановок очень много.
Нельзя ли средствами языка Ассемблера делать задержки точно на 1мсек или фиксированное число наносекунд.
Расскажите пожалуйста в общих чертах как это сделать.
Буду очень благодарен за ответ. |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Вт Мар 13 2007 15:20 Заголовок сообщения: |
|
|
Насколько я помню есть команда NOP в интелловских процессорах. Кажется она выполняется 1 такт. Но нужно учесть каждый конкретный процессор.
Вопрос, а зачем это нужно? _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
BarDimS
Зарегистрирован: 13.03.2007 Сообщения: 3
|
Добавлено: Вт Мар 13 2007 20:13 Заголовок сообщения: |
|
|
Это нужно для передачи сигналов: надо поднять уровень сигнала(+5 В), продержать его не менее заданного промежутка времени(об этом промежутке идет речь), а затем опустить его(0 В).
Можно держать установленный уровень и дольше заданного минимального промежутка, но это замедляет работу, а надо, чтобы все происходило как можно быстрее.
Спасибо за совет. |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Вт Мар 13 2007 22:34 Заголовок сообщения: |
|
|
Попробуйте искать по словосочетанию "системный таймер"
Где-то наталкивался, тама вроде асемблерной вставкой, циклом считают показания системного таймера, и ждут пока набегает нужное колличество мс
А вообще, мне кажется, работа такой программы будет отличаться от в зависимости от процессора. Нельзя сказать на 100% что ваша 1 мс будет выдерживаться.
Такие вещи аппаратно реализуются
Есть реализации *nix систем для критических real-time задач _________________ С уважением Dimasm |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Ср Мар 14 2007 07:13 Заголовок сообщения: |
|
|
BarDimS писал(а): | Это нужно для передачи сигналов: надо поднять уровень сигнала(+5 В), продержать его не менее заданного промежутка времени(об этом промежутке идет речь), а затем опустить его(0 В).
|
Какой сигнал и куда нужно передать? _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
BarDimS
Зарегистрирован: 13.03.2007 Сообщения: 3
|
Добавлено: Ср Мар 14 2007 10:41 Заголовок сообщения: |
|
|
Было начало:
Цитата: |
Это нужно для передачи сигналов: надо поднять уровень сигнала(+5 В), продержать его не менее заданного промежутка времени(об этом промежутке идет речь), а затем опустить его(0 В).
Можно держать установленный уровень и дольше заданного минимального промежутка, но это замедляет работу, а надо, чтобы все происходило как можно быстрее.
Спасибо за совет.
|
теперь продолжение:
Сигнал задается записью 1 или 0 в определенный бит(соответствующий определенному контакту) определенного регистра LPT-порта и передается "хитрым образом" в термопару (датчик температуры).
На самом деле много всяких разных сигналов передается на контакты порта, а оттуда - в датчик. Посредством сигналов передается пакет запроса к датчику, датчик отвечает. Так вот, чтобы датчик понимал, что ему шлют, надо удерживать определенные сигналы на определенном уровне заданное число наносекунд, в то время как другие сигналы меняются. Если увеличить это время удерживания, то запрос к датчику и ответ от него будут длиться недопустимо долго.[ |
|
Вернуться к началу |
|
|
Alexey_B
Зарегистрирован: 09.03.2007 Сообщения: 3
|
Добавлено: Ср Мар 14 2007 14:25 Заголовок сообщения: |
|
|
ну а может быть имеет смысл постаить мультиплексор из параллельного кода в последовательный и тактировать его своим генератором. Тогда выдержали милисекунду параллельный код и пусть его этот мультиплексор гонит в ваш датчик |
|
Вернуться к началу |
|
|
TeAnton
Зарегистрирован: 02.06.2007 Сообщения: 7
|
Добавлено: Сб Июн 02 2007 01:15 Заголовок сообщения: |
|
|
QueryPerformanceCounter, QueryPerformanceFrequency тебе помогут. |
|
Вернуться к началу |
|
|
|