source:
rtems/c/src/tests/mptests/mp03/task1.c
@
d7a0857
Last change on this file since d7a0857 was d7a0857, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:53:31 | |
---|---|
|
|
File size: 3.4 KB |
Line | |
---|---|
1 | /* Test_task |
2 | * |
3 | * This task suspends and resumes a remote task. |
4 | * |
5 | * Input parameters: |
6 | * argument - task argument |
7 | * |
8 | * Output parameters: NONE |
9 | * |
10 | * COPYRIGHT (c) 1989-1999. |
11 | * On-Line Applications Research Corporation (OAR). |
12 | * |
13 | * The license and distribution terms for this file may be |
14 | * found in the file LICENSE in this distribution or at |
15 | * http://www.rtems.com/license/LICENSE. |
16 | * |
17 | * $Id$ |
18 | */ |
19 | |
20 | #include "system.h" |
21 | |
22 | /*PAGE |
23 | * |
24 | * Test_Task_Support |
25 | * |
26 | */ |
27 | |
28 | void Test_Task_Support( |
29 | rtems_unsigned32 node |
30 | ) |
31 | { |
32 | rtems_event_set events; |
33 | rtems_status_code status; |
34 | |
35 | if ( Multiprocessing_configuration.node == node ) { |
36 | |
37 | for ( ; ; ) { |
38 | |
39 | status = rtems_event_receive( |
40 | RTEMS_EVENT_16, |
41 | RTEMS_NO_WAIT, |
42 | RTEMS_NO_TIMEOUT, |
43 | &events |
44 | ); |
45 | |
46 | if ( status == RTEMS_SUCCESSFUL ) |
47 | break; |
48 | |
49 | fatal_directive_status(status, RTEMS_UNSATISFIED, "rtems_event_receive"); |
50 | |
51 | status = rtems_task_wake_after( 2 * TICKS_PER_SECOND ); |
52 | directive_failed( status, "rtems_task_wake_after" ); |
53 | |
54 | put_name( Task_name[ node ], FALSE ); |
55 | puts( " - Suspending remote task" ); |
56 | |
57 | status = rtems_task_suspend( remote_tid ); |
58 | directive_failed( status, "rtems_task_suspend" ); |
59 | |
60 | status = rtems_task_wake_after( 2 * TICKS_PER_SECOND ); |
61 | directive_failed( status, "rtems_task_wake_after" ); |
62 | |
63 | put_name( Task_name[ node ], FALSE ); |
64 | puts( " - Resuming remote task" ); |
65 | |
66 | status = rtems_task_resume( remote_tid ) ; |
67 | directive_failed( status, "rtems_task_resume" ); |
68 | |
69 | } |
70 | |
71 | } else { |
72 | |
73 | for ( ; ; ) { |
74 | status = rtems_event_receive( |
75 | RTEMS_EVENT_16, |
76 | RTEMS_NO_WAIT, |
77 | RTEMS_NO_TIMEOUT, |
78 | &events |
79 | ); |
80 | |
81 | if ( status == RTEMS_SUCCESSFUL ) |
82 | break; |
83 | |
84 | fatal_directive_status(status, RTEMS_UNSATISFIED, "rtems_event_receive"); |
85 | |
86 | put_name( Task_name[ remote_node ], FALSE ); |
87 | puts( " - have I been suspended???" ); |
88 | |
89 | status = rtems_task_wake_after( TICKS_PER_SECOND / 2 ); |
90 | directive_failed( status, "rtems_task_wake_after" ); |
91 | } |
92 | |
93 | } |
94 | |
95 | } |
96 | |
97 | /*PAGE |
98 | * |
99 | * Test_task |
100 | */ |
101 | |
102 | rtems_task Test_task( |
103 | rtems_task_argument argument |
104 | ) |
105 | { |
106 | rtems_id tid; |
107 | rtems_status_code status; |
108 | |
109 | status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid ); |
110 | directive_failed( status, "rtems_task_ident" ); |
111 | |
112 | puts( "Getting TID of remote task" ); |
113 | remote_node = (Multiprocessing_configuration.node == 1) ? 2 : 1; |
114 | printf( "Remote task's name is : " ); |
115 | put_name( Task_name[ remote_node ], TRUE ); |
116 | |
117 | do { |
118 | status = rtems_task_ident( |
119 | Task_name[ remote_node ], |
120 | RTEMS_SEARCH_ALL_NODES, |
121 | &remote_tid |
122 | ); |
123 | } while ( status != RTEMS_SUCCESSFUL ); |
124 | |
125 | directive_failed( status, "rtems_task_ident" ); |
126 | |
127 | status = rtems_timer_fire_after( |
128 | Timer_id[ 1 ], |
129 | 5 * TICKS_PER_SECOND, |
130 | Delayed_send_event, |
131 | NULL |
132 | ); |
133 | directive_failed( status, "rtems_timer_fire_after" ); |
134 | |
135 | Test_Task_Support( 1 ); |
136 | |
137 | status = rtems_timer_fire_after( |
138 | Timer_id[ 1 ], |
139 | 5 * TICKS_PER_SECOND, |
140 | Delayed_send_event, |
141 | NULL |
142 | ); |
143 | directive_failed( status, "rtems_timer_fire_after" ); |
144 | |
145 | if ( Multiprocessing_configuration.node == 1 ) { |
146 | status = rtems_task_wake_after( 2 * TICKS_PER_SECOND ); |
147 | directive_failed( status, "rtems_task_wake_after" ); |
148 | } |
149 | |
150 | Test_Task_Support( 2 ); |
151 | |
152 | puts( "*** END OF TEST 3 ***" ); |
153 | rtems_test_exit( 0 ); |
154 | } |
Note: See TracBrowser
for help on using the repository browser.