1 //==========================================================================
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
46 // Description: Tests some basic thread functions.
47 // Omissions: Cyg_ThreadTimer
49 // exit -- not necessarily called
53 // get/set_sleep_reason
54 // get/set_wake_reason
58 //####DESCRIPTIONEND####
60 #include <pkgconf/kernel.h>
62 #include <cyg/kernel/sched.hxx>
63 #include <cyg/kernel/thread.hxx>
65 #include <cyg/infra/testcase.h>
67 #ifdef CYGFUN_KERNEL_THREADS_TIMER
69 #include <cyg/kernel/sched.inl>
70 #include <cyg/kernel/thread.inl>
72 #include "testaux.hxx"
74 #ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL
75 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
77 #define STACKSIZE 2000
80 static char stack[2][STACKSIZE];
82 static char thread[2][sizeof(Cyg_Thread)];
84 static Cyg_Thread *pt0,*pt1;
85 static cyg_uint16 uid0,uid1;
88 static void entry0( CYG_ADDRWORD data )
92 uid0 = pt0->get_unique_id();
99 } while( Cyg_Thread::RUNNING == pt1->get_state() );
101 CHECK( Cyg_Thread::SLEEPING == pt1->get_state() );
105 CHECK( uid0 != uid1 );
107 CYG_TEST_PASS_FINISH("Thread 1 OK");
110 static void entry1( CYG_ADDRWORD data )
112 CHECK( 333 == data );
114 uid1 = pt1->get_unique_id();
116 Cyg_Thread *self = Cyg_Thread::self();
118 CHECK( self == pt1 );
123 Cyg_Thread::exit(); // no guarantee this will be called
126 void thread1_main( void )
130 pt0 = new((void *)&thread[0])
131 Cyg_Thread(CYG_SCHED_DEFAULT_INFO,
134 (CYG_ADDRESS)stack[0], STACKSIZE );
135 pt1 = new((void *)&thread[1])
136 Cyg_Thread(CYG_SCHED_DEFAULT_INFO,
139 (CYG_ADDRESS)stack[1], STACKSIZE );
141 CYG_ASSERTCLASS( pt0, "error" );
142 CYG_ASSERTCLASS( pt1, "error" );
147 Cyg_Scheduler::start();
149 CYG_TEST_FAIL_FINISH("Not reached");
155 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
156 cyg_hal_invoke_constructors();
161 #else // ifdef CYGFUN_KERNEL_THREADS_TIMER
167 CYG_TEST_NA("Kernel threads timer disabled");
170 #endif // ifdef CYGFUN_KERNEL_THREADS_TIMER