Разрешение по времени в микросекундах (или одной мс) на встроенном устройстве - PullRequest
2 голосов
/ 02 апреля 2010

У меня есть модуль ядра, который я построил, который требует разрешения по крайней мере 1 мс. В настоящее время я использую do_gettimeofday (), но я обеспокоен тем, что это не сработает, как только я переместу свой модуль на встроенное устройство. Устройство имеет процессор 180 Mz (MIPS), а значение HZ по умолчанию в ядре равно 100. Таким образом, использование jiffies даст мне в лучшем случае разрешение 10 мс. Это не поможет.

Что я хотел бы знать, так это то, что do_gettimeofday () основана на прерывании по таймеру (HZ). Можно ли гарантировать разрешение не менее 1 мс?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 апреля 2010

мс не микросекунда, это миллисекунда. Не зная больше о вашем выборе устройства, никто не может ответить на такой зависящий от реализации вопрос, как то, основано ли gettimeofday на прерывании таймера. Если вы выбрали устройство, которое знает набор инструкций и тактовую частоту, то почему бы вам не взглянуть на реализацию этого конкретного ядра, чтобы выяснить это?

2 голосов
/ 04 марта 2011

Да, вам нужно включить CONFIG_HIGH_RES_TIMERS в вашем ядре и убедиться, что ваша платформа регистрирует clock_event_device. Это механизм, который позволяет выставлять таймеры высокого разрешения в пространстве пользователя. Вы можете проверить разрешение ваших таймеров, позвонив по номеру clock_getres() в пользовательском пространстве.

2 голосов
/ 02 апреля 2010

На встроенном устройстве это не гарантируется. Учитывая, что он основан на MIPS, это, вероятно, нормально, большинство машин MIPS имеют счетчики циклов. Но вам нужно прочитать исходный код этой части ядра, чтобы узнать, что он делает на вашей платформе.

...