Есть ли безопасный способ вызова gettimeofday() из потока Xenomai в реальном времени?
Я использую поток реального времени Xenomai, которому иногда нужно вызывать gettimeofday(), чтобы узнать текущее время в соответствии с ptpd.
Однако делать это, по-видимому, небезопасно: в частности, он иногда ставит поток Xenomai и ядро Linux в "живую блокировку", заставляя gettimeofday () вращать процессор и никогда не возвращаться, как описано здесь.
Мой вопрос: есть ли безопасный способ получить информацию о gettimeofday () из потока Xenomai в реальном времени? Я рассматриваю возможность добавления моей собственной версии gettimeofday () в мое ядро Linux (моя версия потерпит неудачу, если read_seqretry() вернет true, в отличие от обычной версии, которая будет зацикливаться, когда это произойдет). Тем не менее, я бы просто не стал настраивать ядро Linux, если есть лучший способ сделать это.
1 ответ
Обновление октябрь 2012
Для любого другого, спотыкающегося через эту нить...
Проверьте API Xenomai:
http://www.xenomai.org/documentation/trunk/html/api/group__clock.html
Вот фрагмент кода, протестированный с Xenomai 2.6:
// Get system time in nanoseconds (real-time safe)
// Time is usually related to GMT, because Xenomai syncs time during
// bootup, so you might get a different time offset to gettimeofday()
// which is based on your current timezone.
double time = (double)rt_timer_read();
time /= 1000000000; // convert to seconds