annotate packages/compat/uitron/current/tests/test7.c @ 66:bf00f99aec69 ecos-sw-2000-02-02

Merge from eCos master repository on 2000-02-02-19:16:44-GMT
author jlarmour
date Wed, 02 Feb 2000 19:57:02 +0000
parents c38311975d4f
children e0c0827131d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 // test7.c
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 // uITRON "C" test program seven
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
14 // http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
15 //
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
18 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
25 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
29 //
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 // Author(s): hmt
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 // Contributors: hmt
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 // Date: 1998-10-01
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // Purpose: uITRON API testing
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 // Description:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 #include <pkgconf/uitron.h> // uITRON setup CYGNUM_UITRON_SEMAS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 // CYGPKG_UITRON et al
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <cyg/infra/testcase.h> // testing infrastructure
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #ifdef CYGPKG_UITRON // we DO want the uITRON package
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #ifdef CYGSEM_KERNEL_SCHED_MLQUEUE // we DO want prioritized threads
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 #ifdef CYGFUN_KERNEL_THREADS_TIMER // we DO want timout-able calls
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK // we DO want the realtime clock
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 // we're OK if it's C++ or neither of those two is defined:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #if defined( __cplusplus ) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 (!defined( CYGIMP_UITRON_INLINE_FUNCS ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 !defined( CYGIMP_UITRON_CPP_OUTLINE_FUNCS) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 // =================== TEST CONFIGURATION ===================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #if \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 /* test configuration for enough tasks */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 (CYGNUM_UITRON_TASKS >= 4) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 (CYGNUM_UITRON_TASKS < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 (CYGNUM_UITRON_START_TASKS == 1) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 ( !defined(CYGPKG_UITRON_TASKS_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 CYGNUM_UITRON_TASKS_INITIALLY >= 4 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 /* test configuration for enough semaphores */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 defined( CYGPKG_UITRON_SEMAS ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 (CYGNUM_UITRON_SEMAS >= 3) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 (CYGNUM_UITRON_SEMAS < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 ( !defined(CYGPKG_UITRON_SEMAS_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 CYGNUM_UITRON_SEMAS_INITIALLY >= 3 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 /* test configuration for enough flag objects */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 defined( CYGPKG_UITRON_FLAGS ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 (CYGNUM_UITRON_FLAGS >= 3) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 (CYGNUM_UITRON_FLAGS < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 ( !defined(CYGPKG_UITRON_FLAGS_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 CYGNUM_UITRON_FLAGS_INITIALLY >= 3 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 /* test configuration for enough message boxes */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 defined( CYGPKG_UITRON_MBOXES ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 (CYGNUM_UITRON_MBOXES >= 3) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 (CYGNUM_UITRON_MBOXES < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 ( !defined(CYGPKG_UITRON_MBOXES_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 CYGNUM_UITRON_MBOXES_INITIALLY >= 3 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 /* test configuration for enough fixed memory pools */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 defined( CYGPKG_UITRON_MEMPOOLFIXED ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 (CYGNUM_UITRON_MEMPOOLFIXED >= 3) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 (CYGNUM_UITRON_MEMPOOLFIXED < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 ( !defined(CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 CYGNUM_UITRON_MEMPOOLFIXED_INITIALLY >= 3 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 /* test configuration for enough variable mempools */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 defined( CYGPKG_UITRON_MEMPOOLVAR ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 (CYGNUM_UITRON_MEMPOOLVAR >= 3) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 (CYGNUM_UITRON_MEMPOOLVAR < 90) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 ( !defined(CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 CYGNUM_UITRON_MEMPOOLVAR_INITIALLY >= 3 ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 /* the end of the large #if statement */ \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 // ============================ END ============================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 #include <cyg/compat/uitron/uit_func.h> // uITRON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 externC void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 cyg_package_start( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 CYG_TEST_INIT();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 CYG_TEST_INFO( "Calling cyg_uitron_start()" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 cyg_uitron_start();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 typedef enum {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 START_WAITOP = 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 SLEEP = 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 DELAY,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 SEMGET,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 FLAGWAIT,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 MSGGET,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 MEMFIXEDGET,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 MEMVARGET,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 DONE_WAITOP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 } WAITOP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 typedef enum {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 START_TYPE = 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 PLAIN = 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 TIMED = 1,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 DONE_TYPE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 } WAITTYPE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 typedef enum {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 START_KILLOP = 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 // These are the 5 ways out of a wait that we perm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 // with other circumstances:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 SIGNAL = 0, // do the appropriate producer op
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 TIMEOUT, // wait for the timeout to fire
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 RELEASE, // do a rel_wai()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 DELETE, // delete the object; del_xxx()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 KILL, // do a ter_tsk() on the waiter
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 SUSPEND_SIGNAL_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 SUSPEND_TIMEOUT_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 SUSPEND_RELEASE_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 SUSPEND_DELETE_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 SUSPEND_KILL, // resume not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 SUSPEND_SIGNAL_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 SUSPEND_TIMEOUT_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 SUSPEND_RELEASE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 SUSPEND_DELETE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 // SUSPEND_KILL_KILL not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 #if 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 // support these later if _really_ keen.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 SUSPEND_SIGNAL_DELETE_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 SUSPEND_TIMEOUT_DELETE_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 SUSPEND_RELEASE_DELETE_RESUME,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 // SUSPEND_DELETE_DELETE_RESUME not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 // SUSPEND_KILL_DELETE_RESUME not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 SUSPEND_SIGNAL_DELETE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 SUSPEND_TIMEOUT_DELETE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 SUSPEND_RELEASE_DELETE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 // SUSPEND_DELETE_DELETE_KILL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 SUSPEND_KILL_DELETE // 2nd kill not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 DONE_KILLOP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 } KILLOP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 char * waitstrings[] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 { "Sleep ", "Delay ", "Sema ", "Flag ", "Mbox ", "MemFix", "MemVar" };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 char * typestrings[] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 { " (Plain) : ", " (Timed) : " };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 char * killstrings[] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 { "Signal",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 "Wait-for-timeout",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 "Release-wait",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 "Delete-object",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 "Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 "Suspend/Signal/Resume",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 "Suspend/Wait-for-timeout/Resume",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 "Suspend/Release-wait/Resume",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 "Suspend/Delete-object/Resume",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 "Suspend/Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 "Suspend/Signal/Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 "Suspend/Wait-for-timeout/Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 "Suspend/Release-wait/Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 "Suspend/Delete-object/Kill-task",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 inline int task2arg( WAITOP wait, WAITTYPE waittype, KILLOP kill )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 return waittype + (wait << 1) + (kill << 8);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 inline void decodearg( int arg, WAITOP *pwait, WAITTYPE *pwaittype, KILLOP *pkill )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 *pwaittype = (arg & 1) ? TIMED : PLAIN;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 *pwait = (arg >> 1) & 0x7f;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 *pkill = (arg >> 8);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227 static char *strdog( char *p, char *q )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 while ( 0 != (*p++ = *q++) );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 return p - 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 static char *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 makemsg( char *z, WAITOP wait, WAITTYPE waittype, KILLOP kill )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 static char buf[ 1000 ];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 char *p = buf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 p = strdog( p, z );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 p = strdog( p, waitstrings[ wait ] );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 p = strdog( p, typestrings[ waittype ] );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 p = strdog( p, killstrings[ kill ] );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 *p = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 return buf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 volatile int intercom = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 T_RTSK rtsk;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 do_suspend( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 CYG_TEST_CHECK( TTS_WAI == rtsk.tskstat, "bad tskstat !TTS_WAI" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 ercd = sus_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 CYG_TEST_CHECK( E_OK == ercd, "sus_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 CYG_TEST_CHECK( TTS_WAS == rtsk.tskstat, "bad tskstat !TTS_WAS" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 do_resume( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 CYG_TEST_CHECK( TTS_SUS == rtsk.tskstat, "bad tskstat !TTS_SUS" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 ercd = dis_dsp();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 ercd = rsm_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 CYG_TEST_CHECK( E_OK == ercd, "rsm_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 CYG_TEST_CHECK( TTS_RDY == rtsk.tskstat, "bad tskstat !TTS_RDY" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 ercd = ena_dsp();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 #define T1_WAIT (7)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 #define T2_WAIT (5)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 #define T1_MALLOC (110)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
292 #ifdef CYGSEM_KERNEL_MEMORY_COALESCE
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 #define T2_MALLOC (100)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
294 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
295 #define T2_MALLOC T1_MALLOC
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
296 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 VP vptmp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 VP vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 VP vp1 = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 VP t2vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 VP t2vp_backup = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 UINT scratch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 T_MSG *msg = (T_MSG *)&scratch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 T_MSG *msg1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 do_prep( WAITOP wait )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 // do nothing for all of those
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 // allocate all the memory in the pool; remember a couple
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 // for freeing as the signalling operation:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 t2vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 vp = vptmp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 do {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 vp1 = vptmp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 vptmp = vp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 ercd = pget_blf( &vp, 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 } while ( E_OK == ercd );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 CYG_TEST_CHECK( E_TMOUT == ercd, "get_blf bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 CYG_TEST_CHECK( NULL != vp, "no allocated block to free" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 // allocate all the memory in the pool; remember a couple
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 // for freeing as the signalling operation:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 t2vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 vp = vptmp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 do {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 vp1 = vptmp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 vptmp = vp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343 ercd = pget_blk( &vp, 1, T1_MALLOC );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 } while ( E_OK == ercd );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 CYG_TEST_CHECK( E_TMOUT == ercd, "get_blk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 CYG_TEST_CHECK( NULL != vp, "no allocated block to free" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 do_tidyup( WAITOP wait )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 // do nothing for all of those
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 // clear the flag variable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 ercd = clr_flg( 1, 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 CYG_TEST_CHECK( E_OK == ercd, "clr_flg bad ercd, tidy vp" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372 if ( NULL != vp ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 ercd = rel_blf( 1, vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy vp" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 if ( NULL != vp1 ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 ercd = rel_blf( 1, vp1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy vp1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 if ( NULL != t2vp ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 ercd = rel_blf( 1, t2vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd, tidy t2vp" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 if ( NULL != vp ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 ercd = rel_blk( 1, vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy vp" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 if ( NULL != vp1 ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 ercd = rel_blk( 1, vp1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy vp1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 if ( NULL != t2vp ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 ercd = rel_blk( 1, t2vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd, tidy t2vp" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 do_recreate( WAITOP wait )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 static T_CSEM t_csem = { NULL, 0, 0 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 static T_CMBX t_cmbx = { NULL, 0 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 static T_CFLG t_cflg = { NULL, 0, 0 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 #ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 static T_CMPF t_cmpf = { NULL, 0, 20, 95 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 #ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 static T_CMPL t_cmpl = { NULL, 0, 2000 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 ER ercd = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 // do nothing for all of those
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 // create the semaphore
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 ercd = cre_sem( 1, &t_csem );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 CYG_TEST_FAIL( "bad call to do_recreate SEMGET" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 // create the flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 ercd = cre_flg( 1, &t_cflg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 CYG_TEST_FAIL( "bad call to do_recreate FLAGWAIT" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 // create the mbox
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450 ercd = cre_mbx( 1, &t_cmbx );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 CYG_TEST_FAIL( "bad call to do_recreate MSGGET" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 #ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 // create the mempool
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 ercd = cre_mpf( 1, &t_cmpf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 CYG_TEST_FAIL( "bad call to do_recreate MEMFIXEDGET" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 #ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 // create the mempool
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 ercd = cre_mpl( 1, &t_cmpl );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
471 CYG_TEST_FAIL( "bad call to do_recreate MEMVARGET" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
472 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478 // this is just to use ercd to prevent warnings
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 CYG_TEST_CHECK( E_OK == ercd, "<blank> bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 do_signal( WAITOP wait )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 // send a wakeup
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 ercd = wup_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 // simply wait for task 2's delay to complete
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 ercd = dly_tsk( T1_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 // signal the semaphore
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 ercd = sig_sem( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 // set the flag bits
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506 ercd = set_flg( 1, 0xff );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 CYG_TEST_CHECK( E_OK == ercd, "set_flg bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 // send a message
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511 ercd = snd_msg( 1, msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 CYG_TEST_CHECK( E_OK == ercd, "snd_msg bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
514 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 // release a couple of blocks we allocated earlier. I hope.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 CYG_TEST_CHECK( NULL != vp, "no allocated block to free" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517 CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 ercd = rel_blf( 1, vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 ercd = rel_blf( 1, vp1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 vp1 = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 // release a couple of blocks we allocated earlier. I hope.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527 CYG_TEST_CHECK( NULL != vp, "no allocated block to free" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528 CYG_TEST_CHECK( NULL != vp1, "no allocated block to free1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 ercd = rel_blk( 1, vp );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 vp = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532 ercd = rel_blk( 1, vp1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 vp1 = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543 do_delete( WAITOP wait )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 ER ercd = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 CYG_TEST_FAIL( "bad call to do_delete( SLEEP or DELAY )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
551 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 // delete the semaphore
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554 ercd = del_sem( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 CYG_TEST_FAIL( "bad call to do_delete( SEMGET )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562 // delete the flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 ercd = del_flg( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566 CYG_TEST_FAIL( "bad call to do_delete( FLAGWAIT )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 // delete the mbox
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 ercd = del_mbx( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 CYG_TEST_FAIL( "bad call to do_delete( MSGGET )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 #ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 // delete the mempool
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581 ercd = del_mpf( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 CYG_TEST_CHECK( E_OK == ercd, "del_mpf bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 CYG_TEST_FAIL( "bad call to do_delete( MEMFIXEDGET )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588 #ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589 // delete the mempool
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590 ercd = del_mpl( 1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591 CYG_TEST_CHECK( E_OK == ercd, "del_mpl bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 CYG_TEST_FAIL( "bad call to do_delete( MEMVARGET )" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 // this is just to use ercd to prevent warnings
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 CYG_TEST_CHECK( E_OK == ercd, "<blank> bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 do_wait( WAITOP wait, WAITTYPE type )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 switch ( wait ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 case SLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 return ( PLAIN == type ) ? slp_tsk() : tslp_tsk( T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 case DELAY:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 return dly_tsk( T2_WAIT ); // forget the type
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 case SEMGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 return ( PLAIN == type ) ? wai_sem( 1 ) : twai_sem( 1, T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 case FLAGWAIT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 return ( PLAIN == type ) ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 wai_flg( &scratch, 1, 0x55, TWF_ANDW ) :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 twai_flg( &scratch, 1, 0xaa, TWF_ANDW, T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 case MSGGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 return ( PLAIN == type ) ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 rcv_msg( &msg1, 1 ) :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
623 trcv_msg( &msg1, 1, T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624 case MEMFIXEDGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625 return ( PLAIN == type ) ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
626 get_blf( &t2vp, 1 ) :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 tget_blf( &t2vp, 1, T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
628 case MEMVARGET:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 return ( PLAIN == type ) ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630 get_blk( &t2vp, 1, T2_MALLOC ) :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
631 tget_blk( &t2vp, 1, T2_MALLOC, T2_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
632 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
633 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
634 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
635 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
636 CYG_TEST_FAIL( "Bad wait in do_wait" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
637 return E_SYS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641 void task1( unsigned int arg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 WAITOP wait;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 WAITTYPE type;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 KILLOP kill;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 CYG_TEST_INFO( "Task 1 running" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 ercd = chg_pri( 1, 8 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653 for ( wait = START_WAITOP; wait < DONE_WAITOP ; wait++) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 for ( type = START_TYPE; type < DONE_TYPE ; type++ ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 for ( kill = START_KILLOP; kill < DONE_KILLOP ; kill++ ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 // These clauses deal with a couple of special cases:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658 // [doing it this way helps keep the rest of the code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 // nicely general and orthogonal]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 // 1) DELAY: dly_tsk(): when this times out, the retcode is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 // E_OK rather than E_TMOUT, and it always times out. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663 // "signalling" method here is just to wait yourself. So we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 // do not test DELAY with TIMED type.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 // 2) PLAIN tests with TIMEOUT kill operations: a PLAIN test
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 // will not time out, it'll wait forever, so waiting for it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668 // so to do is pointless; further, we would check for the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 // wrong error code. So we do not test PLAIN tests with
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 // TIMOUT kill operations.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 // 3) SLEEP or DELAY tests with DELETE operations: there is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 // no synchronization to delete in those cases.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674 // 3a) Individual object types are tested for delete support,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 // and if there is none, the test is skipped.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 if ( DELAY == wait && TIMED == type )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678 continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680 if ( PLAIN == type &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 ( ( TIMEOUT == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 (SUSPEND_TIMEOUT_RESUME == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683 (SUSPEND_TIMEOUT_KILL == kill) ) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 if ( (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 #ifndef CYGPKG_UITRON_SEMAS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688 (SEMGET == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690 #ifndef CYGPKG_UITRON_FLAGS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 (FLAGWAIT == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
692 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
693 #ifndef CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
694 (MSGGET == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
695 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 #ifndef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 (MEMFIXEDGET == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 #ifndef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 (MEMVARGET == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 (SLEEP == wait) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 (DELAY == wait)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 ) &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 ((DELETE == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706 (SUSPEND_DELETE_RESUME == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707 (SUSPEND_DELETE_KILL == kill)) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 CYG_TEST_INFO( makemsg( "T1: ", wait, type, kill ) );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 intercom = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 // prepare the synchronization objects
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716 // (actually, just empty the mempools)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 do_prep( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 // start task 2 at a higher priority than myself
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 ercd = dis_dsp();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722 ercd = sta_tsk( 2, task2arg( wait, type, kill ) );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 ercd = chg_pri( 2, 5 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 ercd = ena_dsp();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 // task 2 should run now, until it waits.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 CYG_TEST_CHECK( TTS_WAI == rtsk.tskstat, "bad tskstat" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 CYG_TEST_CHECK( 5 == rtsk.tskpri, "bad tskpri" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 switch ( kill ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 case SIGNAL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 // signal the task appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 do_signal( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 case TIMEOUT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 // wait for the timeout to occur
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 ercd = dly_tsk( T1_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 case RELEASE:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748 // hit the task with a release-wait
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 ercd = rel_wai( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 CYG_TEST_CHECK( E_OK == ercd, "rel_wai bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 case DELETE:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 // delete the object appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 do_delete( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758 case KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
763 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
764 case SUSPEND_SIGNAL_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767 // signal the task appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
768 do_signal( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
769 // resume the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770 do_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 case SUSPEND_TIMEOUT_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 // wait for the timeout to occur
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 ercd = dly_tsk( T1_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 // resume the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780 do_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783 case SUSPEND_RELEASE_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
785 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
786 // hit the task with a release-wait
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
787 ercd = rel_wai( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
788 CYG_TEST_CHECK( E_OK == ercd, "rel_wai bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789 // resume the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 do_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
791 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
792 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 case SUSPEND_DELETE_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 // delete the object appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797 do_delete( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798 // resume the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 do_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 // it should now have run to completion
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 case SUSPEND_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
809 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
810 case SUSPEND_SIGNAL_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
811 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
812 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
813 // signal the task appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
814 do_signal( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
815 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
816 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
817 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
818 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
819 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820 case SUSPEND_TIMEOUT_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 // wait for the timeout to occur
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
824 ercd = dly_tsk( T1_WAIT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
825 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
826 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
827 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
828 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
829 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
830 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
831 case SUSPEND_RELEASE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
832 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
833 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
834 // hit the task with a release-wait
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
835 ercd = rel_wai( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
836 CYG_TEST_CHECK( E_OK == ercd, "rel_wai bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
837 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
838 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
839 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
840 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
841 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
842 case SUSPEND_DELETE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 // suspend the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 do_suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 // delete the object appropriately
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846 do_delete( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 // kill the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848 ercd = ter_tsk( 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
850 // it should now have terminated without running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
851 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
855 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
856
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
857 // task 2 should be dormant now, however it got there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
858 ercd = ref_tsk( &rtsk, 2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860 CYG_TEST_CHECK( TTS_DMT == rtsk.tskstat, "bad tskstat" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862 if ( (SUSPEND_SIGNAL_KILL == kill) &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863 ((MEMFIXEDGET == wait) || (MEMVARGET == wait)) ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 // it was a killed successful memory alloc, so we have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865 // lost the pointer to memory allocated; there is an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866 // implicit storeleak problem when the task trying
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
867 // to allocate is signalled then killed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
868 // Recreate the pointer from an old version:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
869 CYG_TEST_CHECK( NULL == t2vp, "t2vp WAS allocated!" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 t2vp = t2vp_backup;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
873 switch ( kill ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
874 case KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
875 case SUSPEND_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
876 case SUSPEND_SIGNAL_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877 case SUSPEND_TIMEOUT_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878 case SUSPEND_RELEASE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
879 case SUSPEND_DELETE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
880 // if task 2 was killed, expect only one increment
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881 CYG_TEST_CHECK( 1 == intercom, "intercom bad value !1" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884 // otherwise expect two increments
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885 CYG_TEST_CHECK( 2 == intercom, "intercom bad value !2" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
888
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
889 // tidy up or recreate the synchronization objects
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
890 if ( (DELETE == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 (SUSPEND_DELETE_RESUME == kill) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
892 (SUSPEND_DELETE_KILL == kill) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 do_recreate( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895 do_tidyup( wait );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
899 CYG_TEST_PASS("synchronization interaction tests");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901 // all done
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 CYG_TEST_EXIT( "All done" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 ext_tsk();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908 void task2( unsigned int arg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
910 ER ercd;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911 WAITOP wait;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 WAITTYPE waittype;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 KILLOP kill;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915 decodearg( arg, &wait, &waittype, &kill );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917 // CYG_TEST_INFO( makemsg( " 2: ", wait, waittype, kill ) );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 intercom++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
920 ercd = do_wait( wait, waittype );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
921 intercom++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923 switch ( kill ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
924 case SIGNAL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
925 case SUSPEND_SIGNAL_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926 // we expect to have been signalled correctly
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 CYG_TEST_CHECK( E_OK == ercd, "T2 wait bad ercd" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
928 // here we know that the op completed OK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
929 if ( (MEMFIXEDGET == wait) || (MEMVARGET == wait) ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
930 // it was a successful memory alloc of whichever type,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
931 // so we can save away a copy of t2vp for working round an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
932 // implicit storeleak problem when the task trying to allocate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933 // is signalled then killed:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934 CYG_TEST_CHECK( NULL != t2vp, "No t2vp allocated!" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
935 t2vp_backup = t2vp;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
936 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
937 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 case TIMEOUT:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939 case SUSPEND_TIMEOUT_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
940 // we expect to have timed out - if it's a timeout op.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
941 CYG_TEST_CHECK( E_TMOUT == ercd, "T2 timeout bad ercd, !E_TMOUT" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
943 case RELEASE:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
944 case SUSPEND_RELEASE_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
945 // we expect to have suffered a release wait.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
946 CYG_TEST_CHECK( E_RLWAI == ercd, "T2 release bad ercd, !E_RLWAI" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
947 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948 case DELETE:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
949 case SUSPEND_DELETE_RESUME:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
950 // we expect to be told the object is gone
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
951 CYG_TEST_CHECK( E_DLT == ercd, "T2 release bad ercd, !E_DLT" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
952 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
953 case KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
954 case SUSPEND_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
955 case SUSPEND_SIGNAL_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
956 case SUSPEND_TIMEOUT_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
957 case SUSPEND_RELEASE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
958 case SUSPEND_DELETE_KILL:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
959 // we expect to have been killed here, ie. this won't execute!
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
960 CYG_TEST_FAIL( "Task 2 ran to completion!" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
961 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
962 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
963 CYG_TEST_FAIL( "bad switch" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
964 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
965 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
966 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
967
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
968 void task3( unsigned int arg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
969 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
970 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 void task4( unsigned int arg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
974 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
976 #else // not enough (or too many) uITRON objects configured in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977 #define N_A_MSG "not enough uITRON objects to run test"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
978 #endif // not enough (or too many) uITRON objects configured in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
979 #else // not C++ and some C++ specific options enabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
980 #define N_A_MSG "C++ specific options selected but this is C"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
981 #endif // not C++ and some C++ specific options enabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
982 #else // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
983 #define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
984 #endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985 #else // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
986 #define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
987 #endif // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
988 #else // ! CYGIMP_THREAD_PRIORITY - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
989 #define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
990 #endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE - can't test without it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
991 #else // ! CYGPKG_UITRON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
992 #define N_A_MSG "uITRON Compatibility layer disabled"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
993 #endif // CYGPKG_UITRON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
995 #ifdef N_A_MSG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
996 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
997 cyg_start( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
998 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999 CYG_TEST_INIT();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1000 CYG_TEST_NA( N_A_MSG );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1001 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1002 #endif // N_A_MSG defined ie. we are N/A.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1003
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1004 // EOF test7.c