source: rtems/testsuites/tmtests/tm03/task1.c @ 5072b07

4.104.114.84.95
Last change on this file since 5072b07 was 7f6a24ab, checked in by Joel Sherrill <joel.sherrill@…>, on 08/28/95 at 15:30:29

Added unused priority ceiling parameter to rtems_semaphore_create.

Rearranged code to created thread handler routines to initialize,
start, restart, and "close/delete" a thread.

Made internal threads their own object class. This now uses the
thread support routines for starting and initializing a thread.

Insured deleted tasks are freed to the Inactive pool associated with the
correct Information block.

Added an RTEMS API specific data area to the thread control block.

Beginnings of removing the word "rtems" from the core.

  • Property mode set to 100644
File size: 3.2 KB
Line 
1/*
2 *
3 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
4 *  On-Line Applications Research Corporation (OAR).
5 *  All rights assigned to U.S. Government, 1994.
6 *
7 *  This material may be reproduced by or for the U.S. Government pursuant
8 *  to the copyright license under the clause at DFARS 252.227-7013.  This
9 *  notice must appear in all copies of this file and its derivatives.
10 *
11 *  $Id$
12 */
13
14#include "system.h"
15#undef EXTERN
16#define EXTERN
17#include "conftbl.h"
18#include "gvar.h"
19
20rtems_id Semaphore_id;
21rtems_task test_init(
22  rtems_task_argument argument
23);
24
25rtems_task Middle_tasks(
26  rtems_task_argument argument
27);
28
29rtems_task High_task(
30  rtems_task_argument argument
31);
32
33
34rtems_task Init(
35  rtems_task_argument argument
36)
37{
38  rtems_status_code status;
39  rtems_id          task_id;
40
41  puts( "\n\n*** TIME TEST 3 ***" );
42  status = rtems_task_create(
43    rtems_build_name( 'T', 'A', '1', ' ' ),
44    252,
45    2048,
46    RTEMS_DEFAULT_MODES,
47    RTEMS_DEFAULT_ATTRIBUTES,
48    &task_id
49  );
50  directive_failed( status, "rtems_task_create of test_init" );
51
52  status = rtems_task_start( task_id, test_init, 0 );
53  directive_failed( status, "rtems_task_start of test_init" );
54
55  status = rtems_task_delete( RTEMS_SELF );
56  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
57}
58
59rtems_task test_init(
60  rtems_task_argument argument
61)
62{
63  rtems_status_code   status;
64  rtems_unsigned32    index;
65  rtems_id            task_id;
66  rtems_task_priority priority;
67
68  priority = 250;
69
70  status = rtems_semaphore_create(
71    rtems_build_name( 'S', 'M', '1', '\0'),
72    0,
73    RTEMS_DEFAULT_ATTRIBUTES,
74    RTEMS_NO_PRIORITY,
75    &Semaphore_id
76  );
77  directive_failed( status, "rtems_semaphore_create of SM1" );
78
79  for ( index = 2 ; index <= OPERATION_COUNT ; index ++ ) {
80    rtems_task_create(
81      rtems_build_name( 'M', 'I', 'D', ' ' ),
82      priority,
83      1024,
84      RTEMS_DEFAULT_MODES,
85      RTEMS_DEFAULT_ATTRIBUTES,
86      &task_id
87    );
88    directive_failed( status, "rtems_task_create middle" );
89
90    priority--;
91
92    rtems_task_start( task_id, Middle_tasks, 0 );
93    directive_failed( status, "rtems_task_start middle" );
94  }
95
96  status = rtems_task_create(
97    rtems_build_name( 'H', 'I', 'G', 'H' ),
98    priority,
99    1024,
100    RTEMS_DEFAULT_MODES,
101    RTEMS_DEFAULT_ATTRIBUTES,
102    &task_id
103  );
104  directive_failed( status, "rtems_task_create of high task" );
105
106  status = rtems_task_start( task_id, High_task, 0 );
107  directive_failed( status, "rtems_task_start of high task" );
108
109  Timer_initialize();                          /* start the timer */
110  status = rtems_semaphore_release( Semaphore_id );
111}
112
113rtems_task Middle_tasks(
114  rtems_task_argument argument
115)
116{
117  rtems_status_code status;
118
119  status = rtems_semaphore_obtain(
120    Semaphore_id,
121    RTEMS_DEFAULT_OPTIONS,
122    RTEMS_NO_TIMEOUT
123  );
124
125  status = rtems_semaphore_release( Semaphore_id );
126}
127
128rtems_task High_task(
129  rtems_task_argument argument
130)
131{
132  rtems_status_code status;
133
134  status = rtems_semaphore_obtain(
135    Semaphore_id,
136    RTEMS_DEFAULT_OPTIONS,
137    RTEMS_NO_TIMEOUT
138  );
139
140  end_time = Read_timer();
141
142  put_time(
143    "rtems_semaphore_release (preemptive)",
144    end_time,
145    OPERATION_COUNT,
146    0,
147    CALLING_OVERHEAD_SEMAPHORE_RELEASE
148  );
149  exit( 0 );
150}
Note: See TracBrowser for help on using the repository browser.