source: rtems/testsuites/tmtests/tmck/task1.c @ c499856

4.11
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on Mar 20, 2014 at 9:10:47 PM

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 3.7 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2013.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.org/license/LICENSE.
8 */
9
10
11#ifdef HAVE_CONFIG_H
12#include "config.h"
13#endif
14
15#define CONFIGURE_INIT
16#include "system.h"
17
18#define MAXIMUM_DISTRIBUTION 1000
19
20#undef OPERATION_COUNT
21#define OPERATION_COUNT    100000
22
23uint32_t Distribution[ MAXIMUM_DISTRIBUTION + 1 ];
24
25rtems_task Task_1(
26  rtems_task_argument argument
27);
28
29void check_read_timer( void );
30
31rtems_task Init(
32  rtems_task_argument argument
33)
34{
35  rtems_id          id;
36  rtems_status_code status;
37
38  /*
39   *  Tell the Timer Driver what we are doing
40   */
41
42  benchmark_timer_disable_subtracting_average_overhead( 1 );
43
44  Print_Warning();
45
46  puts( "\n\n*** TIME CHECKER ***" );
47
48  Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ),
49
50  status = rtems_task_create(
51    1,
52    5,
53    RTEMS_MINIMUM_STACK_SIZE,
54    RTEMS_DEFAULT_MODES,
55    RTEMS_DEFAULT_ATTRIBUTES,
56    &id
57  );
58  directive_failed( status, "rtems_task_create of TA1" );
59
60  status = rtems_task_start( id, Task_1, 0 );
61  directive_failed( status, "rtems_task_start of TA1" );
62
63  status = rtems_task_delete( RTEMS_SELF );
64  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
65}
66
67rtems_task Task_1(
68  rtems_task_argument argument
69)
70{
71  uint32_t   index;
72
73  check_read_timer();
74rtems_test_pause();
75
76  benchmark_timer_initialize();
77  end_time = benchmark_timer_read();
78
79  put_time(
80    "Time Check: NULL timer stopped at",
81    end_time,
82    1,
83    0,
84    0
85  );
86
87  benchmark_timer_initialize();
88  for ( index = 1 ; index <= 1000 ; index++ )
89    (void) benchmark_timer_empty_function();
90  end_time = benchmark_timer_read();
91
92  put_time(
93    "Time Check: LOOP (1000) timer stopped at",
94    end_time,
95    1,
96    0,
97    0
98  );
99
100  benchmark_timer_initialize();
101  for ( index = 1 ; index <= 10000 ; index++ )
102    (void) benchmark_timer_empty_function();
103  end_time = benchmark_timer_read();
104
105  put_time(
106    "Time Check: LOOP (10000) timer stopped at",
107    end_time,
108    1,
109    0,
110    0
111  );
112
113  benchmark_timer_initialize();
114  for ( index = 1 ; index <= 50000 ; index++ )
115    (void) benchmark_timer_empty_function();
116  end_time = benchmark_timer_read();
117
118  put_time(
119    "Time Check: LOOP (50000) timer stopped at",
120    end_time,
121    1,
122    0,
123    0
124  );
125
126  benchmark_timer_initialize();
127  for ( index = 1 ; index <= 100000 ; index++ )
128    (void) benchmark_timer_empty_function();
129  end_time = benchmark_timer_read();
130
131  put_time(
132    "Time Check: LOOP (100000) timer stopped at",
133    end_time,
134    1,
135    0,
136    0
137  );
138
139  puts( "*** END OF TIME CHECKER ***" );
140  rtems_test_exit( 0 );
141}
142
143void check_read_timer()
144{
145  uint32_t   index;
146  uint32_t   time;
147
148  for ( index = 1 ; index <= MAXIMUM_DISTRIBUTION ; index++ )
149    Distribution[ index ] = 0;
150
151  for ( index = 1 ; index <= OPERATION_COUNT ; ) {
152    benchmark_timer_initialize();
153    end_time = benchmark_timer_read();
154    if ( end_time > MAXIMUM_DISTRIBUTION ) {
155      /*
156       *  Under UNIX a simple process swap takes longer than we
157       *  consider valid for our testing purposes.
158       */
159      printf( "TOO LONG (%" PRIu32 ") at index %" PRIu32 "!!!\n", end_time, index );
160      continue;
161    }
162    Distribution[ end_time ]++;
163    index++;
164  }
165
166  printf( "Units may not be in microseconds for this test!!!\n" );
167  time = 0;
168  for ( index = 0 ; index <= MAXIMUM_DISTRIBUTION ; index++ ) {
169    time += (Distribution[ index ] * index);
170    if ( Distribution[ index ] != 0 )
171      printf( "%" PRId32 " %" PRId32 "\n", index, Distribution[ index ] );
172  }
173  printf( "Total time = %" PRId32 "\n", time );
174  printf( "Average time = %" PRId32 "\n", time / OPERATION_COUNT );
175}
Note: See TracBrowser for help on using the repository browser.