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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [kernel/] [v2_0/] [tests/] [ksem1.c] - Blame information for rev 528

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
/*=================================================================
2
//
3
//        ksem1.c
4
//
5
//        C API semaphore test 1
6
//
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.
12
//
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.
16
//
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
20
// for more details.
21
//
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.
25
//
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.
32
//
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.
35
//
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####
42
//
43
// Author(s):     dsm
44
// Contributors:    dsm
45
// Date:          1998-03-20
46
// Description:   Tests basic semaphore functionality.
47
//####DESCRIPTIONEND####
48
*/
49
 
50
#include <cyg/hal/hal_arch.h>           // CYGNUM_HAL_STACK_SIZE_TYPICAL
51
 
52
#include <cyg/kernel/kapi.h>
53
 
54
#include <cyg/infra/testcase.h>
55
 
56
#ifdef CYGFUN_KERNEL_API_C
57
 
58
#include "testaux.h"
59
 
60
#define NTHREADS 2
61
#define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
62
 
63
static cyg_handle_t thread[NTHREADS];
64
 
65
static cyg_thread thread_obj[NTHREADS];
66
static char stack[NTHREADS][STACKSIZE];
67
 
68
 
69
static cyg_sem_t s0, s1, s2;
70
 
71
static volatile cyg_ucount8 q = 0;
72
 
73
static void entry0( cyg_addrword_t data )
74
{
75
    cyg_ucount32 val;
76
 
77
    cyg_semaphore_wait(&s0);
78
    CHECK( 1 == q++ );
79
    cyg_semaphore_post(&s1);
80
    cyg_semaphore_wait(&s0);
81
    CHECK( 3 == q++ );
82
    cyg_semaphore_peek(&s0, &val);
83
    CHECK( 0 == val);
84
    CHECK( ! cyg_semaphore_trywait(&s0) );
85
    cyg_semaphore_post(&s0);
86
    CHECK( 4 == q++ );
87
    cyg_semaphore_peek(&s0, &val);
88
    CHECK( 1 == val);
89
    cyg_semaphore_post(&s0);
90
    cyg_semaphore_peek(&s0, &val);
91
    CHECK( 2 == val);
92
    cyg_semaphore_post(&s1);
93
    cyg_semaphore_peek(&s2, &val);
94
    CHECK( 0 == val);
95
    cyg_semaphore_wait(&s2);
96
    CHECK( 6 == q++ );
97
    CYG_TEST_PASS_FINISH("Kernel C API Semaphore 1 OK");
98
}
99
 
100
static void entry1( cyg_addrword_t data )
101
{
102
    cyg_count32 val;
103
 
104
    cyg_semaphore_peek(&s1, &val);
105
    CHECK( 2 == val);
106
    cyg_semaphore_wait(&s1);
107
    cyg_semaphore_peek(&s1, &val);
108
    CHECK( 1 == val);
109
    cyg_semaphore_wait(&s1);
110
    CHECK( 0 == q++ );
111
    cyg_semaphore_peek(&s0, &val);
112
    CHECK( 0 == val);
113
    cyg_semaphore_post(&s0);
114
    cyg_semaphore_wait(&s1);
115
    CHECK( 2 == q++ );
116
    cyg_semaphore_post(&s0);
117
    cyg_semaphore_wait(&s1);
118
    CHECK( 5 == q++ );
119
    cyg_semaphore_peek(&s0, &val);
120
    CHECK( 2 == val);
121
    CHECK( cyg_semaphore_trywait(&s0) );
122
    cyg_semaphore_peek(&s0, &val);
123
    CHECK( 1 == val);
124
    CHECK( cyg_semaphore_trywait(&s0) );
125
    cyg_semaphore_peek(&s0, &val);
126
    CHECK( 0 == val);
127
    cyg_semaphore_post(&s2);
128
    cyg_semaphore_wait(&s0);
129
    CYG_TEST_FAIL_FINISH("Not reached");
130
}
131
 
132
void ksem1_main( void )
133
{
134
    CYG_TEST_INIT();
135
 
136
    cyg_semaphore_init( &s0, 0);
137
    cyg_semaphore_init( &s1, 2);
138
    cyg_semaphore_init( &s2, 0);
139
 
140
    cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "ksem1-0",
141
        (void *)stack[0], STACKSIZE,&thread[0], &thread_obj[0]);
142
    cyg_thread_resume(thread[0]);
143
 
144
    cyg_thread_create(4, entry1 , (cyg_addrword_t)1, "ksem1-1",
145
        (void *)stack[1], STACKSIZE, &thread[1], &thread_obj[1]);
146
    cyg_thread_resume(thread[1]);
147
 
148
    cyg_scheduler_start();
149
 
150
    CYG_TEST_FAIL_FINISH("Not reached");
151
}
152
 
153
externC void
154
cyg_start( void )
155
{
156
    ksem1_main();
157
}
158
 
159
 
160
#else /* def CYGFUN_KERNEL_API_C */
161
externC void
162
cyg_start( void )
163
{
164
    CYG_TEST_INIT();
165
    CYG_TEST_NA("Kernel C API layer disabled");
166
}
167
#endif /* def CYGFUN_KERNEL_API_C */
168
 
169
/* EOF ksem1.c */

powered by: WebSVN 2.1.0

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