Hello there, For NTP to work accurately, we need to be able to call clock_settime() defined in .../compat/posix/current/src/time.cxx.
Subsequent calls to e.g. gettimeofday() and clock_gettime() will then return the absolute time set with the call to clock_settime(). The clock_settime() function calls Cyg_Clock::real_time_clock->set_value(), which in turn changes the Cyg_RealTimeClock class' counter member inherited from Cyg_Counter. So far so good. The problem is that changing the counter member has some side-effects: cyg_current_time(), for instance, starts returning the new tick count, which causes threads to time-out sooner than expected, and alarms/timers created with timer_settime() or directly with the Cyg_Alarm() class might start behaving strangely. An alternative to using clock_settime() is to use cyg_libc_time_settime(), which uses the WallClock (with the emulated device) for storing the time. The problem with this approach is that a call to time(NULL) won't roll-over to the next second at the correct point in time (it has a 1 second resolution), and a call to Cyg_WallClock::init_hw_seconds() won't help us much, I think. I'd really like to have two counters in the Cyg_RealTimeClock (or one of its parent classes): One that can be changed with a call to clock_settime()/Cyg_Clock::real_time_clock->set_value() and one that counts the number of ticks since boot and can't be changed. There should also be two sets of functions for obtaining these values depending on whether they're going to be used in e.g. gettimeofday() or for timers/alarms. Any suggestions/ideas would be very helpful. Thanks in advance, Rene Schipp von Branitz Nielsen Vitesse Semiconductors -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
