source: rtems/c/src/ada-tests/sptests/sp13/sptest.adb @ ba3e1a4f

4.104.114.95
Last change on this file since ba3e1a4f was ba3e1a4f, checked in by Glenn Humphrey <glenn.humphrey@…>, on 10/10/07 at 20:58:48

2007-10-10 Glenn Humphrey <glenn.humphrey@…>

  • configure.ac, samples/base_sp/base_sp.scn, samples/base_sp/config.h, samples/base_sp/sptest.adb, samples/hello/config.h, samples/ticker/config.h, samples/ticker/ticker.scn, sptests/Makefile.am, sptests/sp01/sp01.scn, sptests/sp02/config.h, sptests/sp02/sp02.scn, sptests/sp03/config.h, sptests/sp03/sp03.scn, sptests/sp04/sp04.scn, sptests/sp04/sptest.adb, sptests/sp05/config.h, sptests/sp05/sp05.scn, sptests/sp06/config.h, sptests/sp07/config.h, sptests/sp07/sp07.scn, sptests/sp07/sptest.adb, sptests/sp07/sptest.ads, sptests/sp08/config.h, sptests/sp08/sp08.scn, sptests/sp09/Makefile.am, sptests/sp09/config.h, sptests/sp09/sp09.scn, sptests/sp09/sptest.adb, sptests/sp09/sptest.ads, sptests/sp11/config.h, sptests/sp11/sp11.scn, sptests/sp12/config.h, sptests/sp12/sp12.scn, sptests/sp13/config.h, sptests/sp13/sp13.scn, sptests/sp13/sptest.adb, sptests/sp14/config.h, sptests/sp14/sp14.scn, sptests/sp15/config.h, sptests/sp15/sp15.scn, sptests/sp16/config.h, sptests/sp16/sp16.scn, sptests/sp16/sptest.adb, sptests/sp17/config.h, sptests/sp19/config.h, sptests/sp19/sp19.scn, sptests/sp20/config.h, sptests/sp20/sp20.scn, sptests/sp22/config.h, sptests/sp22/sp22.scn, sptests/sp23/config.h, sptests/sp23/sp23.scn, sptests/sp24/config.h, sptests/sp24/sp24.scn, sptests/sp25/config.h, sptests/sp25/sp25.scn, support/init.c, support/test_support.adb, support/test_support.ads, tmtests/tm09/config.h, tmtests/tm20/tmtest.adb, tmtests/tmoverhd/dummy_rtems.adb, tmtests/tmoverhd/dummy_rtems.ads, tmtests/tmoverhd/tmtest.adb, tmtests/tmoverhd/tmtest.ads: Updated tests so that they would all compile and run without errors. Some tests that are no longer valid using the current binding were removed. Also updated the .scn files to reflect the current test output.
  • sptests/sp21/.cvsignore, sptests/sp21/Makefile.am, sptests/sp21/config.h, sptests/sp21/sp21.adb, sptests/sp21/sp21.scn, sptests/sp21/sptest.adb, sptests/sp21/sptest.ads, sptests/spsize/.cvsignore, sptests/spsize/Makefile.am, sptests/spsize/spsize.adb, sptests/spsize/sptest.adb, sptests/spsize/sptest.ads: Removed.
  • Property mode set to 100644
