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

Subversion Repositories openrisc

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

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:42 chris Exp $
11
 */
12
 
13
#define TEST_INIT
14
#include "system.h"
15
 
16
rtems_id Queue_id;
17
long Buffer[4];
18
 
19
rtems_task High_task(
20
  rtems_task_argument argument
21
);
22
 
23
rtems_task Middle_tasks(
24
  rtems_task_argument argument
25
);
26
 
27
rtems_task Low_task(
28
  rtems_task_argument argument
29
);
30
 
31
void test_init();
32
 
33
rtems_task Init(
34
  rtems_task_argument argument
35
)
36
{
37
  rtems_status_code status;
38
 
39
  Print_Warning();
40
 
41
  puts( "\n\n*** TIME TEST 10 ***" );
42
 
43
  test_init();
44
 
45
  status = rtems_task_delete( RTEMS_SELF );
46
  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
47
}
48
 
49
void test_init()
50
{
51
  rtems_unsigned32    index;
52
  rtems_unsigned32    size;
53
  rtems_task_entry    task_entry;
54
  rtems_status_code   status;
55
  rtems_task_priority priority;
56
  rtems_id            task_id;
57
 
58
  priority = 5;
59
 
60
  for( index = 0; index <= OPERATION_COUNT ; index++ ) {
61
    status = rtems_task_create(
62
      rtems_build_name( 'T', 'I', 'M', 'E' ),
63
      priority,
64
      RTEMS_MINIMUM_STACK_SIZE,
65
      RTEMS_DEFAULT_MODES,
66
      RTEMS_DEFAULT_ATTRIBUTES,
67
      &task_id
68
    );
69
    directive_failed( status, "rtems_task_create LOOP" );
70
 
71
    priority++;
72
 
73
    if ( index==0 )                    task_entry = High_task;
74
    else if ( index==OPERATION_COUNT ) task_entry = Low_task;
75
    else                               task_entry = Middle_tasks;
76
 
77
    status = rtems_task_start( task_id, task_entry, 0 );
78
    directive_failed( status, "rtems_task_start LOOP" );
79
  }
80
 
81
  status = rtems_message_queue_create(
82
    1,
83
    OPERATION_COUNT,
84
    16,
85
    RTEMS_DEFAULT_ATTRIBUTES,
86
    &Queue_id
87
  );
88
  directive_failed( status, "rtems_message_queue_create" );
89
 
90
  Timer_initialize();
91
    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
92
      (void) Empty_function();
93
  overhead = Read_timer();
94
 
95
  Timer_initialize();
96
    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
97
      (void) rtems_message_queue_receive(
98
               Queue_id,
99
               (long (*)[4]) Buffer,
100
               &size,
101
               RTEMS_NO_WAIT,
102
               RTEMS_NO_TIMEOUT
103
             );
104
  end_time = Read_timer();
105
 
106
  put_time(
107
    "rtems_message_queue_receive: not available -- NO_WAIT",
108
    end_time,
109
    OPERATION_COUNT,
110
    overhead,
111
    CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
112
  );
113
 
114
}
115
 
116
rtems_task High_task(
117
  rtems_task_argument argument
118
)
119
{
120
  rtems_unsigned32 size;
121
 
122
  Timer_initialize();
123
     (void) rtems_message_queue_receive(
124
              Queue_id,
125
              (long (*)[4]) Buffer,
126
              &size,
127
              RTEMS_DEFAULT_OPTIONS,
128
              RTEMS_NO_TIMEOUT
129
            );
130
}
131
 
132
rtems_task Middle_tasks(
133
  rtems_task_argument argument
134
)
135
{
136
  rtems_unsigned32 size;
137
 
138
  (void) rtems_message_queue_receive(
139
           Queue_id,
140
           (long (*)[4]) Buffer,
141
           &size,
142
           RTEMS_DEFAULT_OPTIONS,
143
           RTEMS_NO_TIMEOUT
144
         );
145
}
146
 
147
 
148
rtems_task Low_task(
149
  rtems_task_argument argument
150
)
151
{
152
  end_time = Read_timer();
153
 
154
  put_time(
155
    "rtems_message_queue_receive: not available -- caller blocks",
156
    end_time,
157
    OPERATION_COUNT,
158
    0,
159
    CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
160
  );
161
 
162
  puts( "*** END OF TEST 10 ***" );
163
  exit( 0 );
164
}

powered by: WebSVN 2.1.0

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