source: rtems/testsuites/sptests/sp26/task1.c @ 1232196a

4.104.114.84.95
Last change on this file since 1232196a was 1232196a, checked in by Joel Sherrill <joel.sherrill@…>, on 10/25/99 at 14:14:07

Added sp26 which tests the rtems_task_is_suspended directive.

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-1998.
3 *  On-Line Applications Research Corporation (OAR).
4 *  Copyright assigned to U.S. Government, 1994.
5 *
6 *  The license and distribution terms for this file may be
7 *  found in the file LICENSE in this distribution or at
8 *  http://www.OARcorp.com/rtems/license.html.
9 *
10 *  $Id$
11 */
12
13#include <stdio.h>
14#include <rtems.h>
15#include <rtems/error.h>
16
17static rtems_id taskId1;
18static rtems_id taskId2;
19rtems_interval ticksPerSecond;
20
21static int
22isSuspended (rtems_id tid)
23{
24  rtems_status_code sc;
25
26  sc = rtems_task_is_suspended (tid);
27  if (sc == RTEMS_ALREADY_SUSPENDED)
28    return 1;
29  if (sc != RTEMS_SUCCESSFUL)
30    printf ("rtems_task_is_suspended: %s\n", rtems_status_text (sc));
31  return 0;
32}
33
34static void
35subTask1 (rtems_task_argument arg)
36{
37  rtems_status_code sc;
38
39  rtems_task_wake_after (ticksPerSecond * 3);
40  sc = rtems_event_send (taskId2, 1);
41  if (sc != RTEMS_SUCCESSFUL) {
42    printf ("subTask1 - Can't send event (%d)\n", sc);
43    rtems_task_suspend (RTEMS_SELF);
44  }
45  rtems_task_wake_after (ticksPerSecond * 3);
46  printf ("subTask1 - Event sent\n");
47  rtems_task_suspend (RTEMS_SELF);
48  printf ("subTask1 - Back to task 1\n");
49  rtems_task_wake_after (ticksPerSecond * 3);
50  rtems_task_suspend (RTEMS_SELF);
51}
52
53static void
54subTask2 (rtems_task_argument arg)
55{
56  rtems_status_code sc;
57  rtems_event_set ev;
58
59  rtems_task_wake_after (ticksPerSecond * 1);
60  sc = rtems_event_receive (1, RTEMS_WAIT|RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &ev);
61  if (sc != RTEMS_SUCCESSFUL) {
62    printf ("subTask2 - Can't receive event (%d)\n", sc);
63    rtems_task_suspend (RTEMS_SELF);
64  }
65  printf ("subTask2 - Task 1 suspended? - should be 0: %d\n",
66     isSuspended (taskId1));
67  rtems_task_wake_after (ticksPerSecond * 4);
68  printf ("subTask2 - Task 1 suspended? - should be 1: %d\n",
69     isSuspended (taskId1));
70  rtems_task_resume (taskId1);
71  printf ("subTask2 - Task 1 suspended? - should be 0: %d\n",
72     isSuspended (taskId1));
73  rtems_task_wake_after (ticksPerSecond * 4);
74  printf ("subTask2 - Task 1 suspended? - should be 1: %d\n",
75     isSuspended (taskId1));
76 
77  puts( "*** END OF TEST 26 ***" );
78  exit( 0 );
79}
80
81static void
82createTask (char c, rtems_id *tid)
83{
84  rtems_status_code sc;
85
86  sc = rtems_task_create (rtems_build_name('S','u','b',c),
87    100,
88    RTEMS_MINIMUM_STACK_SIZE * 4,
89    RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
90    RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL,
91    tid);
92  if (sc != RTEMS_SUCCESSFUL) {
93    printf ("Can't create task (%d)\n", sc);
94    rtems_task_suspend (RTEMS_SELF);
95  }
96}
97
98static void
99startTask (rtems_id tid, rtems_task_entry entry_point)
100{
101  rtems_status_code sc;
102
103  sc = rtems_task_start (tid, entry_point, 0);
104  if (sc != RTEMS_SUCCESSFUL) {
105    printf ("Can't start task (%d)\n", sc);
106    rtems_task_suspend (RTEMS_SELF);
107  }
108}
109
110void
111task1 (void)
112{
113  rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond);
114  createTask ('1', &taskId1);
115  createTask ('2', &taskId2);
116  startTask (taskId1, subTask1);
117  startTask (taskId2, subTask2);
118  rtems_task_suspend (RTEMS_SELF);
119}
Note: See TracBrowser for help on using the repository browser.