File size: 20.5 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 13 of the RTEMS
7--  Single Processor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-2007.
14--  On-Line Applications Research Corporation (OAR).
15--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.com/license/LICENSE.
19--
20--  $Id$
21--
22
23with INTERFACES; use INTERFACES;
24with RTEMS;
25with TEST_SUPPORT;
26with TEXT_IO;
27with UNSIGNED32_IO;
28
29package body SPTEST is
30
31--PAGE
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASK_ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT_LINE( "*** TEST 13 ***" );
44
45      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
46      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
47      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
48
49      RTEMS.TASK_CREATE(
50         SPTEST.TASK_NAME( 1 ),
51         4,
52         2048,
53         RTEMS.DEFAULT_MODES,
54         RTEMS.DEFAULT_ATTRIBUTES,
55         SPTEST.TASK_ID( 1 ),
56         STATUS
57      );
58      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
59
60      RTEMS.TASK_CREATE(
61         SPTEST.TASK_NAME( 2 ),
62         4,
63         2048,
64         RTEMS.DEFAULT_MODES,
65         RTEMS.DEFAULT_ATTRIBUTES,
66         SPTEST.TASK_ID( 2 ),
67         STATUS
68      );
69      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
70
71      RTEMS.TASK_CREATE(
72         SPTEST.TASK_NAME( 3 ),
73         4,
74         2048,
75         RTEMS.DEFAULT_MODES,
76         RTEMS.DEFAULT_ATTRIBUTES,
77         SPTEST.TASK_ID( 3 ),
78         STATUS
79      );
80      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
81
82      RTEMS.TASK_START(
83         SPTEST.TASK_ID( 1 ),
84         SPTEST.TASK_1'ACCESS,
85         0,
86         STATUS
87      );
88      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
89
90      RTEMS.TASK_START(
91         SPTEST.TASK_ID( 2 ),
92         SPTEST.TASK_2'ACCESS,
93         0,
94         STATUS
95      );
96      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
97
98      RTEMS.TASK_START(
99         SPTEST.TASK_ID( 3 ),
100         SPTEST.TASK_3'ACCESS,
101         0,
102         STATUS
103      );
104      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
105
106      SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'Q', '1', ' ', ' ' );
107      SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME(  'Q', '2', ' ', ' ' );
108      SPTEST.QUEUE_NAME( 3 ) := RTEMS.BUILD_NAME(  'Q', '3', ' ', ' ' );
109
110      RTEMS.MESSAGE_QUEUE_CREATE(
111         SPTEST.QUEUE_NAME( 1 ),
112         100,
113         16,
114         RTEMS.DEFAULT_ATTRIBUTES,
115         SPTEST.QUEUE_ID( 1 ),
116         STATUS
117      );
118      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q1" );
119
120      RTEMS.MESSAGE_QUEUE_CREATE(
121         SPTEST.QUEUE_NAME( 2 ),
122         10,
123         16,
124         RTEMS.PRIORITY,
125         SPTEST.QUEUE_ID( 2 ),
126         STATUS
127      );
128      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q2" );
129
130      RTEMS.MESSAGE_QUEUE_CREATE(
131         SPTEST.QUEUE_NAME( 3 ),
132         100,
133         16,
134         RTEMS.DEFAULT_ATTRIBUTES,
135         SPTEST.QUEUE_ID( 3 ),
136         STATUS
137      );
138      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q3" );
139
140      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
141      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
142
143   end INIT;
144
145--PAGE
146--
147--  FILL_BUFFER
148--
149
150--
151-- Depends on tricks to make the copy work.
152--
153
154   procedure FILL_BUFFER (
155      SOURCE : in     STRING;
156      BUFFER :    out SPTEST.BUFFER
157   ) is
158   begin
159
160      BUFFER.FIELD1 := RTEMS.BUILD_NAME(
161         SOURCE( SOURCE'FIRST ),
162         SOURCE( SOURCE'FIRST + 1 ),
163         SOURCE( SOURCE'FIRST + 2 ),
164         SOURCE( SOURCE'FIRST + 3 )
165      );
166
167      BUFFER.FIELD2 := RTEMS.BUILD_NAME(
168         SOURCE( SOURCE'FIRST + 4 ),
169         SOURCE( SOURCE'FIRST + 5 ),
170         SOURCE( SOURCE'FIRST + 6 ),
171         SOURCE( SOURCE'FIRST + 7 )
172      );
173
174      BUFFER.FIELD3 := RTEMS.BUILD_NAME(
175         SOURCE( SOURCE'FIRST + 8 ),
176         SOURCE( SOURCE'FIRST + 9 ),
177         SOURCE( SOURCE'FIRST + 10 ),
178         SOURCE( SOURCE'FIRST + 11 )
179      );
180
181      BUFFER.FIELD4 := RTEMS.BUILD_NAME(
182         SOURCE( SOURCE'FIRST + 12 ),
183         SOURCE( SOURCE'FIRST + 13 ),
184         SOURCE( SOURCE'FIRST + 14 ),
185         SOURCE( SOURCE'FIRST + 15 )
186      );
187
188   end FILL_BUFFER;
189
190--PAGE
191--
192--  PUT_BUFFER
193--
194
195--
196-- Depends on tricks to make the output work.
197--
198
199   procedure PUT_BUFFER (
200      BUFFER : in     SPTEST.BUFFER
201   ) is
202   begin
203
204      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
205      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
206      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
207      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
208     
209   end PUT_BUFFER;
210
211--PAGE
212--
213--  TASK_1
214--
215
216   procedure TASK_1 (
217      ARGUMENT : in     RTEMS.TASK_ARGUMENT
218   ) is
219      QID            : RTEMS.ID;
220      BUFFER         : SPTEST.BUFFER;
221      BUFFER_POINTER : RTEMS.ADDRESS;
222      COUNT          : RTEMS.UNSIGNED32;
223      MESSAGE_SIZE   : RTEMS.UNSIGNED32;
224      STATUS         : RTEMS.STATUS_CODES;
225   begin
226
227      BUFFER_POINTER := BUFFER'ADDRESS;
228
229      RTEMS.MESSAGE_QUEUE_IDENT(
230         SPTEST.QUEUE_NAME( 1 ),
231         RTEMS.SEARCH_ALL_NODES,
232         QID,
233         STATUS
234      );
235      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_IDENT" );
236      TEXT_IO.PUT( "TA1 - message_queue_ident - qid => " );
237      UNSIGNED32_IO.PUT( QID, WIDTH => 8, BASE => 16 );
238      TEXT_IO.NEW_LINE;
239
240      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 1 ", BUFFER );
241      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 1" );
242      RTEMS.MESSAGE_QUEUE_SEND(
243         SPTEST.QUEUE_ID( 1 ),
244         BUFFER_POINTER,
245         16,
246         STATUS
247      );
248      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
249   
250      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 1 ", BUFFER );
251      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 1" );
252      RTEMS.MESSAGE_QUEUE_SEND(
253         SPTEST.QUEUE_ID( 1 ),
254         BUFFER_POINTER,
255         16,
256         STATUS
257      );
258      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
259
260      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
261      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
262      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
263         
264      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
265      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 1" );
266      RTEMS.MESSAGE_QUEUE_SEND(
267         SPTEST.QUEUE_ID( 1 ),
268         BUFFER_POINTER,
269         16,
270         STATUS
271      );
272      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
273
274      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
275      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
276      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
277         
278TEST_SUPPORT.PAUSE;
279
280      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 2 ", BUFFER );
281      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 2" );
282      RTEMS.MESSAGE_QUEUE_SEND(
283         SPTEST.QUEUE_ID( 2 ),
284         BUFFER_POINTER,
285         16,
286         STATUS
287      );
288      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
289
290      TEXT_IO.PUT(
291         "TA1 - message_queue_receive - receive from queue 1 - "
292      );
293      TEXT_IO.PUT_LINE( "10 second timeout" );
294      RTEMS.MESSAGE_QUEUE_RECEIVE(
295         SPTEST.QUEUE_ID( 1 ),
296         BUFFER_POINTER,
297         RTEMS.DEFAULT_OPTIONS,
298         10 * TEST_SUPPORT.TICKS_PER_SECOND,
299         MESSAGE_SIZE,
300         STATUS
301      );
302      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
303      TEXT_IO.PUT( "TA1 - buffer received: " );
304      SPTEST.PUT_BUFFER( BUFFER );
305      TEXT_IO.NEW_LINE;
306
307      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
308      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
309      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
310
311      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
312      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
313      RTEMS.MESSAGE_QUEUE_SEND(
314         SPTEST.QUEUE_ID( 3 ),
315         BUFFER_POINTER,
316         16,
317         STATUS
318      );
319      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
320
321      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
322      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
323      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
324         
325TEST_SUPPORT.PAUSE;
326
327      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
328      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
329      RTEMS.MESSAGE_QUEUE_SEND(
330         SPTEST.QUEUE_ID( 3 ),
331         BUFFER_POINTER,
332         16,
333         STATUS
334      );
335      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
336
337      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
338      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
339      RTEMS.MESSAGE_QUEUE_SEND(
340         SPTEST.QUEUE_ID( 3 ),
341         BUFFER_POINTER,
342         16,
343         STATUS
344      );
345      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
346
347      SPTEST.FILL_BUFFER( "BUFFER 4 TO Q 3 ", BUFFER );
348      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 4 TO Q 3" );
349      RTEMS.MESSAGE_QUEUE_SEND(
350         SPTEST.QUEUE_ID( 3 ),
351         BUFFER_POINTER,
352         16,
353         STATUS
354      );
355      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
356
357      SPTEST.FILL_BUFFER( "BUFFER 5 TO Q 3 ", BUFFER );
358      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 5 TO Q 3" );
359      RTEMS.MESSAGE_QUEUE_URGENT(
360         SPTEST.QUEUE_ID( 3 ),
361         BUFFER_POINTER,
362         16,
363         STATUS
364      );
365      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
366
367      for TIMES in 1 .. 4
368      loop
369         TEXT_IO.PUT(
370            "TA1 - message_queue_receive - receive from queue 3 - "
371         );
372         TEXT_IO.PUT_LINE( "WAIT FOREVER" );
373         RTEMS.MESSAGE_QUEUE_RECEIVE(
374            SPTEST.QUEUE_ID( 3 ),
375            BUFFER_POINTER,
376            RTEMS.DEFAULT_OPTIONS,
377            RTEMS.NO_TIMEOUT,
378            MESSAGE_SIZE,
379            STATUS
380         );
381         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
382         TEXT_IO.PUT( "TA1 - buffer received: " );
383         SPTEST.PUT_BUFFER( BUFFER );
384         TEXT_IO.NEW_LINE;
385      end loop;
386
387      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
388      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
389      RTEMS.MESSAGE_QUEUE_URGENT(
390         SPTEST.QUEUE_ID( 2 ),
391         BUFFER_POINTER,
392         16,
393         STATUS
394      );
395      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
396
397      TEXT_IO.PUT(
398        "TA1 - message_queue_receive - receive from queue 2 - "
399      );
400      TEXT_IO.PUT_LINE( "WAIT FOREVER" );
401      RTEMS.MESSAGE_QUEUE_RECEIVE(
402         SPTEST.QUEUE_ID( 2 ),
403         BUFFER_POINTER,
404         RTEMS.DEFAULT_OPTIONS,
405         RTEMS.NO_TIMEOUT,
406         MESSAGE_SIZE,
407         STATUS
408      );
409      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
410      TEXT_IO.PUT( "TA1 - buffer received: " );
411      SPTEST.PUT_BUFFER( BUFFER );
412      TEXT_IO.NEW_LINE;
413
414TEST_SUPPORT.PAUSE;
415
416      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
417      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
418      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
419   
420      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
421      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
422      RTEMS.MESSAGE_QUEUE_URGENT(
423         SPTEST.QUEUE_ID( 2 ),
424         BUFFER_POINTER,
425         16,
426         STATUS
427      );
428      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
429
430      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 2" );
431      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
432      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
433   
434      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
435      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
436      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
437      TEXT_IO.PUT( "TA1 - " );
438      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
439      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
440     
441      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
442      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
443      RTEMS.MESSAGE_QUEUE_SEND(
444         SPTEST.QUEUE_ID( 3 ),
445         BUFFER_POINTER,
446         16,
447         STATUS
448      );
449      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
450
451      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
452      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
453      RTEMS.MESSAGE_QUEUE_SEND(
454         SPTEST.QUEUE_ID( 3 ),
455         BUFFER_POINTER,
456         16,
457         STATUS
458      );
459      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
460
461      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
462      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
463      RTEMS.MESSAGE_QUEUE_SEND(
464         SPTEST.QUEUE_ID( 3 ),
465         BUFFER_POINTER,
466         16,
467         STATUS
468      );
469      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
470
471      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
472      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
473      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
474      TEXT_IO.PUT( "TA1 - " );
475      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
476      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
477     
478      TEXT_IO.PUT_LINE(
479         "TA1 - message_queue_send - until all message buffers consumed"
480      );
481      loop
482
483         RTEMS.MESSAGE_QUEUE_SEND(
484            SPTEST.QUEUE_ID( 3 ),
485            BUFFER_POINTER,
486            16,
487            STATUS
488         );
489         
490         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TOO_MANY );
491
492         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
493         
494      end loop;
495
496      TEXT_IO.PUT_LINE(
497         "TA1 - message_queue_send - all message buffers consumed"
498      );
499
500      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
501      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
502      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
503      TEXT_IO.PUT( "TA1 - " );
504      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
505      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
506     
507      TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
508      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
509
510   end TASK_1;
511
512--PAGE
513--
514--  TASK_2
515--
516
517   procedure TASK_2 (
518      ARGUMENT : in     RTEMS.TASK_ARGUMENT
519   ) is
520      BUFFER            : SPTEST.BUFFER;
521      BUFFER_POINTER    : RTEMS.ADDRESS;
522      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
523      MESSAGE_SIZE      : RTEMS.UNSIGNED32;
524      STATUS            : RTEMS.STATUS_CODES;
525   begin
526
527      BUFFER_POINTER := BUFFER'ADDRESS;
528
529      TEXT_IO.PUT_LINE(
530         "TA2 - message_queue_receive - receive from queue 1 - NO_WAIT"
531      );
532      RTEMS.MESSAGE_QUEUE_RECEIVE(
533         SPTEST.QUEUE_ID( 1 ),
534         BUFFER_POINTER,
535         RTEMS.NO_WAIT,
536         RTEMS.NO_TIMEOUT,
537         MESSAGE_SIZE,
538         STATUS
539      );
540      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
541      TEXT_IO.PUT( "TA2 - buffer received: " );
542      SPTEST.PUT_BUFFER( BUFFER );
543      TEXT_IO.NEW_LINE;
544
545      TEXT_IO.PUT_LINE(
546         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
547      );
548      RTEMS.MESSAGE_QUEUE_RECEIVE(
549         SPTEST.QUEUE_ID( 1 ),
550         BUFFER_POINTER,
551         RTEMS.DEFAULT_OPTIONS,
552         RTEMS.NO_TIMEOUT,
553         MESSAGE_SIZE,
554         STATUS
555      );
556      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
557      TEXT_IO.PUT( "TA2 - buffer received: " );
558      SPTEST.PUT_BUFFER( BUFFER );
559      TEXT_IO.NEW_LINE;
560
561      TEXT_IO.PUT_LINE(
562         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
563      );
564      RTEMS.MESSAGE_QUEUE_RECEIVE(
565         SPTEST.QUEUE_ID( 1 ),
566         BUFFER_POINTER,
567         RTEMS.DEFAULT_OPTIONS,
568         RTEMS.NO_TIMEOUT,
569         MESSAGE_SIZE,
570         STATUS
571      );
572      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
573      TEXT_IO.PUT( "TA2 - buffer received: " );
574      SPTEST.PUT_BUFFER( BUFFER );
575      TEXT_IO.NEW_LINE;
576
577      TEXT_IO.PUT_LINE(
578         "TA2 - task_set_priority - make self highest priority task"
579      );
580      RTEMS.TASK_SET_PRIORITY(
581         RTEMS.SELF,
582         3,
583         PREVIOUS_PRIORITY,
584         STATUS
585      );
586      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
587
588      TEXT_IO.PUT_LINE(
589         "TA2 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
590      );
591      RTEMS.MESSAGE_QUEUE_RECEIVE(
592         SPTEST.QUEUE_ID( 2 ),
593         BUFFER_POINTER,
594         RTEMS.DEFAULT_OPTIONS,
595         RTEMS.NO_TIMEOUT,
596         MESSAGE_SIZE,
597         STATUS
598      );
599      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
600      TEXT_IO.PUT( "TA2 - buffer received: " );
601      SPTEST.PUT_BUFFER( BUFFER );
602      TEXT_IO.NEW_LINE;
603
604      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 2 ", BUFFER );
605      TEXT_IO.PUT_LINE( "TA2 - message_queue_send - BUFFER 2 TO Q 2" );
606      RTEMS.MESSAGE_QUEUE_SEND(
607         SPTEST.QUEUE_ID( 2 ),
608         BUFFER_POINTER,
609         16,
610         STATUS
611      );
612      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
613   
614      TEXT_IO.PUT_LINE(
615    "TA2 - message_queue_receive - receive from queue 1 - 10 second timeout"
616      );
617      RTEMS.MESSAGE_QUEUE_RECEIVE(
618         SPTEST.QUEUE_ID( 1 ),
619         BUFFER_POINTER,
620         RTEMS.DEFAULT_OPTIONS,
621         10 * TEST_SUPPORT.TICKS_PER_SECOND,
622         MESSAGE_SIZE,
623         STATUS
624      );
625      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
626      TEXT_IO.PUT( "TA2 - buffer received: " );
627      SPTEST.PUT_BUFFER( BUFFER );
628      TEXT_IO.NEW_LINE;
629
630      TEXT_IO.PUT_LINE(
631         "TA2 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
632      );
633      RTEMS.MESSAGE_QUEUE_RECEIVE(
634         SPTEST.QUEUE_ID( 3 ),
635         BUFFER_POINTER,
636         RTEMS.DEFAULT_OPTIONS,
637         RTEMS.NO_TIMEOUT,
638         MESSAGE_SIZE,
639         STATUS
640      );
641      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
642      TEXT_IO.PUT( "TA2 - buffer received: " );
643      SPTEST.PUT_BUFFER( BUFFER );
644      TEXT_IO.NEW_LINE;
645
646   end TASK_2;
647
648--PAGE
649--
650--  TASK_3
651--
652
653   procedure TASK_3 (
654      ARGUMENT : in     RTEMS.TASK_ARGUMENT
655   ) is
656      BUFFER         : SPTEST.BUFFER;
657      BUFFER_POINTER : RTEMS.ADDRESS;
658      COUNT          : RTEMS.UNSIGNED32;
659      MESSAGE_SIZE   : RTEMS.UNSIGNED32;
660      STATUS         : RTEMS.STATUS_CODES;
661   begin
662
663      BUFFER_POINTER := BUFFER'ADDRESS;
664
665      TEXT_IO.PUT_LINE(
666         "TA3 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
667      );
668      RTEMS.MESSAGE_QUEUE_RECEIVE(
669         SPTEST.QUEUE_ID( 2 ),
670         BUFFER_POINTER,
671         RTEMS.DEFAULT_OPTIONS,
672         RTEMS.NO_TIMEOUT,
673         MESSAGE_SIZE,
674         STATUS
675      );
676      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
677      TEXT_IO.PUT( "TA3 - buffer received: " );
678      SPTEST.PUT_BUFFER( BUFFER );
679      TEXT_IO.NEW_LINE;
680
681      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
682      TEXT_IO.PUT_LINE( "TA3 - message_queue_broadcast - BUFFER 3 TO Q 1" );
683      RTEMS.MESSAGE_QUEUE_BROADCAST(
684         SPTEST.QUEUE_ID( 1 ),
685         BUFFER_POINTER,
686         16,
687         COUNT,
688         STATUS
689      );
690      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
691      TEXT_IO.PUT( "TA3 - number of tasks awakened = " );
692      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
693      TEXT_IO.NEW_LINE;
694     
695      TEXT_IO.PUT_LINE(
696         "TA3 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
697      );
698      RTEMS.MESSAGE_QUEUE_RECEIVE(
699         SPTEST.QUEUE_ID( 3 ),
700         BUFFER_POINTER,
701         RTEMS.DEFAULT_OPTIONS,
702         RTEMS.NO_TIMEOUT,
703         MESSAGE_SIZE,
704         STATUS
705      );
706      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
707      TEXT_IO.PUT( "TA3 - buffer received: " );
708      SPTEST.PUT_BUFFER( BUFFER );
709      TEXT_IO.NEW_LINE;
710
711      TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
712      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
713      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
714
715   end TASK_3;
716
717end SPTEST;
Note: See TracBrowser for help on using the repository browser.