mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-22 07:38:45 +08:00
pps: Round to closest integer in pps_event()
The comment above bintime2timespec() says: When converting between timestamps on parallel timescales of differing resolutions it is historical and scientific practice to round down. However, the delta_nsec value is a time difference and not a timestamp. Also the rounding errors accumulate in the frequency accumulator, see hardpps(). So, rounding to the closest integer is probably slightly better. Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/604
This commit is contained in:
@@ -2266,6 +2266,7 @@ pps_event(struct pps_state *pps, int event)
|
||||
#ifdef PPS_SYNC
|
||||
if (fhard) {
|
||||
uint64_t delta_nsec;
|
||||
uint64_t freq;
|
||||
|
||||
/*
|
||||
* Feed the NTP PLL/FLL.
|
||||
@@ -2277,7 +2278,8 @@ pps_event(struct pps_state *pps, int event)
|
||||
tcount &= captc->tc_counter_mask;
|
||||
delta_nsec = 1000000000;
|
||||
delta_nsec *= tcount;
|
||||
delta_nsec /= captc->tc_frequency;
|
||||
freq = captc->tc_frequency;
|
||||
delta_nsec = (delta_nsec + freq / 2) / freq;
|
||||
hardpps(tsp, (long)delta_nsec);
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user