<100uS точных снов на Windows CE - PullRequest
1 голос
/ 24 июня 2009

Можно ли спать в течение определенного времени, которое будет точным до 100 микросекунд в Windows CE? Чем меньше дрожание, тем лучше - в идеале мы хотели бы, чтобы время отклика составляло одну цифру микросекунды.

То, что нам действительно нужно, это таймер 5 мс с очень низким джиттером - хотя объекты Windows CE WaitFor [Single | Multiple] и API Sleep работают в единицах миллисекунд, мы не можем затем исправить в течение мс времени наш код может потребоваться для запуска, поэтому цикл будет постепенно дрейфовать.

Если это невозможно, эта информация также будет очень полезна.

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

Эта статья MSDN содержит некоторый код для настройки прерывания таймера 500us в WinCE, так что это абсолютно возможно.

Если вы не привязаны к своей версии WinCE, возможно, вы захотите взглянуть на Tenasys , который утверждает, что предлагает RTOS, работающий параллельно с Windows на стандартном оборудовании.

Я также слышал хорошие новости о QNX , но я также не использовал их продукты. Однако я не верю, что она совместима с Windows.

1 голос
/ 26 июля 2009

Если вам нужно не спать, это не проблема заряда аккумулятора / потока, а просто вопрос точного времени, вы можете использовать «PerformanceCounter» в устройствах Windows CE. В процессорах XScale и Qualcomm это встроенный таймер микросхемы с гранулярностью менее 1 мс. На старых процессорах OMAP и Samsung API-интерфейс PerformanceCounter проходит через системный тик 1 мс и имеет много джиттера.

L.B.

1 голос
/ 24 июня 2009

Это невозможно. Это даже невозможно на настольных компьютерах. Типичные операционные системы просто не работают таким образом.

Если вам нужно что-то, чтобы выстрелить точно каждые 4 миллисекунды или что-то еще, что вам не повезло. Если то, что вам действительно нужно, это что-то, чтобы выстрелить ровно 250 раз каждую секунду, это может быть более выполнимо. Если вам нужно последнее, я могу предложить подход.

0 голосов
/ 15 июля 2009

Для устранения дрожания необходим доступ к таймеру высокого разрешения. Процессор у вас может быть один. Если нет, контроллер прерываний может.

Самый простой способ - это использовать Linux в реальном времени и WINE пробраться в эту библиотеку. Вы хотите периодическую ветку.

Посмотрите на этот отчет из NIST.

...