Есть ли безопасный способ вызова 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
Другие вопросы по тегам