Mercurial > ecos
diff packages/kernel/current/include/clock.hxx @ 64:c38311975d4f ecos-sw-2000-01-28
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
| author | jlarmour |
|---|---|
| date | Fri, 28 Jan 2000 04:59:39 +0000 |
| parents | 7a6ac9edc838 |
| children | bf00f99aec69 |
line wrap: on
line diff
--- a/packages/kernel/current/include/clock.hxx +++ b/packages/kernel/current/include/clock.hxx @@ -9,26 +9,27 @@ // //========================================================================== //####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Cygnus eCos Public License -// Version 1.0 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://sourceware.cygnus.com/ecos -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Cygnus Operating System, released -// September 30, 1998. -// -// The Initial Developer of the Original Code is Cygnus. Portions created -// by Cygnus are Copyright (C) 1998,1999,2000 Cygnus Solutions. -// All Rights Reserved. -// ------------------------------------------- -// +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// //####COPYRIGHTEND#### //========================================================================== //#####DESCRIPTIONBEGIN#### @@ -148,6 +149,31 @@ public: cyg_resolution resolution ); + // There is a need for converting from "other" ticks to clock ticks. + // We will construct 4 numbers to do the conversion as: + // clock_ticks = (((otherticks*mul1)/div1)*mul2/div2) + // with the values chosen to minimize the possibility of overflow. + // Do the arithmetic in cyg_uint64s throughout. + struct converter { + cyg_uint64 mul1, div1, mul2, div2; + }; + + // There are two of these because the 4 numbers are different depending + // on the direction of the conversion, to prevent loss of significance. + // NB these relate to the resolution of the clock object they are + // called against, not necessarily "the" system real time clock. + void get_other_to_clock_converter( cyg_uint64 ns_per_other_tick, + struct converter *pcc ); + + void get_clock_to_other_converter( cyg_uint64 ns_per_other_tick, + struct converter *pcc ); + + // A utility to perform the conversion in the obvious way, with + // rounding to nearest at each stage. Static because it uses a + // previously acquired converter. + static cyg_tick_count convert( cyg_tick_count value, + struct converter *pcc ); + #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK // There is a system supplied real time clock...
