annotate packages/devs/watchdog/current/tests/watchdog.cxx @ 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
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 // watchdog.cxx
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 // Watchdog test
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: 32
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
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: 32
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: 32
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: 32
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: 32
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: 32
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
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: 32
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
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: 32
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: 32
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: 32
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 32
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): nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 // Contributors: nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 // Date: 1998-07-20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // Description: Tests the Kernel Wall Clock
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 // This test exercises the Watchdog class and checks that it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 // works as advertised.
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 #include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 #include <cyg/kernel/thread.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <cyg/kernel/thread.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 #include <cyg/kernel/sched.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include <cyg/kernel/mutex.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 #include <cyg/kernel/sema.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #include <cyg/kernel/clock.hxx>
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 #include <cyg/kernel/diag.h>
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 #include <cyg/devs/watchdog.hxx>
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 #include <cyg/infra/testcase.h>
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
57 #include <cyg/infra/diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
59 #if defined(CYGFUN_KERNEL_THREADS_TIMER) && \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
60 defined(CYGVAR_KERNEL_COUNTERS_CLOCK)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #include <cyg/kernel/sched.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 // Data for the test
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
67 #ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
68 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
69 #else
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 #define STACKSIZE (2*1024) // size of thread stack
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
71 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 char thread_stack[STACKSIZE];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 inline void *operator new(size_t size, void *ptr) { return ptr; };
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 // array of threads.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 char thread[sizeof(Cyg_Thread)];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 Cyg_Thread *th;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
82 //cyg_tick_count one_sec;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
83 cyg_tick_count watchdog_delay;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
84 volatile bool watchdog_fired;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
85 volatile cyg_tick_count watchdog_time;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
87 #define WATCHDOG_LOOPS_HW 5
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
88 #define WATCHDOG_LOOPS_SIM 1
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
89 #define WATCHDOG_CYCLES_PER_LOOP_HW 10
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
90 #define WATCHDOG_CYCLES_PER_LOOP_SIM 2
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
91 #define WATCHDOG_TICKS_TILL_TIMEOUT 10
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 // Action functions:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 void watchdog_action1( CYG_ADDRWORD data )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
98 watchdog_fired = true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
99 watchdog_time = Cyg_Clock::real_time_clock->current_value();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 void watchdog_action2( CYG_ADDRWORD data )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 CYG_TEST_PASS_FINISH("Watchdog OK");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106
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 // Thread body
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 void watchdog_thread( CYG_ADDRWORD id )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
113 cyg_tick_count watchdog_start_time;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
114 cyg_tick_count thread_start_time, thread_end_time;
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
115 cyg_ucount8 watchdog_loops, watchdog_cycles_per_loop;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
116
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
117 if (cyg_test_is_simulator) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
118 watchdog_loops = WATCHDOG_LOOPS_SIM;
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
119 watchdog_cycles_per_loop = WATCHDOG_CYCLES_PER_LOOP_SIM;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
120 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
121 watchdog_loops = WATCHDOG_LOOPS_HW;
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
122 watchdog_cycles_per_loop = WATCHDOG_CYCLES_PER_LOOP_HW;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
123 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
124
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
125 watchdog_fired = false;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 Cyg_Watchdog::watchdog.start();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
128 CYG_TEST_INFO("Testing that watchdog does not fire early");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
129
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
130 for (cyg_ucount8 tries = 0; tries < watchdog_loops; tries++) {
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
131 diag_printf("Iteration #%d (testing over %d cycles)\n",
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
132 tries, watchdog_cycles_per_loop);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
133
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
134 // First test that the watchdog does not trigger when being reset.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 Cyg_Watchdog_Action wdaction( watchdog_action1, 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 wdaction.install();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
138 Cyg_Watchdog::watchdog.reset();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
139
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
140 watchdog_start_time = Cyg_Clock::real_time_clock->current_value();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
141 watchdog_fired = false;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
143 for( cyg_ucount8 i = 0; i < watchdog_cycles_per_loop; i++ ) {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
144 thread_start_time = Cyg_Clock::real_time_clock->current_value();
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
145 th->delay( watchdog_delay-2 );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 Cyg_Watchdog::watchdog.reset();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
147 if (watchdog_fired) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
148 thread_end_time = Cyg_Clock::real_time_clock->current_value();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
149 diag_printf("Watchdog fired prematurely after %d ticks\n",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
150 (int)(watchdog_time - watchdog_start_time));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
151 diag_printf(" Thread slept for %d ticks, loop #%d\n",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
152 (int)(thread_end_time - thread_start_time), i);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
153 CYG_TEST_FAIL_FINISH("Watchdog triggered unexpectedly");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
154 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
155 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
156 CYG_TEST_STILL_ALIVE(i, "Resetting watchdog...");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
157 Cyg_Watchdog::watchdog.reset();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
158 watchdog_fired = false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
159 watchdog_start_time = Cyg_Clock::real_time_clock->current_value();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
160 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 // Now check that it triggers when not reset
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
165 CYG_TEST_INFO("Testing that watchdog fires");
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 Cyg_Watchdog_Action wdaction( watchdog_action2, 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 wdaction.install();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 Cyg_Watchdog::watchdog.reset();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
173 th->delay( watchdog_delay*WATCHDOG_TICKS_TILL_TIMEOUT );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 CYG_TEST_FAIL_FINISH("Watchdog failed to trigger");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 // -------------------------------------------------------------------------
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 externC void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 cyg_start( void )
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 CYG_TEST_INIT();
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
186
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
187 #if !defined(CYGIMP_WATCHDOG_EMULATE) && defined(CYGPKG_HAL_MN10300_STDEVAL1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
188 // Workaround for PR 17974
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
189 if( cyg_test_is_simulator )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
190 CYG_TEST_NA("Watchdog device not implemented in MN10300 simulator.");
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
193
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
194 Cyg_Clock::cyg_resolution res = Cyg_Clock::real_time_clock->get_resolution();
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
195
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
196 cyg_uint64 wres = Cyg_Watchdog::watchdog.get_resolution();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
197
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
198 // Calculate how many clock ticks there are in a watchdog cycle.
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
199
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
200 watchdog_delay = ((cyg_tick_count)wres * (cyg_tick_count)res.divisor );
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
201 watchdog_delay /= res.dividend;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 2
diff changeset
202
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203 th = new((void *)&thread) Cyg_Thread(CYG_SCHED_DEFAULT_INFO,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204 watchdog_thread,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 0,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
206 "watchdog_thread",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207 (CYG_ADDRESS)thread_stack,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 STACKSIZE
0
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 th->resume();
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 // Get the world going
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 Cyg_Scheduler::scheduler.start();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
218 #else // if defined(CYGFUN_KERNEL_THREADS_TIMER) etc...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
220 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
222 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
223 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
224 CYG_TEST_NA("Kernel real-time clock/threads timer disabled");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
226
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
227 #endif // if defined(CYGFUN_KERNEL_THREADS_TIMER) etc...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 // EOF watchdog.cxx