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

4.104.114.84.95
Last change on this file since a7156d1 was a7156d1, checked in by Joel Sherrill <joel.sherrill@…>, on 06/03/97 at 16:00:00

Modifed to make the test run to completion. Primarily provided
the Buffer type and support routines although some work was
required to account for the directives which required message
size information.

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