source: rtems/c/src/tests/tmtests/tm05/task1.c @ 459f770

4.104.114.84.95
Last change on this file since 459f770 was ac7d5ef0, checked in by Joel Sherrill <joel.sherrill@…>, on 05/11/95 at 17:39:37

Initial revision

  • Property mode set to 100644
File size: 2.5 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         Task_id[OPERATION_COUNT+1];
21rtems_unsigned32 Task_index;
22
23rtems_task High_task(
24  rtems_task_argument argument
25);
26
27rtems_task Middle_tasks(
28  rtems_task_argument argument
29);
30
31rtems_task Low_task(
32  rtems_task_argument argument
33);
34
35void test_init();
36
37rtems_task Init(
38  rtems_task_argument argument
39)
40{
41  rtems_status_code status;
42
43  puts( "\n\n*** TIME TEST 5 ***" );
44
45  test_init();
46
47  status = rtems_task_delete( RTEMS_SELF );
48  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
49}
50
51void test_init()
52{
53  rtems_status_code   status;
54  rtems_task_entry    task_entry;
55  rtems_task_priority priority;
56  rtems_unsigned32    index;
57
58  priority = 250;
59
60  for( index = 0; index <= OPERATION_COUNT ; index++ ) {
61
62    status = rtems_task_create(
63      rtems_build_name( 'T', 'I', 'M', 'E' ),
64      priority,
65      1024,
66      RTEMS_DEFAULT_MODES,
67      RTEMS_DEFAULT_ATTRIBUTES,
68      &Task_id[ index ]
69    );
70    directive_failed( status, "rtems_task_create loop" );
71
72    priority--;
73
74    if ( index==0 )                    task_entry = Low_task;
75    else if ( index==OPERATION_COUNT ) task_entry = High_task;
76    else                               task_entry = Middle_tasks;
77
78    status = rtems_task_start( Task_id[ index ], task_entry, 0 );
79    directive_failed( status, "rtems_task_start loop" );
80  }
81}
82
83rtems_task High_task(
84  rtems_task_argument argument
85)
86{
87  Timer_initialize();
88
89  (void) rtems_task_suspend( RTEMS_SELF );
90
91  end_time = Read_timer();
92
93  put_time(
94    "rtems_task_resume (causing preempt)",
95    end_time,
96    OPERATION_COUNT,
97    0,
98    CALLING_OVERHEAD_TASK_RESUME
99  );
100
101  exit( 0 );
102}
103
104rtems_task Middle_tasks(
105  rtems_task_argument argument
106)
107{
108  (void) rtems_task_suspend( RTEMS_SELF );
109
110  Task_index++;
111  (void) rtems_task_resume( Task_id[ Task_index ] );
112}
113
114rtems_task Low_task(
115  rtems_task_argument argument
116)
117{
118
119  end_time = Read_timer();
120
121  put_time(
122    "rtems_task_resume self",
123    end_time,
124    OPERATION_COUNT,
125    0,
126    CALLING_OVERHEAD_TASK_SUSPEND
127  );
128
129  Task_index = 1;
130  Timer_initialize();
131  (void) rtems_task_resume( Task_id[ Task_index ] );
132}
Note: See TracBrowser for help on using the repository browser.