Има ли безопасен начин за извикване на gettimeofday() от нишка в реално време на Xenomai?

Пускам нишка в реално време на Xenomai, която понякога трябва да извика gettimeofday(), за да разбере какво е текущото време според ptpd.

Това обаче изглежда не е безопасно: по-специално понякога поставя нишката на Xenomai и ядрото на Linux в ситуация на „заключване на живо“, което кара gettimeofday() да завърти процесора и никога да не се върне, както е описано тук.

Въпросът ми е има ли безопасен начин за получаване на информация за gettimeofday() от нишка в реално време на Xenomai? Обмислям да добавя моя собствена версия на gettimeofday() към моето ядро ​​на Linux (моята версия ще се провали, ако read_seqretry() върне true, за разлика от обикновена версия, която ще зацикля завинаги, когато това се случи). Въпреки това, не бих започнал да персонализирам ядрото на Linux, ако има по-добър начин да го направя.


person Jeremy Friesner    schedule 07.07.2011    source източник
comment
FWIW, Gilles от пощенския списък за помощ на Xenomai казва, че Xenomai 2.6 ще има функция за часовник CLOCK_HOSTRT, която ще задоволи тази нужда. За по-ранни версии едно заобиколно решение е да се добави ioctl към персонализиран драйвер, който връща часовника в реално време на Linux, без да се опитва да зацикли, ако бъде открито съревнование.   -  person Jeremy Friesner    schedule 07.07.2011
comment
можеш ли да го представиш като подробен отговор?   -  person Aquarius_Girl    schedule 05.04.2012


Отговори (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
person David    schedule 18.10.2012
comment
Това използва Xenomai Native API. Има друго извикване в API на Posix, което ви позволява да получите часовника въз основа на времето на хоста. - person David; 03.02.2013