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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [tests/] [tmtests/] [tm22/] [task1.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1026 ivang
/*
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
 *  task1.c,v 1.13 2002/08/02 00:52:37 joel Exp
11
 */
12
 
13
#define TEST_INIT
14
#include "system.h"
15
 
16
rtems_id Queue_id;
17
 
18
long Buffer[4];
19
 
20
rtems_task Low_task(
21
  rtems_task_argument argument
22
);
23
 
24
rtems_task High_task(
25
  rtems_task_argument argument
26
);
27
 
28
rtems_task Preempt_task(
29
  rtems_task_argument argument
30
);
31
 
32
#define MESSAGE_SIZE (sizeof(long) * 4)
33
 
34
rtems_task Init(
35
  rtems_task_argument argument
36
)
37
{
38
  rtems_id          id;
39
  rtems_status_code status;
40
 
41
  Print_Warning();
42
 
43
  puts( "\n\n*** TIME TEST 22 ***" );
44
 
45
  status = rtems_message_queue_create(
46
    rtems_build_name( 'M', 'Q', '1', ' '),
47
    100,
48
    MESSAGE_SIZE,
49
    RTEMS_DEFAULT_ATTRIBUTES,
50
    &Queue_id
51
  );
52
  directive_failed( status, "rtems_message_queue_create" );
53
 
54
  status = rtems_task_create(
55
    rtems_build_name( 'L', 'O', 'W', ' ' ),
56
    10,
57
    RTEMS_MINIMUM_STACK_SIZE,
58
    RTEMS_NO_PREEMPT,
59
    RTEMS_DEFAULT_ATTRIBUTES,
60
    &id
61
  );
62
  directive_failed( status, "rtems_task_create" );
63
 
64
  status = rtems_task_start( id, Low_task, 0 );
65
  directive_failed( status, "rtems_task_start LOW" );
66
 
67
  status = rtems_task_create(
68
    1,
69
    11,
70
    RTEMS_MINIMUM_STACK_SIZE,
71
    RTEMS_DEFAULT_MODES,
72
    RTEMS_DEFAULT_ATTRIBUTES,
73
    &id
74
  );
75
  directive_failed( status, "rtems_task_create RTEMS_PREEMPT" );
76
 
77
  status = rtems_task_start( id, Preempt_task, 0 );
78
  directive_failed( status, "rtems_task_start RTEMS_PREEMPT" );
79
 
80
  status = rtems_task_delete( RTEMS_SELF );
81
  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
82
}
83
 
84
rtems_task High_task(
85
  rtems_task_argument argument
86
)
87
{
88
  rtems_unsigned32  count;
89
  rtems_status_code status;
90
 
91
  Timer_initialize();
92
    (void) rtems_message_queue_broadcast(
93
             Queue_id,
94
             Buffer,
95
             MESSAGE_SIZE,
96
             &count
97
           );
98
  end_time = Read_timer();
99
 
100
  put_time(
101
    "rtems_message_queue_broadcast: task readied -- returns to caller",
102
    end_time,
103
    1,
104
    0,
105
    CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
106
  );
107
 
108
  status = rtems_task_suspend(RTEMS_SELF);
109
  directive_failed( status, "rtems_task_suspend" );
110
}
111
 
112
rtems_task Low_task(
113
  rtems_task_argument argument
114
)
115
{
116
  rtems_id          id;
117
  rtems_unsigned32  index;
118
  rtems_unsigned32  count;
119
  rtems_unsigned32  size;
120
  rtems_status_code status;
121
 
122
  status = rtems_task_create(
123
    rtems_build_name( 'H', 'I', 'G', 'H' ),
124
    5,
125
    RTEMS_MINIMUM_STACK_SIZE,
126
    RTEMS_NO_PREEMPT,
127
    RTEMS_DEFAULT_ATTRIBUTES,
128
    &id
129
  );
130
  directive_failed( status, "rtems_task_create" );
131
 
132
  status = rtems_task_start( id, High_task, 0 );
133
  directive_failed( status, "rtems_task_start HIGH" );
134
 
135
  status = rtems_message_queue_receive(
136
    Queue_id,
137
    (long (*)[4]) Buffer,
138
    &size,
139
    RTEMS_DEFAULT_OPTIONS,
140
    RTEMS_NO_TIMEOUT
141
  );
142
  directive_failed( status, "message_queu_receive" );
143
 
144
  Timer_initialize();
145
    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
146
      (void) rtems_message_queue_broadcast(
147
               Queue_id,
148
               Buffer,
149
               MESSAGE_SIZE,
150
               &count
151
             );
152
  end_time = Read_timer();
153
 
154
  put_time(
155
    "rtems_message_queue_broadcast: no waiting tasks",
156
    end_time,
157
    OPERATION_COUNT,
158
    1,
159
    CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
160
  );
161
 
162
  (void) rtems_message_queue_receive(
163
           Queue_id,
164
           (long (*)[4]) Buffer,
165
           &size,
166
           RTEMS_DEFAULT_OPTIONS,
167
           RTEMS_NO_TIMEOUT
168
         );
169
 
170
  /* should go to Preempt_task here */
171
 
172
  end_time = Read_timer();
173
 
174
  put_time(
175
    "rtems_message_queue_broadcast: task readied -- preempts caller",
176
    end_time,
177
    1,
178
    0,
179
    CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST
180
  );
181
 
182
  puts( "*** END OF TEST 22 ***" );
183
  rtems_test_exit( 0 );
184
}
185
 
186
rtems_task Preempt_task(
187
  rtems_task_argument argument
188
)
189
{
190
  rtems_unsigned32  count;
191
 
192
  Timer_initialize();
193
    (void) rtems_message_queue_broadcast(
194
             Queue_id,
195
             Buffer,
196
             MESSAGE_SIZE,
197
             &count
198
           );
199
 
200
 /* should be preempted by low task */
201
}

powered by: WebSVN 2.1.0

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