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

Subversion Repositories openrisc

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

powered by: WebSVN 2.1.0

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