Нужно определить период между сигналами

Тема в разделе "WASM.ELECTRONICS", создана пользователем N1k3R, 18 июн 2006.

  1. N1k3R

    N1k3R New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    5
    Здравствуйте, подскажите пожалуйста начинающему:

    Есть девайс, он посылает в ком-порт сигналы, нужно определить переод между сигналами в точности до миллисекунд, как можно это сделать?
     
  2. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Способ 1: осциллограф

    Способ 2: DOS+IN+RDTSC

    Способ 3: драйвер уровня ядра+IN+RDTSC
     
  3. N1k3R

    N1k3R New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    5


    А как перевести такты процессора во время?
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    N1k3R

    А как перевести такты процессора во время?



    Проще всего - выдать на COM-порт сигнал с известными параметрами и по нему откалиброваться.
     
  5. N1k3R

    N1k3R New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    5


    На com-порт будут подаваться сигналы с не постоянным переодом, мне нужно фиксировать и выводить на экран переод между последними сигналами. То есть, например, определить переод между сигналами, задержка секунды на 2, и ещё раз определить переод и тд.
     
  6. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Период с такой точностью можно определять и в Windows (при этом правда, поток проверяющий никогда не будет спать - и соотв. нагрузка на проц будет 100%). Вполне хватит функций работающих с счетчиками производительности/мм-таймеров.
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    период вобще-то а не "переод"
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Бедный русский язык...
     
  9. N1k3R

    N1k3R New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    5
    Можете конкретный пример асм кода с нахождения периода привести?
     
  10. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    N1k3R



    С примером помочь не могу (страшно лень). Посмотри функции QueryPerformanceCounter и QueryPerformaceFrequency в MSDN - вроде бы все просто, касательно их использования...
     
  11. N1k3R

    N1k3R New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    5


    Спасибо за подсказку. Отличные функции =)
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Можно также использовать "комбинированный метод": QueryPerformanceFrequency для определения числа тактов в секунду, а вместо QueryPerformanceCounter использовать RDTSC - зачем лазить в ядро ради одной инструкции :)
     
  13. cmd_prompt

    cmd_prompt New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2006
    Сообщения:
    28
    Адрес:
    Ukraine, Donetsk
    Определение числа тактов в сек.



    .code



    push REALTIME_PRIORITY_CLASS

    push -1

    call SetPriorityClass ; Устанавливаем макс. приоритет процессу



    push THREAD_PRIORITY_TIME_CRITICAL

    push -2

    call SetThreadPriority ; Устанавливаем макс. приоритет потоку



    push 10

    call Sleep



    RDTSC

    mov esi, edx

    mov edi, eax



    push 1000 ; Задержка 1 сек.

    call Sleep



    RDTSC



    sub eax, edi

    sbb edx, esi





    Пара eax:edx будет содержать приблизительное кол-во тактов в секунду.
     
  14. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Для получения корректного результата с помощью rdtsc, надо еще и cpuid использовать.
     
  15. cmd_prompt

    cmd_prompt New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2006
    Сообщения:
    28
    Адрес:
    Ukraine, Donetsk
    Это верно, только если замеряешь на такты небольшой участок кода, а в этом случае CPUID вызовет дополнительную задержку и увелечение часла тактов.



    Вот прога, замеряющая частоту, с закоментированными CPUID даёт меньшую погрешность. Проверь у себя.
     
  16. cmd_prompt

    cmd_prompt New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2006
    Сообщения:
    28
    Адрес:
    Ukraine, Donetsk
  17. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348