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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [kernel/] [v2_0/] [tests/] [clocktruth.cxx] - Blame information for rev 572

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

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//        clocktruth.cxx
4
//
5
//        Clock Converter test
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
// Copyright (C) 2003 Gary Thomas
13
//
14
// eCos is free software; you can redistribute it and/or modify it under
15
// the terms of the GNU General Public License as published by the Free
16
// Software Foundation; either version 2 or (at your option) any later version.
17
//
18
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
20
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
// for more details.
22
//
23
// You should have received a copy of the GNU General Public License along
24
// with eCos; if not, write to the Free Software Foundation, Inc.,
25
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26
//
27
// As a special exception, if other files instantiate templates or use macros
28
// or inline functions from this file, or you compile this file and link it
29
// with other works to produce a work based on this file, this file does not
30
// by itself cause the resulting work to be covered by the GNU General Public
31
// License. However the source code for this file must still be made available
32
// in accordance with section (3) of the GNU General Public License.
33
//
34
// This exception does not invalidate any other reasons why a work based on
35
// this file might be covered by the GNU General Public License.
36
//
37
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38
// at http://sources.redhat.com/ecos/ecos-license/
39
// -------------------------------------------
40
//####ECOSGPLCOPYRIGHTEND####
41
//==========================================================================
42
//#####DESCRIPTIONBEGIN####
43
//
44
// Author(s):     hmt
45
// Contributors:  hmt
46
// Date:          2001-06-05
47
// Description:   Tests the Kernel Real Time Clock for accuracy using a human
48
// 
49
//####DESCRIPTIONEND####
50
 
51
 
52
// This is for a human to watch to sanity check the clock rate.
53
// It's easier to see what's happening if you enable this:
54
#define nRUNFOREVER
55
 
56
 
57
#include <pkgconf/kernel.h>
58
 
59
#include <cyg/kernel/clock.hxx>
60
#include <cyg/kernel/sema.hxx>
61
#include <cyg/kernel/thread.hxx>
62
 
63
#include <cyg/infra/testcase.h>
64
 
65
#include <cyg/kernel/clock.inl>
66
#include <cyg/kernel/thread.inl>
67
 
68
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
69
 
70
#include <cyg/infra/diag.h>
71
 
72
#define NTHREADS 1
73
#include "testaux.hxx"
74
 
75
#ifdef RUNFOREVER
76
#define ENDPOINT 8192
77
#else
78
#define ENDPOINT 20
79
#endif
80
 
81
static cyg_alarm_fn alarmfunc;
82
static void alarmfunc( Cyg_Alarm *alarm, CYG_ADDRWORD data )
83
{
84
    Cyg_Binary_Semaphore *sp = (Cyg_Binary_Semaphore *)data;
85
    sp->post();
86
}
87
 
88
 
89
static void entry0( CYG_ADDRWORD data )
90
{
91
    cyg_uint32 now, then;
92
    int i;
93
 
94
    Cyg_Clock *rtc = Cyg_Clock::real_time_clock;
95
 
96
    Cyg_Binary_Semaphore sema;
97
 
98
    Cyg_Alarm alarm( rtc, &alarmfunc, (CYG_ADDRWORD)&sema );
99
 
100
    // First, print 100 lines as fast as you can, of distinct ticks.
101
    for ( i = 0; i < 100; i++ ) {
102
        now = rtc->current_value_lo();
103
        then = now;
104
        while ( then == now )
105
            now = rtc->current_value_lo();
106
 
107
        diag_printf( "INFO<time now %8d>\n", now );
108
    }
109
 
110
    diag_printf( "INFO<per-second times are: %8d>\n", rtc->current_value_lo() );
111
    for ( i = 0; i < 20; i++ ) {
112
        Cyg_Thread::counted_sleep( 100 );
113
        diag_printf( "INFO<per-second time %2d is %8d>\n",
114
                     i, rtc->current_value_lo() );
115
    }
116
 
117
    alarm.initialize( rtc->current_value() + 100, 100 );
118
    alarm.enable();
119
    for ( i = 0; i < ENDPOINT; i++ ) {
120
        sema.wait();
121
        diag_printf( "INFO<alarm time %2d is %8d>\n",
122
                     i, rtc->current_value_lo() );
123
    }
124
 
125
    CYG_TEST_PASS_FINISH("Clock truth OK");
126
}
127
 
128
void clocktruth_main( void )
129
{
130
    CYG_TEST_INIT();
131
    new_thread(entry0, (CYG_ADDRWORD)&thread_obj[0]);
132
    Cyg_Scheduler::start();
133
}
134
 
135
externC void
136
cyg_start( void )
137
{
138
#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
139
    cyg_hal_invoke_constructors();
140
#endif
141
    clocktruth_main();
142
}
143
 
144
#else // def CYGVAR_KERNEL_COUNTERS_CLOCK
145
 
146
externC void
147
cyg_start( void )
148
{
149
    CYG_TEST_INIT();
150
    CYG_TEST_NA( "Kernel real-time clock disabled");
151
}
152
 
153
#endif // def CYGVAR_KERNEL_COUNTERS_CLOCK
154
 
155
// EOF clocktruth.cxx

powered by: WebSVN 2.1.0

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