annotate packages/kernel/current/tests/stress_threads.c @ 10:d3fbcdfa1b2f ecos-sw-1999-05-29

Merge from eCos master repository on 1999-05-29-00:13:11-BST
author jlarmour
date Fri, 28 May 1999 16:43:09 +0000
parents ece80412419a
children 53104bbd5f99
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // stress_threads.cxx
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Basic thread stress test
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
15 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
19 // the License.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
20 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
23 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
27 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
28 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 // Author(s): rosalia
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
33 // Contributors: rosalia, jskov
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Date: 1999-04-13
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Description: Very simple thread stress test, with some memory
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // allocation and alarm handling.
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
37 //
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
38 // Notes:
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
39 // If client_makes_request is big, it means that there are made many more
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
40 // client requests than can be serviced. Consequently, clients are wasting
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
41 // CPU time and should be sleeping more.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
42 //
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
43 // The list of handler invocations show how many threads are running
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
44 // at the same time. The more powerful the CPU, the more the numbers
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
45 // should spread out.
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <pkgconf/system.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #include <cyg/infra/testcase.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #include <cyg/hal/hal_arch.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #if defined(CYGPKG_KERNEL) && defined(CYGPKG_IO) && defined(CYGPKG_LIBC)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #include <pkgconf/kernel.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #include <pkgconf/libc.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 #if defined(CYGFUN_KERNEL_API_C)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 #include <cyg/kernel/kapi.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #ifdef CYGPKG_LIBC_STDIO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 #include <stdio.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 #include <stdlib.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 #if defined(CYGPKG_LIBM)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 #include <math.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 #include <assert.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
72 #include <cyg/kernel/test/stackmon.h>
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
73
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #if defined(CYGFUN_KERNEL_THREADS_TIMER)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 #if defined(CYGPKG_LIBC_MALLOC)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 /* if TIME_LIMIT is defined, it represents the number of seconds this
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 test should last; if it is undefined the test will go forever */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
79 #define DEATH_TIME_LIMIT 20
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
80 /* #undef DEATH_TIME_LIMIT */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 #define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 #define STACK_SIZE2 (8*1024 + CYGNUM_HAL_STACK_SIZE_TYPICAL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
85 /* Allocate priorities in this order. This ensures that handlers
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
86 (which are the ones using the CPU) get enough CPU time to actually
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
87 complete their tasks. */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
88 #define N_MAIN 1
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
89 #define MAX_HANDLERS 19
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 #define N_LISTENERS 4
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
91 #define N_CLIENTS 4
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
93 #if (CYGNUM_KERNEL_SCHED_PRIORITIES >= (N_MAIN+MAX_HANDLERS+N_LISTENERS+N_CLIENTS))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 /* if we use the bitmap scheduler we must make sure we don't use the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 same priority more than once, so we must store those already in use */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
97 static volatile char priority_in_use[N_MAIN+MAX_HANDLERS+N_LISTENERS+N_CLIENTS];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 /* now declare (and allocate space for) some kernel objects, like the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 threads we will use */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
101 cyg_thread main_thread_s;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
102 cyg_thread handler_thread_s[MAX_HANDLERS];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 cyg_thread listener_thread_s[N_LISTENERS];
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
104 cyg_thread client_thread_s[N_CLIENTS];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 /* space for stacks for all threads */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
107 char main_stack[STACK_SIZE];
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
108 char handler_stack[MAX_HANDLERS][STACK_SIZE2];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 char listener_stack[N_LISTENERS][STACK_SIZE];
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
110 char client_stack[N_CLIENTS][STACK_SIZE];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 /* now the handles for the threads */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
113 cyg_handle_t mainH;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 cyg_handle_t handlerH[MAX_HANDLERS];
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
115 cyg_handle_t listenerH[N_LISTENERS];
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
116 cyg_handle_t clientH[N_CLIENTS];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 /* and now variables for the procedure which is the thread */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
119 cyg_thread_entry_t main_program, client_program, listener_program,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
120 handler_program;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 /* a few mutexes used in the code */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
123 cyg_mutex_t client_request_lock, handler_slot_lock, statistics_print_lock,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
124 free_handler_lock;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
125
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
126 /* global variables with which the handler IDs and thread priorities
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
127 to free are communicated from handlers to main_program. Access to
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
128 these are protected by free_handler_lock. An id of -1 means the
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
129 that the variables are empty. */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
130 volatile int free_handler_pri = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
131 volatile int free_handler_id = -1;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 /* a global variable with which the client and server coordinate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 int client_makes_request = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 /* indicates that it's time to print out a report */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 int time_to_report = 0;
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
138 /* print status after a delay of this many secs. */
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
139 int time_report_delay;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 /*** now application-specific variables ***/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 /* an array that stores whether the handler threads are in use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 int handler_thread_in_use[MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 /***** statistics-gathering variables *****/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 struct s_statistics {
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
147 /* store the number of times each handler has been invoked */
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
148 unsigned long handler_invocation_histogram[MAX_HANDLERS];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
150 /* store how many times malloc has been attempted and how many times
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
151 it has failed */
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
152 unsigned long malloc_tries, malloc_failures;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
154 /* how many threads have been created */
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
155 unsigned long thread_creations, thread_exits;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 struct s_statistics statistics;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 /* some function prototypes; those with the sc_ prefix are
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 "statistics-collecting" versions of the cyg_ primitives */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 void sc_thread_create(
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
163 cyg_addrword_t sched_info, /* scheduling info (eg pri) */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 cyg_thread_entry_t *entry, /* entry point function */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
165 cyg_addrword_t entry_data, /* entry data */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 char *name, /* optional thread name */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 void *stack_base, /* stack base, NULL = alloc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 cyg_ucount32 stack_size, /* stack size, 0 = default */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 cyg_handle_t *handle, /* returned thread handle */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 cyg_thread *thread /* put thread here */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 int get_handler_slot(cyg_handle_t current_threadH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 void perform_stressful_tasks(void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 void permute_array(char a[], int size, int seed);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 void setup_death_alarm(cyg_addrword_t data, cyg_handle_t *deathHp,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 cyg_alarm *death_alarm_p, int *killed_p);
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
178 void print_statistics(int print_full);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 /* we need to declare the alarm handling function (which is defined
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 below), so that we can pass it to cyg_alarm_initialize() */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 cyg_alarm_t report_alarm_func, death_alarm_func;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 /* handle and alarm for the report alarm */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 cyg_handle_t report_alarmH, counterH, system_clockH;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 cyg_alarm report_alarm;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 /* we install our own startup routine which sets up threads */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 void cyg_user_start(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 CYG_TEST_INFO("# Entering stress's cyg_user_start() function");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 cyg_mutex_init(&client_request_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 cyg_mutex_init(&statistics_print_lock);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
198 cyg_mutex_init(&free_handler_lock);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 /* initialize statistics */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 memset(&statistics, 0, sizeof(statistics));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
203 /* clear priority table */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
204 for (i = 0; i < sizeof(priority_in_use); i++)
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
205 priority_in_use[i] = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
206
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
207 /* initialize main thread */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
208 {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
209 char thread_name[] = "main";
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
210
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
211 sc_thread_create(0, main_program, (cyg_addrword_t) 0,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
212 thread_name, (void *) main_stack, STACK_SIZE,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
213 &mainH, &main_thread_s);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
214 priority_in_use[0]++;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
215 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
216
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 /* initialize all handler threads to not be in use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 for (i = 0; i < MAX_HANDLERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 handler_thread_in_use[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 }
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
221 for (i = 0; i < N_LISTENERS; ++i) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
222 int prio;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
223 char thread_name[20];
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
224 sprintf(thread_name, "listener-%02d", i);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
225 prio = N_MAIN + MAX_HANDLERS + i;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
226 sc_thread_create(prio, listener_program, (cyg_addrword_t) i,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
227 thread_name, (void *) listener_stack[i], STACK_SIZE,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
228 &listenerH[i], &listener_thread_s[i]);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
229 CYG_ASSERT(0 == priority_in_use[prio], "Priority already in use!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
230 priority_in_use[prio]++;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
231 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 for (i = 0; i < N_CLIENTS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 int prio;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 char thread_name[20];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 sprintf(thread_name, "client-%02d", i);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
236 prio = N_MAIN + MAX_HANDLERS + N_LISTENERS + i;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 sc_thread_create(prio, client_program, (cyg_addrword_t) i,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 thread_name, (void *) client_stack[i], STACK_SIZE,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 &(clientH[i]), &client_thread_s[i]);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
240 CYG_ASSERT(0 == priority_in_use[prio], "Priority already in use!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
241 priority_in_use[prio]++;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
244 cyg_thread_resume(mainH);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 for (i = 0; i < N_CLIENTS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 cyg_thread_resume(clientH[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 for (i = 0; i < N_LISTENERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 cyg_thread_resume(listenerH[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 /* set up the alarm which gives periodic wakeups to say "time to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 print a report */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 cyg_alarm_create(counterH, report_alarm_func,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 (cyg_addrword_t) 4000,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 &report_alarmH, &report_alarm);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 if (cyg_test_is_simulator) {
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
261 time_report_delay = 2;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 } else {
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
263 time_report_delay = 30;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 }
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
265
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
266 cyg_alarm_initialize(report_alarmH, cyg_current_time()+200,
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
267 time_report_delay*100);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
268 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
270 /* main_program() -- frees resources and prints status. */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
271 void main_program(cyg_addrword_t data)
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
272 {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
273 #ifdef DEATH_TIME_LIMIT
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
274 cyg_handle_t deathH;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
275 cyg_alarm death_alarm;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
276 int is_dead = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
277
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
278 setup_death_alarm(0, &deathH, &death_alarm, &is_dead);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
279 #endif /* DEATH_TIME_LIMIT */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
280
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
281 printf("# Starting main\n");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
282
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
283 for (;;) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
284 int handler_id = -1;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
285 int handler_pri = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
286
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
287 cyg_mutex_lock(&free_handler_lock); {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
288 // If any handler has left its ID, copy the ID and
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
289 // priority values to local variables, and free up the
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
290 // global communication variables again.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
291 if (-1 != free_handler_id) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
292 handler_id = free_handler_id;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
293 handler_pri = free_handler_pri;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
294 free_handler_id = -1;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
295 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
296 } cyg_mutex_unlock(&free_handler_lock);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
297
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
298 if (-1 != handler_id) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
299 // Free the handler resources. This is done outside of the
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
300 // free_handler_lock to avoid deadlocks.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
301 cyg_mutex_lock(&handler_slot_lock); {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
302 CYG_ASSERT(1 == priority_in_use[handler_pri],
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
303 "Priority not in use!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
304 CYG_ASSERT(1 == handler_thread_in_use[handler_id],
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
305 "Handler not in use!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
306 handler_thread_in_use[handler_id]--;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
307 priority_in_use[handler_pri]--;
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
308
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
309 // Finally delete the handler thread. This must be done in a
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
310 // loop, waiting for the call to return true. If it returns
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
311 // false, go to sleep for a bit, so the killed thread gets a
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
312 // chance to run and complete its business.
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
313 while (!cyg_thread_delete(handlerH[handler_id])) {
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
314 cyg_thread_delay(2);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
315 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
316 } cyg_mutex_unlock(&handler_slot_lock);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
317 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
318
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
319 // Print status if time.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
320 if (time_to_report) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
321 time_to_report = 0;
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
322 print_statistics(0);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
323 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
324
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
325 #ifdef DEATH_TIME_LIMIT
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
326 // Stop test if time.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
327 if (is_dead) {
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
328 print_statistics(1);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
329 CYG_TEST_PASS_FINISH("Kernel thread stress test OK");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
330 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
331 #endif /* DEATH_TIME_LIMIT */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
332
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
333 cyg_thread_delay(3);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
334 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 /* client_program() -- an obnoxious client which makes a lot of requests */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 void client_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 int delay;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 printf("# Starting client-%d\n", (int) data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 for (;;) {
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
348 delay = (rand() % 20);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 /* now send a request to the server */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 cyg_mutex_lock(&client_request_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 ++client_makes_request;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 /* printf("client_makes_request %d\n", client_makes_request); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 } cyg_mutex_unlock(&client_request_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 cyg_thread_delay(10+delay);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 /* cyg_thread_delay(0); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 /* listener_program() -- listens for a request and spawns a handler to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 take care of the request */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 void listener_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 /* int message = (int) data; */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
366 int handler_slot;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
368 printf("# Beginning execution; thread data is %d\n", (int) data);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
370 for (;;) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
371 int make_request = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
372 cyg_mutex_lock(&client_request_lock); {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
373 if (client_makes_request > 0) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
374 --client_makes_request;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
375 make_request = 1;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
376 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
377 } cyg_mutex_unlock(&client_request_lock);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
378
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
379 if (make_request) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
380 int prio;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
381 /* printf("just got a request from a client (count = %d)\n", */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
382 /* client_makes_request); */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
383
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
384 handler_slot = get_handler_slot(listenerH[(int) data]);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
385 prio = N_MAIN+handler_slot;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
386
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
387 CYG_ASSERT(0 == priority_in_use[prio], "Priority already in use!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
388 priority_in_use[prio]++;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
389 sc_thread_create(prio, handler_program,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
390 (cyg_addrword_t) handler_slot,
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
391 "handler", (void *) handler_stack[handler_slot],
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
392 STACK_SIZE2, &handlerH[handler_slot],
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
393 &handler_thread_s[handler_slot]);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
394 cyg_thread_resume(handlerH[handler_slot]);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
395 ++statistics.handler_invocation_histogram[handler_slot];
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
396 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
397
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
398 cyg_thread_delay(2 + (rand() % 10));
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 /* handler_program() -- is spawned to handle each incoming request */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 void handler_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 /* here is where we perform specific stressful tasks */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 perform_stressful_tasks();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 cyg_thread_delay(4 + (int) (0.5*log(1.0 + fabs((rand() % 1000000)))));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 /* cyg_thread_delay(0); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
411 ++statistics.thread_exits;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
412 {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
413 // Loop until the handler id and priority can be communicated to
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
414 // the main_program.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
415 int freed = 0;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
416 do {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
417 cyg_mutex_lock(&free_handler_lock); {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
418 if (-1 == free_handler_id) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
419 free_handler_id = data;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
420 free_handler_pri = N_MAIN+(int) data;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
421 freed = 1;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
422 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
423 } cyg_mutex_unlock(&free_handler_lock);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
424 if (!freed)
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
425 cyg_thread_delay(2);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
426 } while (!freed);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
427 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
428
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
429 // Then exit.
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
430 cyg_thread_exit();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 /* look for an available handler thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 int get_handler_slot(cyg_handle_t current_threadH)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 {
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
436 int i;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
437 int found = 0;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
439 while (!found) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
440 cyg_mutex_lock(&handler_slot_lock); {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
441 for (i = 0; i < MAX_HANDLERS; ++i) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
442 if (!handler_thread_in_use[i]) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
443 found = 1;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
444 handler_thread_in_use[i]++;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
445 break;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
446 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
447 }
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
448 } cyg_mutex_unlock(&handler_slot_lock);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
449 if (!found)
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
450 cyg_thread_delay(1);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 }
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
452
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
453 CYG_ASSERT(1 == handler_thread_in_use[i], "Handler usage count wrong!");
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
454
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
455 return i;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 /* do things which will stress the system */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 void perform_stressful_tasks()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 #define MAX_MALLOCED_SPACES 100 /* do this many mallocs at most */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 #define MALLOCED_BASE_SIZE 1 /* basic size in bytes */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 char *spaces[MAX_MALLOCED_SPACES];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 unsigned int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 cyg_mutex_t tmp_lock;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 cyg_uint8 pool_space[10][100];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 cyg_handle_t mempool_handles[10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 cyg_mempool_fix mempool_objects[10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 cyg_mutex_init(&tmp_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 /* here I use malloc, which uses the kernel's variable memory pools.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 note that malloc/free is a bit simple-minded here: it does not
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 try to really fragment things, and it does not try to make the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 allocation/deallocation concurrent with other thread execution
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 (although I'm about to throw in a yield()) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 for (i = 0; i < MAX_MALLOCED_SPACES; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 ++statistics.malloc_tries;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 /* spaces[i] = (char *) malloc(((int)(sqrt(i*2.0))+1)*MALLOCED_BASE_SIZE); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 spaces[i] = (char *) malloc(((int)i*2.0+1)*MALLOCED_BASE_SIZE);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
483 if (i % (MAX_MALLOCED_SPACES/10) == 0) {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 cyg_thread_yield();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 }
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
486 if (i % (MAX_MALLOCED_SPACES/15) == 0) {
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
487 cyg_thread_delay(i % 5);
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
488 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 /* now free it all up */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 for (i = 0; i < MAX_MALLOCED_SPACES; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 if (spaces[i] != NULL) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 unsigned int j;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 for (j = 0; j < (i*2+1)*MALLOCED_BASE_SIZE; ++j) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496 spaces[i][j] = 0xAA; /* write a bit pattern */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 free(spaces[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 ++statistics.malloc_failures;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 /* now allocate and then free some fixed-size memory pools; for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504 now this is simple-minded because it does not have many threads
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 sharing the memory pools and racing for memory. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507 cyg_mempool_fix_create(pool_space[i], 100, (i+1)*3,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 &mempool_handles[i], &mempool_objects[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 spaces[i] = cyg_mempool_fix_try_alloc(mempool_handles[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516 if (spaces[i]) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
517 cyg_mempool_fix_delete(mempool_handles[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
518 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
519 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
520
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
521 cyg_mutex_destroy(&tmp_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
523
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
524 /* report_alarm_func() is invoked as an alarm handler, so it should be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
525 quick and simple. in this case it sets a global flag which is
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
526 checked by main_program. */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
527 void report_alarm_func(cyg_handle_t alarmH, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
528 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
529 time_to_report = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
532 #ifdef DEATH_TIME_LIMIT
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
533 /* this sets up death alarms. it gets the handle and alarm from the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
534 caller, since they must persist for the life of the alarm */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
535 void setup_death_alarm(cyg_addrword_t data, cyg_handle_t *deathHp,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
536 cyg_alarm *death_alarm_p, int *killed_p)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
537 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
538 cyg_handle_t system_clockH, counterH;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
539 cyg_resolution_t rtc_res;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
540
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
541 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
542 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
543
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
544 cyg_alarm_create(counterH, death_alarm_func,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
545 (cyg_addrword_t) killed_p,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
546 deathHp, death_alarm_p);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
547 rtc_res = cyg_clock_get_resolution(system_clockH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
548 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
549 cyg_tick_count_t tick_delay;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
550 tick_delay = (long long)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551 ((1000000000.0*rtc_res.divisor)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
552 *((double)DEATH_TIME_LIMIT)/((double)rtc_res.dividend));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
553 if ( cyg_test_is_simulator )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
554 tick_delay /= 10;
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
555 #ifdef CYGPKG_HAL_I386_LINUX
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
556 // 20 seconds is a long time compared to the run time of other tests.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
557 // Reduce to 10 seconds, allowing more tests to get run.
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
558 tick_delay /= 2;
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
559 #endif
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
560
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
561 cyg_alarm_initialize(*deathHp, cyg_current_time() + tick_delay, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
562 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
563 }
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
564 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
565
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
566 /* death_alarm_func() is the alarm handler that kills the current
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
567 thread after a specified timeout. It does so by setting a flag the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
568 thread is constantly checking. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
569 void death_alarm_func(cyg_handle_t alarmH, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
570 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
571 int *killed_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
572 killed_p = (int *) data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
573 *killed_p = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
574 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
575
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
576 /* now I write the sc_ versions of the cyg_functions */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
577 void sc_thread_create(
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
578 cyg_addrword_t sched_info, /* scheduling info (eg pri) */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
579 cyg_thread_entry_t *entry, /* entry point function */
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
580 cyg_addrword_t entry_data, /* entry data */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
581 char *name, /* optional thread name */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
582 void *stack_base, /* stack base, NULL = alloc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
583 cyg_ucount32 stack_size, /* stack size, 0 = default */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
584 cyg_handle_t *handle, /* returned thread handle */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
585 cyg_thread *thread /* put thread here */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
586 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
587 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
588 /*printf("Creating a thread -- priority is %lu\n", (unsigned long) sched_info);*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
589 /* fflush(stdout); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
590 ++statistics.thread_creations;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
591 cyg_thread_create(sched_info, entry, entry_data, name,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
592 stack_base, stack_size, handle, thread);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
593 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
594
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
595
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
596 void print_statistics(int print_full)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
597 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
598 int i;
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
599 static int print_count = 0;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
600
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
601 printf("State dump %d (time %02d.%02d.%02d)\n",
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
602 print_count,
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
603 print_count*time_report_delay / (60*60), // hours
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
604 (print_count*time_report_delay / 60) % 60, // minutes
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
605 (print_count*time_report_delay ) % 60); // seconds
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
606 print_count++;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
607
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
608 cyg_mutex_lock(&statistics_print_lock); {
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
609 printf(" Handler-invocations: ");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
610 for (i = 0; i < MAX_HANDLERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
611 printf("%4lu ", statistics.handler_invocation_histogram[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
612 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
613 printf("\n");
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
614 printf(" malloc()-tries/failures: -- %7lu %7lu\n",
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
615 statistics.malloc_tries, statistics.malloc_failures);
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
616 printf(" client_makes_request: %d\n", client_makes_request);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
617 } cyg_mutex_unlock(&statistics_print_lock);
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
618
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
619 // Add: Also occasionally dump individual threads' stack status.
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
620 if (0 == print_count % 5 || print_full) {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
621 cyg_test_dump_interrupt_stack_stats( " Status" );
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
622 cyg_test_dump_idlethread_stack_stats( " Status" );
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
623 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
624 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
625
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
626 #else /* (CYGNUM_KERNEL_SCHED_PRIORITIES >= */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
627 /* (N_MAIN+N_CLIENTS+N_LISTENERS+MAX_HANDLERS)) */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
628 #define N_A_MSG "not enough priorities available"
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
629 #endif /* (CYGNUM_KERNEL_SCHED_PRIORITIES >= */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
630 /* (N_MAIN+N_CLIENTS+N_LISTENERS+MAX_HANDLERS)) */
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
631
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
632 #else /* CYGSEM_LIBC_MALLOC */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
633 # define N_A_MSG "this test needs malloc"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
634 #endif /* CYGSEM_LIBC_MALLOC */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
635
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
636 #else /* CYGFUN_KERNEL_THREADS_TIMER */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
637 # define N_A_MSG "this test needs kernel threads timer"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
638 #endif /* CYGFUN_KERNEL_THREADS_TIMER */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
639
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
640 #else /* CYGPKG_LIBM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
641 # define N_A_MSG "this test needs libm"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
642 #endif /* CYGPKG_LIBM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
643
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
644 #else /* CYGSEM_LIBC_STDIO */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
645 # define N_A_MSG "this test needs stdio"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
646 #endif /* CYGSEM_LIBC_STDIO */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
647
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
648 #else // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
649 # define N_A_MSG "this test needs Kernel C API"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
650 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
651
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
652 #else // def CYGPKG_KERNEL && CYGPKG_IO && CYGPKG_LIBC
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
653 # define N_A_MSG "this tests needs Kernel, libc and IO"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
654 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
655
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
656 #ifdef N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
657 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
658 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
659 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
660 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
661 CYG_TEST_NA( N_A_MSG);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
662 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
663 #endif // N_A_MSG