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

4.104.114.84.95
Last change on this file since cf1ced66 was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:32:11

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

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