2013-07-25 3 views
0

Я работаю над проектом на основе малины Pi с модулем GPS, который мой босс хочет, чтобы я получил время для системных часов. Однако нам также необходимо принимать показания на разных датчиках, в то время как у GPS может не быть исправления, и нам нужно знать до миллисекундной точности (допуск 50-100 мс прекрасен), когда эти показания были сделаны.Как получить миллисекундное время безотказной работы с пользовательского пространства в Linux?

Лично мне нужен аппаратный RTC для этого, но мне было поручено обойти его. Моя идея состоит в том, чтобы отметить каждое чтение с относительным временем от загрузки системы, системное время не является надежным и обновляется по времени NTP/Satellite, когда оно доступно (я могу затем зафиксировать записи, когда синхронизированное время доступно с использованием относительной время).

Итак, как я могу получить миллисекунду точное время безотказной работы в Linux из кода пользователя C-кода? Что-то вроде значения jiffies, доступного в ядре, было бы идеально.

ответ

0

Думаю, вам нужно проверить главный контроллер (CPU) на своей плате. Как правило, в процессор встроен модуль таймера аппаратного обеспечения, или реализация регрессивного регистра в ядре процессора.

Если на вашем CPU установлен аппаратный таймер или регистр DEC, используйте его для реализации периодического прерывания (частота может быть 1000 Гц или еще). Обработчик прерываний может уведомлять/запускать процесс пользовательского пространства для выполнения необходимой работы в режиме реального времени.

+0

Благодарим вас, я сделал немного на основе Googling и нашел это: http://www.airspayce.com/mikem/bcm2835/index.html, который имеет функцию bcm2835_st_read(), которая возвращает системный таймер uint64 , – PeterBelm