source:
rtems/testsuites/tmtests/tm13/task1.c
@
95a81ab
Last change on this file since 95a81ab was 95a81ab, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:53:55 | |
---|---|
|
|
File size: 3.2 KB |
Rev | Line | |
---|---|---|
[ac7d5ef0] | 1 | /* |
2 | * | |
[08311cc3] | 3 | * COPYRIGHT (c) 1989-1999. |
[ac7d5ef0] | 4 | * On-Line Applications Research Corporation (OAR). |
5 | * | |
[98e4ebf5] | 6 | * The license and distribution terms for this file may be |
7 | * found in the file LICENSE in this distribution or at | |
[95a81ab] | 8 | * http://www.rtems.com/license/LICENSE. |
[ac7d5ef0] | 9 | * |
[3235ad9] | 10 | * $Id$ |
[ac7d5ef0] | 11 | */ |
12 | ||
[3a4ae6c] | 13 | #define TEST_INIT |
[ac7d5ef0] | 14 | #include "system.h" |
15 | ||
16 | rtems_id Queue_id; | |
17 | ||
18 | long Buffer[4]; | |
19 | ||
20 | rtems_task test_init( | |
21 | rtems_task_argument argument | |
22 | ); | |
23 | ||
24 | rtems_task Middle_tasks( | |
25 | rtems_task_argument argument | |
26 | ); | |
27 | ||
28 | rtems_task High_task( | |
29 | rtems_task_argument argument | |
30 | ); | |
31 | ||
[df49c60] | 32 | #define MESSAGE_SIZE (sizeof(long) * 4) |
33 | ||
[ac7d5ef0] | 34 | void Init( |
35 | rtems_task_argument argument | |
36 | ) | |
37 | { | |
38 | rtems_status_code status; | |
39 | rtems_id id; | |
40 | ||
[3a4ae6c] | 41 | Print_Warning(); |
42 | ||
[ac7d5ef0] | 43 | puts( "\n\n*** TIME TEST 13 ***" ); |
44 | ||
45 | status = rtems_task_create( | |
46 | 1, | |
47 | 251, | |
[3652ad35] | 48 | RTEMS_MINIMUM_STACK_SIZE, |
[ac7d5ef0] | 49 | RTEMS_DEFAULT_MODES, |
50 | RTEMS_DEFAULT_ATTRIBUTES, | |
51 | &id | |
52 | ); | |
53 | directive_failed( status, "rtems_task_create" ); | |
54 | ||
55 | status = rtems_task_start( id, test_init, 0 ); | |
56 | directive_failed( status, "rtems_task_start" ); | |
57 | ||
58 | status = rtems_task_delete( RTEMS_SELF ); | |
59 | directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); | |
60 | } | |
61 | ||
62 | rtems_task test_init( | |
63 | rtems_task_argument argument | |
64 | ) | |
65 | { | |
66 | rtems_unsigned32 index; | |
67 | rtems_task_entry task_entry; | |
68 | rtems_task_priority priority; | |
69 | rtems_id task_id; | |
70 | rtems_status_code status; | |
71 | ||
72 | /* As each task is started, it preempts this task and | |
73 | * performs a blocking rtems_message_queue_receive. Upon completion of | |
74 | * this loop all created tasks are blocked. | |
75 | */ | |
76 | ||
77 | status = rtems_message_queue_create( | |
78 | rtems_build_name( 'M', 'Q', '1', ' ' ), | |
79 | OPERATION_COUNT, | |
[df49c60] | 80 | MESSAGE_SIZE, |
[ac7d5ef0] | 81 | RTEMS_DEFAULT_ATTRIBUTES, |
82 | &Queue_id | |
83 | ); | |
84 | directive_failed( status, "rtems_message_queue_create" ); | |
85 | ||
86 | priority = 250; | |
87 | ||
88 | for( index = 0; index < OPERATION_COUNT ; index++ ) { | |
89 | status = rtems_task_create( | |
90 | rtems_build_name( 'T', 'I', 'M', 'E' ), | |
91 | priority, | |
[3652ad35] | 92 | RTEMS_MINIMUM_STACK_SIZE, |
[ac7d5ef0] | 93 | RTEMS_DEFAULT_MODES, |
94 | RTEMS_DEFAULT_ATTRIBUTES, | |
95 | &task_id | |
96 | ); | |
97 | directive_failed( status, "rtems_task_create LOOP" ); | |
98 | ||
99 | priority--; | |
100 | ||
101 | if ( index==OPERATION_COUNT-1 ) task_entry = High_task; | |
102 | else task_entry = Middle_tasks; | |
103 | ||
104 | status = rtems_task_start( task_id, task_entry, 0 ); | |
105 | directive_failed( status, "rtems_task_start LOOP" ); | |
106 | } | |
107 | ||
108 | Timer_initialize(); | |
[df49c60] | 109 | (void) rtems_message_queue_urgent( Queue_id, Buffer, MESSAGE_SIZE ); |
[ac7d5ef0] | 110 | } |
111 | ||
112 | rtems_task Middle_tasks( | |
113 | rtems_task_argument argument | |
114 | ) | |
115 | { | |
[4b374f36] | 116 | rtems_unsigned32 size; |
117 | ||
[ac7d5ef0] | 118 | (void) rtems_message_queue_receive( |
119 | Queue_id, | |
120 | (long (*)[4]) Buffer, | |
[4b374f36] | 121 | &size, |
[ac7d5ef0] | 122 | RTEMS_DEFAULT_OPTIONS, |
123 | RTEMS_NO_TIMEOUT | |
124 | ); | |
125 | ||
[4b374f36] | 126 | (void) rtems_message_queue_urgent( Queue_id, (long (*)[4]) Buffer, size ); |
[ac7d5ef0] | 127 | } |
128 | ||
129 | rtems_task High_task( | |
130 | rtems_task_argument argument | |
131 | ) | |
132 | { | |
[4b374f36] | 133 | rtems_unsigned32 size; |
134 | ||
[ac7d5ef0] | 135 | (void) rtems_message_queue_receive( |
136 | Queue_id, | |
137 | (long (*)[4]) Buffer, | |
[4b374f36] | 138 | &size, |
[ac7d5ef0] | 139 | RTEMS_DEFAULT_OPTIONS, |
140 | RTEMS_NO_TIMEOUT | |
141 | ); | |
142 | ||
143 | end_time = Read_timer(); | |
144 | ||
145 | put_time( | |
[5c491aef] | 146 | "rtems_message_queue_urgent: task readied -- preempts caller", |
[ac7d5ef0] | 147 | end_time, |
148 | OPERATION_COUNT, | |
149 | 0, | |
150 | CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT | |
151 | ); | |
152 | ||
[3a4ae6c] | 153 | puts( "*** END OF TEST 13 ***" ); |
[b454bc9] | 154 | rtems_test_exit( 0 ); |
[ac7d5ef0] | 155 | } |
Note: See TracBrowser
for help on using the repository browser.