2014-11-26 2 views
1

У меня есть событие из мира реального времени, которое генерирует прерывание. Мне нужно зарегистрировать это событие в одном из ярусов ядра Linux, например CLOCK_MONOTONIC или CLOCK_REALTIME, с целью установления, когда событие произошло в реальном календарном времени. Каков в настоящее время рекомендуемый способ сделать это? Мой поисковик Google обнаружил некоторые исправления, представленные в 2011 году для его поддержки, но с тех пор код обработки прерываний был сильно пересмотрен, и я больше не вижу ссылки на временные метки.Как получить временную метку ядра для прерывания?

Для моего предполагаемого применения требования к точности низкие (1 мс). Тем не менее, я хотел бы знать, как это сделать должным образом. Я должен подумать, что можно попасть в микросекундный диапазон, если можно исключить возможность прерываний с более высоким приоритетом.

ответ

2

Если вам нужна только низкая точность, вы можете уйти с чтением jiffies. Однако, если CONFIG_HZ меньше 1000, вы даже не получите разрешение 1 мс.

Для высокого разрешения временной метки, увидеть, как firewire-cdev.c делает это:

case CLOCK_REALTIME:  getnstimeofday(&ts); break; 
    case CLOCK_MONOTONIC:  ktime_get_ts(&ts); break; 
    case CLOCK_MONOTONIC_RAW: getrawmonotonic(&ts); break; 
+0

Похоже, я получил некоторое чтение делать. Поскольку я задал оригинальный вопрос, я также помнил, что драйвер «PPS» использовался для подключения сигналов времени GPS. Мне любопытно, если он использует один из этих вызовов внутри страны. – mark03

0

Если я правильно понял ваши потребности, вы можете использовать функцию getnstimeofday() для этой цели.

0

Если вам нужно высокоточное монотонное значение часов (что обычно является хорошей идеей), вы должны посмотреть на функцию ktime_get_ts() (определенную в linux/ktime.h). getnstimeofday(), предложенный в другом ответе, возвращает «настенное» время, которое, по-видимому, может оказаться обратным в случайном порядке, что приводит к неожиданному поведению для некоторых приложений.

Смежные вопросы