source: rtems/cpukit/score/src/timespecdivide.c @ c3330a8

4.104.114.84.95
Last change on this file since c3330a8 was c3330a8, checked in by Joel Sherrill <joel.sherrill@…>, on May 17, 2007 at 10:46:45 PM

2007-05-17 Joel Sherrill <joel.sherrill@…>

  • ChangeLog?, configure.ac, libcsupport/src/times.c, libmisc/cpuuse/cpuuse.c, libmisc/stackchk/check.c, rtems/include/rtems/rtems/ratemon.h, rtems/src/ratemongetstatus.c, rtems/src/ratemonperiod.c, rtems/src/ratemonreportstatistics.c, rtems/src/ratemonresetall.c, rtems/src/ratemontimeout.c, score/Makefile.am, score/include/rtems/score/thread.h, score/include/rtems/score/timespec.h, score/src/threaddispatch.c, score/src/threadinitialize.c, score/src/threadtickletimeslice.c, score/src/timespecdivide.c: Add nanoseconds granularity to the rate monotonic period statistics and CPU usage statistics. This capability is enabled by default although may be conditionally disabled by the user. It could be too much overhead on small targets but it does not appear to be bad in early testing. Its impact on code size has not been evaluated either. It is possible that both forms of statistics gathering could be disabled with further tweaking of the conditional compilation.
  • score/src/timespecdividebyinteger.c: New file.
  • Property mode set to 100644
File size: 1.2 KB
Line 
1/**
2 *  @file  score/src/timespecdivide.c
3 */
4
5/*
6 *  COPYRIGHT (c) 1989-2007.
7 *  On-Line Applications Research Corporation (OAR).
8 *
9 *  The license and distribution terms for this file may be
10 *  found in the file LICENSE in this distribution or at
11 *  http://www.rtems.com/license/LICENSE.
12 *
13 *  $Id$
14 */
15
16#if HAVE_CONFIG_H
17#include "config.h"
18#endif
19
20#include <rtems/system.h>
21#include <sys/types.h>
22#include <rtems/score/timespec.h>
23#include <rtems/score/tod.h>
24
25void _Timespec_Divide(
26  const struct timespec *lhs,
27  const struct timespec *rhs,
28  uint32_t              *ival_percentage,
29  uint32_t              *fval_percentage
30)
31{
32  uint64_t left, right, answer;
33
34  /*
35   *  For math simplicity just convert the timespec to nanoseconds
36   *  in a 64-bit integer.
37   */
38  left   = lhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
39  left  += lhs->tv_nsec;
40  right  = rhs->tv_sec * (uint64_t)TOD_NANOSECONDS_PER_SECOND;
41  right += rhs->tv_nsec;
42
43  if ( rhs == 0 ) {
44    *ival_percentage = 0;
45    *ival_percentage = 0;
46    return;
47  }
48
49  /*
50   *  Put it back in the timespec result
51   */
52
53  answer = (left * 1000) / right;
54
55  *fval_percentage = answer % 1000;
56  *ival_percentage = answer / 1000;
57}
Note: See TracBrowser for help on using the repository browser.