OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [tests/] [tmtests/] [tm11/] [task1.c] - Blame information for rev 173

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*
2
 *
3
 *  COPYRIGHT (c) 1989-1999.
4
 *  On-Line Applications Research Corporation (OAR).
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: task1.c,v 1.2 2001-09-27 12:02:42 chris Exp $
11
 */
12
 
13
#define TEST_INIT
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
 
32
 
33
void Init(
34
  rtems_task_argument argument
35
)
36
{
37
  rtems_status_code status;
38
  rtems_id id;
39
 
40
  Print_Warning();
41
 
42
  puts( "\n\n*** TIME TEST 11 ***" );
43
 
44
  status = rtems_task_create(
45
    1,
46
    251,
47
    RTEMS_MINIMUM_STACK_SIZE,
48
    RTEMS_DEFAULT_MODES,
49
    RTEMS_DEFAULT_ATTRIBUTES,
50
    &id
51
  );
52
  directive_failed( status, "rtems_task_create" );
53
 
54
  status = rtems_task_start( id, test_init, 0 );
55
  directive_failed( status, "rtems_task_start" );
56
 
57
  status = rtems_task_delete( RTEMS_SELF );
58
  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
59
}
60
 
61
#define MESSAGE_SIZE (sizeof(long) * 4)
62
 
63
rtems_task test_init(
64
  rtems_task_argument argument
65
)
66
{
67
  rtems_unsigned32    index;
68
  rtems_task_entry    task_entry;
69
  rtems_task_priority priority;
70
  rtems_id            task_id;
71
  rtems_status_code   status;
72
 
73
/*  As each task is started, it preempts this task and
74
 *  performs a blocking rtems_message_queue_receive.  Upon completion of
75
 *  this loop all created tasks are blocked.
76
 */
77
 
78
  status = rtems_message_queue_create(
79
    rtems_build_name( 'M', 'Q', '1', ' '  ),
80
    OPERATION_COUNT,
81
    MESSAGE_SIZE,
82
    RTEMS_DEFAULT_ATTRIBUTES,
83
    &Queue_id
84
  );
85
  directive_failed( status, "rtems_message_queue_create" );
86
 
87
  priority = 250;
88
 
89
  for( index = 0; index < OPERATION_COUNT ; index++ ) {
90
    status = rtems_task_create(
91
      rtems_build_name( 'T', 'I', 'M', 'E'  ),
92
      priority,
93
      RTEMS_MINIMUM_STACK_SIZE,
94
      RTEMS_DEFAULT_MODES,
95
      RTEMS_DEFAULT_ATTRIBUTES,
96
      &task_id
97
    );
98
    directive_failed( status, "rtems_task_create LOOP" );
99
 
100
    priority--;
101
 
102
    if ( index==OPERATION_COUNT-1 ) task_entry = High_task;
103
    else                            task_entry = Middle_tasks;
104
 
105
    status = rtems_task_start( task_id, task_entry, 0 );
106
    directive_failed( status, "rtems_task_start LOOP" );
107
  }
108
 
109
  Timer_initialize();
110
    (void) rtems_message_queue_send( Queue_id, Buffer, MESSAGE_SIZE );
111
}
112
 
113
rtems_task Middle_tasks(
114
  rtems_task_argument argument
115
)
116
{
117
  rtems_unsigned32 size;
118
 
119
  (void) rtems_message_queue_receive(
120
           Queue_id,
121
           (long (*)[4]) Buffer,
122
           &size,
123
           RTEMS_DEFAULT_OPTIONS,
124
           RTEMS_NO_TIMEOUT
125
         );
126
 
127
  (void) rtems_message_queue_send( Queue_id, (long (*)[4]) Buffer, size );
128
}
129
 
130
rtems_task High_task(
131
  rtems_task_argument argument
132
)
133
{
134
  rtems_unsigned32 size;
135
 
136
  (void) rtems_message_queue_receive(
137
           Queue_id,
138
           (long (*)[4]) Buffer,
139
           &size,
140
           RTEMS_DEFAULT_OPTIONS,
141
           RTEMS_NO_TIMEOUT
142
         );
143
 
144
  end_time = Read_timer();
145
 
146
  put_time(
147
    "rtems_message_queue_send: task readied -- preempts caller",
148
    end_time,
149
    OPERATION_COUNT,
150
    0,
151
    CALLING_OVERHEAD_MESSAGE_QUEUE_SEND
152
  );
153
 
154
  puts( "*** END OF TEST 11 ***" );
155
  exit( 0 );
156
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.