source: rtems/testsuites/tmtests/tm01/task1.c @ 4074e70b

4.104.114.95
Last change on this file since 4074e70b was 4074e70b, checked in by Joel Sherrill <joel.sherrill@…>, on 08/31/08 at 16:47:18

2008-08-31 Joel Sherrill <joel.sherrill@…>

  • tm01/task1.c, tm02/task1.c, tm03/task1.c, tm04/task1.c, tm05/task1.c, tm06/task1.c, tm07/task1.c, tm08/task1.c, tm09/task1.c, tm10/task1.c, tm11/task1.c, tm12/task1.c, tm13/task1.c, tm14/task1.c, tm15/task1.c, tm16/task1.c, tm17/task1.c, tm18/task1.c, tm19/task1.c, tm20/task1.c, tm21/task1.c, tm22/task1.c, tm23/task1.c, tm24/task1.c, tm25/task1.c, tm26/task1.c, tm27/task1.c, tm28/task1.c, tm29/task1.c, tmck/task1.c, tmoverhd/testtask.c: Rename timer driver methods to follow RTEMS programming conventions.
  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*
2 *
3 *  COPYRIGHT (c) 1989-1999.
4 *  On-Line Applications Research Corporation (OAR).
5 *
6 *  The license and distribution terms for this file may be
7 *  found in the file LICENSE in this distribution or at
8 *  http://www.rtems.com/license/LICENSE.
9 *
10 *  $Id$
11 */
12
13#define CONFIGURE_INIT
14#include "system.h"
15
16rtems_task Test_task(
17  rtems_task_argument argument
18);
19
20rtems_task Init(
21  rtems_task_argument argument
22)
23{
24  rtems_status_code status;
25
26  Print_Warning();
27
28  puts( "\n\n*** TIME TEST 1 ***" );
29
30  Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
31  Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' );
32  Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' );
33
34  status = rtems_task_create(
35    Task_name[ 1 ],
36    128,
37    RTEMS_MINIMUM_STACK_SIZE,
38    RTEMS_DEFAULT_MODES,
39    RTEMS_DEFAULT_ATTRIBUTES,
40    &Task_id[ 1 ]
41  );
42  directive_failed( status, "rtems_task_create of TA1" );
43
44  status = rtems_task_start( Task_id[ 1 ], Test_task, 0 );
45  directive_failed( status, "rtems_task_start of TA1" );
46
47  status = rtems_task_delete( RTEMS_SELF );
48  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
49
50}
51
52rtems_task Test_task(
53  rtems_task_argument argument
54)
55{
56  uint32_t    semaphore_obtain_time;
57  uint32_t    semaphore_release_time;
58  uint32_t    semaphore_obtain_no_wait_time;
59  uint32_t    semaphore_obtain_loop_time;
60  uint32_t    semaphore_release_loop_time;
61  uint32_t    index;
62  uint32_t    iterations;
63  rtems_name        name;
64  rtems_id          smid;
65  rtems_status_code status;
66
67  name = rtems_build_name( 'S', 'M', '1', ' ' );
68
69  semaphore_obtain_time          = 0;
70  semaphore_release_time         = 0;
71  semaphore_obtain_no_wait_time  = 0;
72  semaphore_obtain_loop_time     = 0;
73  semaphore_release_loop_time    = 0;
74
75
76  /* Time one invocation of rtems_semaphore_create */
77
78  benchmark_timerinitialize();
79    (void) rtems_semaphore_create(
80      name,
81      OPERATION_COUNT,
82      RTEMS_DEFAULT_MODES,
83      RTEMS_NO_PRIORITY,
84      &smid
85    );
86  end_time = benchmark_timerread();
87  put_time(
88    "rtems_semaphore_create",
89    end_time,
90    1,
91    0,
92    CALLING_OVERHEAD_SEMAPHORE_CREATE
93  );
94
95  /* Time one invocation of rtems_semaphore_delete */
96
97  benchmark_timerinitialize();
98    (void) rtems_semaphore_delete( smid );
99  end_time = benchmark_timerread();
100  put_time(
101    "rtems_semaphore_delete",
102    end_time,
103    1,
104    0,
105    CALLING_OVERHEAD_SEMAPHORE_CREATE
106  );
107
108  status = rtems_semaphore_create(
109    name,
110    OPERATION_COUNT,
111    RTEMS_DEFAULT_ATTRIBUTES,
112    RTEMS_NO_PRIORITY,
113    &smid
114  );
115
116  for ( iterations=OPERATION_COUNT ; iterations ; iterations-- ) {
117
118    benchmark_timerinitialize();
119      for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
120        (void) benchmark_timerempty_function();
121    end_time = benchmark_timerread();
122
123    semaphore_obtain_loop_time  += end_time;
124    semaphore_release_loop_time += end_time;
125
126    /* rtems_semaphore_obtain (available) */
127
128    benchmark_timerinitialize();
129      for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
130        (void) rtems_semaphore_obtain(
131          smid,
132          RTEMS_DEFAULT_OPTIONS,
133          RTEMS_NO_TIMEOUT
134        );
135    end_time = benchmark_timerread();
136
137    semaphore_obtain_time += end_time;
138
139    /* rtems_semaphore_release */
140
141    benchmark_timerinitialize();
142      for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
143        (void) rtems_semaphore_release( smid );
144    end_time = benchmark_timerread();
145
146    semaphore_release_time += end_time;
147
148    /* semaphore obtain (RTEMS_NO_WAIT) */
149    benchmark_timerinitialize();
150      for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
151        rtems_semaphore_obtain( smid, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT );
152    semaphore_obtain_no_wait_time += benchmark_timerread();
153
154    benchmark_timerinitialize();
155      for ( index = 1 ; index<=OPERATION_COUNT ; index++ )
156        rtems_semaphore_release( smid );
157    end_time = benchmark_timerread();
158
159    semaphore_release_time += end_time;
160  }
161
162  put_time(
163    "rtems_semaphore_obtain: available",
164    semaphore_obtain_time,
165    OPERATION_COUNT * OPERATION_COUNT,
166    semaphore_obtain_loop_time,
167    CALLING_OVERHEAD_SEMAPHORE_OBTAIN
168  );
169
170  put_time(
171    "rtems_semaphore_obtain: not available -- NO_WAIT",
172    semaphore_obtain_no_wait_time,
173    OPERATION_COUNT * OPERATION_COUNT,
174    semaphore_obtain_loop_time,
175    CALLING_OVERHEAD_SEMAPHORE_OBTAIN
176  );
177
178  put_time(
179    "rtems_semaphore_release: no waiting tasks",
180    semaphore_release_time,
181    OPERATION_COUNT * OPERATION_COUNT * 2,
182    semaphore_release_loop_time * 2,
183    CALLING_OVERHEAD_SEMAPHORE_RELEASE
184  );
185
186  puts( "*** END OF TEST 1 ***" );
187  rtems_test_exit( 0 );
188}
Note: See TracBrowser for help on using the repository browser.