annotate packages/kernel/current/tests/stress_threads.c @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents
children 1d7f19c9e4d1
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // Contributors: rosalia
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.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 #include <pkgconf/system.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 #include <cyg/infra/testcase.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 #include <cyg/hal/hal_arch.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 #if defined(CYGPKG_KERNEL) && defined(CYGPKG_IO) && defined(CYGPKG_LIBC)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 #include <pkgconf/kernel.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 #include <pkgconf/libc.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #if defined(CYGFUN_KERNEL_API_C)
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/kernel/kapi.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 #ifdef CYGPKG_LIBC_STDIO
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 <stdio.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #include <stdlib.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(CYGPKG_LIBM)
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 <math.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 #include <assert.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 #if defined(CYGFUN_KERNEL_THREADS_TIMER)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 #if defined(CYGPKG_LIBC_MALLOC)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 /* 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
67 test should last; if it is undefined the test will go forever */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 #define DEATH_TIME_LIMIT 15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 /* #undef DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 #define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 #define STACK_SIZE2 (8*1024 + CYGNUM_HAL_STACK_SIZE_TYPICAL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #define N_CLIENTS 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 #define N_LISTENERS 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 #define MAX_HANDLERS 19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 #if (CYGNUM_KERNEL_SCHED_PRIORITIES < (N_CLIENTS+N_LISTENERS+MAX_HANDLERS))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 # error "not enough priorities available"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #endif
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 /* 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
83 same priority more than once, so we must store those already in use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 static char priority_in_use[N_CLIENTS+N_LISTENERS+MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 /* now declare (and allocate space for) some kernel objects, like the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 threads we will use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 cyg_thread client_thread_s[N_CLIENTS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 cyg_thread listener_thread_s[N_LISTENERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 cyg_thread handler_thread_s[MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 /* space for stacks for all threads */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 char client_stack[N_CLIENTS][STACK_SIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 char listener_stack[N_LISTENERS][STACK_SIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 char handler_stack[MAX_HANDLERS][STACK_SIZE2];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 /* now the handles for the threads */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 cyg_handle_t clientH[N_CLIENTS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 cyg_handle_t listenerH[N_LISTENERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 cyg_handle_t handlerH[MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 /* how many client threads have been killed by the death handler */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 int n_clients_killed = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 #endif /* DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 /* and now variables for the procedure which is the thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 cyg_thread_entry_t client_program, listener_program, handler_program;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 /* a few mutexes used in the code */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 cyg_mutex_t client_request_lock, handler_slot_lock, statistics_print_lock;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 /* a global variable with which the client and server coordinate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 int client_makes_request = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 /* indicates that it's time to print out a report */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 int time_to_report = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 /*** now application-specific variables ***/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 /* an array that stores whether the handler threads are in use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 int handler_thread_in_use[MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 /***** statistics-gathering variables *****/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 struct s_statistics {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 /* store the number of times each handler has been invoked */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 unsigned long handler_invocation_histogram[MAX_HANDLERS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 /* store how many times malloc has been attempted and how many times
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 it has failed */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 unsigned long malloc_tries, malloc_failures;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 /* how many threads have been created */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 unsigned long thread_creations, thread_exits;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 };
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 struct s_statistics statistics;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 /* some function prototypes; those with the sc_ prefix are
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 "statistics-collecting" versions of the cyg_ primitives */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 void sc_thread_create(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 cyg_addrword_t sched_info, /* scheduling info (eg pri) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 cyg_thread_entry_t *entry, /* entry point function */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 cyg_addrword_t entry_data, /* entry data */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 char *name, /* optional thread name */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 void *stack_base, /* stack base, NULL = alloc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 cyg_ucount32 stack_size, /* stack size, 0 = default */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 cyg_handle_t *handle, /* returned thread handle */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 cyg_thread *thread /* put thread here */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 void sc_thread_exit(void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 int get_handler_slot(cyg_handle_t current_threadH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 void perform_stressful_tasks(void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 void permute_array(char a[], int size, int seed);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 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
156 cyg_alarm *death_alarm_p, int *killed_p);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 void handle_death(cyg_handle_t deathH, cyg_handle_t alarmH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 void print_statistics(void);
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 /* we need to declare the alarm handling function (which is defined
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 below), so that we can pass it to cyg_alarm_initialize() */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 cyg_alarm_t report_alarm_func, death_alarm_func;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 /* handle and alarm for the report alarm */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 cyg_handle_t report_alarmH, counterH, system_clockH;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 cyg_alarm report_alarm;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 /* we install our own startup routine which sets up threads */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 void cyg_user_start(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 int i;
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 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 CYG_TEST_INFO("# Entering stress's cyg_user_start() function");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 cyg_mutex_init(&client_request_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 cyg_mutex_init(&statistics_print_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 /* initialize statistics */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 memset(&statistics, 0, sizeof(statistics));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 /* initialize all handler threads to not be in use */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 for (i = 0; i < MAX_HANDLERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 handler_thread_in_use[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 for (i = 0; i < N_CLIENTS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 int prio;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 char thread_name[20];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 sprintf(thread_name, "client-%02d", i);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 prio = i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 sc_thread_create(prio, client_program, (cyg_addrword_t) i,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 thread_name, (void *) client_stack[i], STACK_SIZE,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 &(clientH[i]), &client_thread_s[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 priority_in_use[prio] = 1;
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 for (i = 0; i < N_LISTENERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 int prio;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 char thread_name[20];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 sprintf(thread_name, "listener-%02d", i);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 prio = N_CLIENTS + i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 sc_thread_create(prio, listener_program, (cyg_addrword_t) i,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 thread_name, (void *) listener_stack[i], STACK_SIZE,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 &listenerH[i], &listener_thread_s[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 priority_in_use[prio] = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 for (i = 0; i < N_CLIENTS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 cyg_thread_resume(clientH[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 for (i = 0; i < N_LISTENERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 cyg_thread_resume(listenerH[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 /* 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
215 print a report */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 cyg_alarm_create(counterH, report_alarm_func,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 (cyg_addrword_t) 4000,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 &report_alarmH, &report_alarm);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 if (cyg_test_is_simulator) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 cyg_alarm_initialize(report_alarmH, cyg_current_time()+300, 400);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 cyg_alarm_initialize(report_alarmH, cyg_current_time()+300, 4000);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 /* client_program() -- an obnoxious client which makes a lot of requests */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 void client_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 int delay;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 cyg_handle_t counterH, deathH, system_clockH;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 cyg_alarm death_alarm;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 int is_dead = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 setup_death_alarm(data, &deathH, &death_alarm, &is_dead);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 printf("# Starting client-%d\n", (int) data);
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 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 for (;;) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 delay = (rand() % 3);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 /* now send a request to the server */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 cyg_mutex_lock(&client_request_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 ++client_makes_request;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 /* printf("client_makes_request %d\n", client_makes_request); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 } cyg_mutex_unlock(&client_request_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 cyg_thread_delay(10+delay);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 /* cyg_thread_delay(0); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 if (is_dead) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 handle_death(deathH, report_alarmH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 #endif /* DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 /* listener_program() -- listens for a request and spawns a handler to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 take care of the request */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 void listener_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 /* int message = (int) data; */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 int handler_slot;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 printf("# Beginning execution; thread data is %d\n", (int) data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 for (;;) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 /* as an extra task, the listener sees if all clients have been
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 killed off, so it can report that the test is over */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278 if (n_clients_killed == N_CLIENTS) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 n_clients_killed = -1; /* so we don't call this again */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 CYG_TEST_PASS_FINISH("Kernel thread stress test OK");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 #endif /* DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 if (client_makes_request > 0) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 int prio;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 /* printf("just got a request from a client (count = %d)\n", */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 /* client_makes_request); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 cyg_mutex_lock(&client_request_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 --client_makes_request;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 } cyg_mutex_unlock(&client_request_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 handler_slot = get_handler_slot(listenerH[(int) data]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 prio = N_CLIENTS+N_LISTENERS+handler_slot;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 priority_in_use[prio] = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 sc_thread_create(prio, handler_program,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 (cyg_addrword_t) handler_slot,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 "handler", (void *) handler_stack[handler_slot],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 STACK_SIZE2, &handlerH[handler_slot],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 &handler_thread_s[handler_slot]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 cyg_thread_resume(handlerH[handler_slot]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300 ++statistics.handler_invocation_histogram[handler_slot];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 cyg_thread_delay(1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 /* handler_program() -- is spawned to handle each incoming request */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 void handler_program(cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 /* here is where we perform specific stressful tasks */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 perform_stressful_tasks();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 if (time_to_report) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 time_to_report = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 print_statistics();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 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
318 /* cyg_thread_delay(0); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 /* lock the scheduler before we declare this thread slot available
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321 and quit; note that cyg_thread_exit() will unlock the scheduler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 as many times as necessary */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 cyg_mutex_lock(&handler_slot_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 handler_thread_in_use[data] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325 priority_in_use[N_CLIENTS + N_LISTENERS + (int) data] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 } cyg_mutex_unlock(&handler_slot_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 /* FIXME: could there be a race condition right here? I unlock the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 scheduler, so I could get pre-empted out, but meanwhile I have
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 declared this thread available again. must fix it. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330 sc_thread_exit();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 /* look for an available handler thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 int get_handler_slot(cyg_handle_t current_threadH)
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 int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 int found = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 while (!found) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 for (i = 0; i < MAX_HANDLERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 cyg_mutex_lock(&handler_slot_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 if (!handler_thread_in_use[i]) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 found = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 handler_thread_in_use[i] = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 } cyg_mutex_unlock(&handler_slot_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 if (found) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 break;
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 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 /* must do a check here to see if all clients have been killed,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 since otherwise we might end up in an infinite loop */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 if (n_clients_killed == N_CLIENTS) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 n_clients_killed = -1; /* so we don't call this again */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 CYG_TEST_PASS_FINISH("Kernel thread stress test OK");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 #endif
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 cyg_thread_delay(1);
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 return i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 /* do things which will stress the system */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 void perform_stressful_tasks()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 #define MAX_MALLOCED_SPACES 100 /* do this many mallocs at most */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 #define MALLOCED_BASE_SIZE 1 /* basic size in bytes */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369 char *spaces[MAX_MALLOCED_SPACES];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 unsigned int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 cyg_mutex_t tmp_lock;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 cyg_uint8 pool_space[10][100];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 cyg_handle_t mempool_handles[10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 cyg_mempool_fix mempool_objects[10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 cyg_mutex_init(&tmp_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 /* 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
381 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
382 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
383 allocation/deallocation concurrent with other thread execution
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 (although I'm about to throw in a yield()) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 for (i = 0; i < MAX_MALLOCED_SPACES; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 ++statistics.malloc_tries;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 /* 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
388 spaces[i] = (char *) malloc(((int)i*2.0+1)*MALLOCED_BASE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 if (i % 100 == 0) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 cyg_thread_yield();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 /* now free it all up */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 for (i = 0; i < MAX_MALLOCED_SPACES; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 if (spaces[i] != NULL) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 unsigned int j;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 for (j = 0; j < (i*2+1)*MALLOCED_BASE_SIZE; ++j) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 spaces[i][j] = 0xAA; /* write a bit pattern */
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 free(spaces[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 ++statistics.malloc_failures;
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 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 /* now allocate and then free some fixed-size memory pools; for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 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
408 sharing the memory pools and racing for memory. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 cyg_mempool_fix_create(pool_space[i], 100, (i+1)*3,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 &mempool_handles[i], &mempool_objects[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 spaces[i] = cyg_mempool_fix_try_alloc(mempool_handles[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 for (i = 0; i < 10; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 if (spaces[i]) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 cyg_mempool_fix_delete(mempool_handles[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 cyg_mutex_destroy(&tmp_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 /* 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
428 quick and simple. in this case it sets a global flag which is
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 checked by threads. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 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
431 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 time_to_report = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 /* 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
436 caller, since they must persist for the life of the alarm */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 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
438 cyg_alarm *death_alarm_p, int *killed_p)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 cyg_handle_t system_clockH, counterH;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442 cyg_resolution_t rtc_res;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 system_clockH = cyg_real_time_clock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 cyg_clock_to_counter(system_clockH, &counterH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 cyg_alarm_create(counterH, death_alarm_func,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 (cyg_addrword_t) killed_p,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 deathHp, death_alarm_p);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 rtc_res = cyg_clock_get_resolution(system_clockH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 cyg_tick_count_t tick_delay;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 tick_delay = (long long)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 ((1000000000.0*rtc_res.divisor)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 *((double)DEATH_TIME_LIMIT)/((double)rtc_res.dividend));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456 if ( cyg_test_is_simulator )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 tick_delay /= 10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 cyg_alarm_initialize(*deathHp, cyg_current_time() + tick_delay, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 #endif /* DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 /* death_alarm_func() is the alarm handler that kills the current
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 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
465 thread is constantly checking. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 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
467 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 int *killed_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 killed_p = (int *) data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 *killed_p = 1;
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473 #ifdef DEATH_TIME_LIMIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 /* handle_death is called by a client thread when it dies; it kills
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 off the alarm */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 void handle_death(cyg_handle_t deathH, cyg_handle_t alarmH)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 ++n_clients_killed;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 cyg_alarm_delete(deathH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 cyg_alarm_delete(alarmH);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 cyg_thread_exit();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 #endif /* DEATH_TIME_LIMIT */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 /* now I write the sc_ versions of the cyg_functions */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 void sc_thread_create(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 cyg_addrword_t sched_info, /* scheduling info (eg pri) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 cyg_thread_entry_t *entry, /* entry point function */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 cyg_addrword_t entry_data, /* entry data */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 char *name, /* optional thread name */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 void *stack_base, /* stack base, NULL = alloc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 cyg_ucount32 stack_size, /* stack size, 0 = default */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 cyg_handle_t *handle, /* returned thread handle */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 cyg_thread *thread /* put thread here */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 /*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
498 /* fflush(stdout); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 ++statistics.thread_creations;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 cyg_thread_create(sched_info, entry, entry_data, name,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 stack_base, stack_size, handle, thread);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504 void sc_thread_exit()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 /* printf("exiting\n"); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507 /* fflush(stdout); */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 ++statistics.thread_exits;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 cyg_thread_exit();
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 void print_statistics(void)
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 int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516 cyg_mutex_lock(&statistics_print_lock); {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
517 printf("Handler-invocations: ");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
518 for (i = 0; i < MAX_HANDLERS; ++i) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
519 printf("%4lu ", statistics.handler_invocation_histogram[i]);
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 printf("\n");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522 printf("malloc()-tries/failures: -- %7lu %7lu\n",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
523 statistics.malloc_tries, statistics.malloc_failures);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
524 printf("client_makes_request: %d\n", client_makes_request);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
525 } cyg_mutex_unlock(&statistics_print_lock);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
526 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
527
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
528 #else /* CYGSEM_LIBC_MALLOC */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
529 # define N_A_MSG "this test needs malloc"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 #endif /* CYGSEM_LIBC_MALLOC */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
532 #else /* CYGFUN_KERNEL_THREADS_TIMER */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
533 # define N_A_MSG "this test needs kernel threads timer"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
534 #endif /* CYGFUN_KERNEL_THREADS_TIMER */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
535
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
536 #else /* CYGPKG_LIBM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
537 # define N_A_MSG "this test needs libm"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
538 #endif /* CYGPKG_LIBM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
539
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
540 #else /* CYGSEM_LIBC_STDIO */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
541 # define N_A_MSG "this test needs stdio"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
542 #endif /* CYGSEM_LIBC_STDIO */
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 #else // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
545 # define N_A_MSG "this test needs Kernel C API"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
546 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
547
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
548 #else // def CYGPKG_KERNEL && CYGPKG_IO && CYGPKG_LIBC
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
549 # define N_A_MSG "this tests needs Kernel, libc and IO"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
550 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
552 #ifdef N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
553 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
554 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
555 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
556 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
557 CYG_TEST_NA( N_A_MSG);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
558 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
559 #endif // N_A_MSG