OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [tests/] [tmtests/] [tm29/] [task1.c] - Blame information for rev 609

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*
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.OARcorp.com/rtems/license.html.
9
 *
10
 *  $Id: task1.c,v 1.2 2001-09-27 12:02:46 chris Exp $
11
 */
12
 
13
#define TEST_INIT
14
#include "system.h"
15
 
16
rtems_name Period_name;
17
 
18
rtems_task Tasks(
19
  rtems_task_argument argument
20
);
21
 
22
rtems_task Low_task(
23
  rtems_task_argument argument
24
);
25
 
26
rtems_unsigned32 Task_count;
27
 
28
rtems_task Init(
29
  rtems_task_argument argument
30
)
31
{
32
  rtems_id          id;
33
  rtems_unsigned32  index;
34
  rtems_status_code status;
35
 
36
  Print_Warning();
37
 
38
  puts( "\n\n*** TIME TEST 29 ***" );
39
 
40
  Period_name = rtems_build_name( 'P', 'R', 'D', ' ' );
41
 
42
  Timer_initialize();
43
    (void) rtems_rate_monotonic_create( Period_name, &id );
44
  end_time = Read_timer();
45
 
46
  put_time(
47
    "rtems_rate_monotonic_create",
48
    end_time,
49
    1,
50
    0,
51
    CALLING_OVERHEAD_RATE_MONOTONIC_CREATE
52
  );
53
 
54
  Timer_initialize();
55
    (void) rtems_rate_monotonic_period( id, 10 );
56
  end_time = Read_timer();
57
 
58
  put_time(
59
    "rtems_rate_monotonic_period: initiate period -- returns to caller",
60
    end_time,
61
    1,
62
    0,
63
    CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
64
  );
65
 
66
  Timer_initialize();
67
    (void) rtems_rate_monotonic_period( id, RTEMS_PERIOD_STATUS );
68
  end_time = Read_timer();
69
 
70
  put_time(
71
    "rtems_rate_monotonic_period: obtain status",
72
    end_time,
73
    1,
74
    0,
75
    CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
76
  );
77
 
78
  Timer_initialize();
79
    (void) rtems_rate_monotonic_cancel( id );
80
  end_time = Read_timer();
81
 
82
  put_time(
83
    "rtems_rate_monotonic_cancel",
84
    end_time,
85
    1,
86
    0,
87
    CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL
88
  );
89
 
90
  Timer_initialize();
91
    (void) rtems_rate_monotonic_delete( id );
92
  end_time = Read_timer();
93
 
94
  put_time(
95
    "rtems_rate_monotonic_delete: inactive",
96
    end_time,
97
    1,
98
    0,
99
    CALLING_OVERHEAD_RATE_MONOTONIC_DELETE
100
  );
101
 
102
  status = rtems_rate_monotonic_create( Period_name, &id );
103
  directive_failed( status, "rtems_rate_monotonic_create" );
104
 
105
  status = rtems_rate_monotonic_period( id, 10 );
106
  directive_failed( status, "rtems_rate_monotonic_period" );
107
 
108
  Timer_initialize();
109
    rtems_rate_monotonic_delete( id );
110
  end_time = Read_timer();
111
 
112
  put_time(
113
    "rtems_rate_monotonic_delete: active",
114
    end_time,
115
    1,
116
    0,
117
    CALLING_OVERHEAD_RATE_MONOTONIC_DELETE
118
  );
119
 
120
  for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
121
    status = rtems_task_create(
122
      rtems_build_name( 'T', 'E', 'S', 'T' ),
123
      128,
124
      RTEMS_MINIMUM_STACK_SIZE,
125
      RTEMS_DEFAULT_MODES,
126
      RTEMS_DEFAULT_ATTRIBUTES,
127
      &id
128
    );
129
    directive_failed( status, "rtems_task_create LOOP" );
130
 
131
    status = rtems_task_start( id, Tasks, 0 );
132
    directive_failed( status, "rtems_task_start LOOP" );
133
  }
134
 
135
  status = rtems_task_create(
136
    rtems_build_name( 'L', 'O', 'W', ' ' ),
137
    200,
138
    RTEMS_MINIMUM_STACK_SIZE,
139
    RTEMS_DEFAULT_MODES,
140
    RTEMS_DEFAULT_ATTRIBUTES,
141
    &id
142
  );
143
  directive_failed( status, "rtems_task_create LOW" );
144
 
145
  status = rtems_task_start( id, Low_task, 0 );
146
  directive_failed( status, "rtems_task_start LOW" );
147
 
148
  Task_count = 0;
149
 
150
  status = rtems_task_delete( RTEMS_SELF );
151
  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
152
}
153
 
154
rtems_task Tasks(
155
  rtems_task_argument argument
156
)
157
{
158
  rtems_id          id;
159
  rtems_status_code status;
160
 
161
  status = rtems_rate_monotonic_create( 1, &id );
162
  directive_failed( status, "rtems_rate_monotonic_create" );
163
 
164
  status = rtems_rate_monotonic_period( id, 100 );
165
  directive_failed( status, "rtems_rate_monotonic_period" );
166
 
167
  /*
168
   *  Give up the processor to allow all tasks to actually
169
   *  create and start their period timer before the benchmark
170
   *  timer is initialized.
171
   */
172
 
173
  (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
174
 
175
  Task_count++;
176
 
177
  if ( Task_count == 1 )
178
    Timer_initialize();
179
 
180
  (void) rtems_rate_monotonic_period( id, 100 );
181
}
182
 
183
rtems_task Low_task(
184
  rtems_task_argument argument
185
)
186
{
187
  rtems_unsigned32 index;
188
 
189
  end_time = Read_timer();
190
 
191
  Timer_initialize();
192
    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
193
      (void) Empty_function();
194
  overhead = Read_timer();
195
 
196
  put_time(
197
    "rtems_rate_monotonic_period: conclude periods -- caller blocks",
198
    end_time,
199
    OPERATION_COUNT,
200
    overhead,
201
    CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD
202
  );
203
 
204
  puts( "*** END OF TEST 29 ***" );
205
  exit( 0 );
206
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.