43
43
44
44
#define wdtest_printf (...) printf(__VA_ARGS__)
45
45
46
- #define wdtest_delay (delay_us ) usleep(delay_us )
46
+ #define wdtest_delay (delay_ns ) usleep(delay_ns / 1000 + 1 )
47
47
48
48
/****************************************************************************
49
49
* Private Type
@@ -74,97 +74,89 @@ static void wdtest_callback(wdparm_t param)
74
74
}
75
75
76
76
static void wdtest_once (FAR struct wdog_s * wdog , FAR wdtest_param_t * param ,
77
- sclock_t delay_us )
77
+ sclock_t delay_ns )
78
78
{
79
79
uint64_t cnt ;
80
80
long long diff ;
81
81
clock_t wdset_tick ;
82
82
struct timespec tp ;
83
- clock_t delay_ticks = USEC2TICK (( clock_t )delay_us );
83
+ clock_t delay_ticks = ( clock_t ) NSEC2TICK (( clock_t )delay_ns );
84
84
85
- wdtest_printf ("wdtest_once %lld us \n" , (long long )delay_us );
85
+ wdtest_printf ("wdtest_once %lld ns \n" , (long long )delay_ns );
86
86
87
87
clock_gettime (CLOCK_MONOTONIC , & tp );
88
88
89
89
wdset_tick = clock_time2ticks (& tp );
90
90
cnt = param -> callback_cnt ;
91
+
91
92
wdtest_assert (wd_start (wdog , delay_ticks , wdtest_callback ,
92
93
(wdparm_t )param ) == OK );
93
94
94
- while (cnt + 1 != param -> callback_cnt )
95
- {
96
- wdtest_delay (delay_us );
97
- }
95
+ wdtest_delay (delay_ns );
98
96
99
97
diff = (long long )(param -> triggered_tick - wdset_tick );
100
98
101
- /* Ensure diff - delay_ticks is within the tolerance limit. */
99
+ wdtest_assert ( cnt + 1 == param -> callback_cnt );
102
100
103
- wdtest_assert ( diff - delay_ticks >= 0 );
104
- wdtest_assert ( diff - delay_ticks <
105
- USEC2TICK ( WDOGTEST_TOLERENT_LATENCY_US ) + 1 );
101
+ /* Ensure diff - delay_ticks >= 0. */
102
+
103
+ wdtest_assert ( diff - ( long long ) delay_ticks >= 0 );
106
104
wdtest_printf ("wdtest_once latency ticks %lld\n" , diff - delay_ticks );
107
105
}
108
106
109
107
static void wdtest_rand (FAR struct wdog_s * wdog , FAR wdtest_param_t * param ,
110
- sclock_t rand_us )
108
+ sclock_t rand_ns )
111
109
{
112
110
int idx ;
113
- sclock_t delay_us ;
114
- uint64_t cnt = param -> callback_cnt ;
111
+ sclock_t delay_ns ;
115
112
116
113
for (idx = 0 ; idx < WDOGTEST_RAND_ITER ; idx ++ )
117
114
{
118
- delay_us = rand () % rand_us ;
119
- wdtest_assert (wd_start (wdog , USEC2TICK ( delay_us ), wdtest_callback ,
115
+ delay_ns = rand () % rand_ns ;
116
+ wdtest_assert (wd_start (wdog , NSEC2TICK ( delay_ns ), wdtest_callback ,
120
117
(wdparm_t )param ) == 0 );
121
118
122
119
/* Wait or Cancel 50/50 */
123
120
124
- if (delay_us % 2 )
121
+ if (delay_ns % 2 )
125
122
{
126
- while (cnt + 1 != param -> callback_cnt )
127
- {
128
- wdtest_delay (delay_us );
129
- }
123
+ wdtest_delay (delay_ns );
130
124
}
131
125
else
132
126
{
133
127
wd_cancel (wdog );
134
128
}
135
-
136
- cnt = param -> callback_cnt ;
137
129
}
138
130
}
139
131
140
132
static void wdtest_callback_recursive (wdparm_t param )
141
133
{
142
134
struct timespec tp ;
143
135
FAR wdtest_param_t * wdtest_param = (FAR wdtest_param_t * )param ;
144
- sclock_t interval = wdtest_param -> interval ;
145
-
146
- wd_start (wdtest_param -> wdog , interval ,
147
- wdtest_callback_recursive , param );
136
+ sclock_t interval = wdtest_param -> interval ;
148
137
149
138
clock_gettime (CLOCK_MONOTONIC , & tp );
150
139
151
140
wdtest_param -> callback_cnt += 1 ;
152
141
wdtest_param -> triggered_tick = clock_time2ticks (& tp );
142
+
143
+ wd_start (wdtest_param -> wdog , interval ,
144
+ wdtest_callback_recursive , param );
153
145
}
154
146
155
147
static void wdtest_recursive (FAR struct wdog_s * wdog ,
156
148
FAR wdtest_param_t * param ,
157
- sclock_t delay_us ,
149
+ sclock_t delay_ns ,
158
150
unsigned int times )
159
151
{
160
152
uint64_t cnt ;
161
153
struct timespec tp ;
162
154
clock_t wdset_tick ;
163
155
164
- wdtest_printf ("wdtest_recursive %lldus\n" , (long long )delay_us );
156
+ wdtest_printf ("wdtest_recursive %lldus\n" , (long long )delay_ns );
165
157
cnt = param -> callback_cnt ;
166
158
param -> wdog = wdog ;
167
- param -> interval = (sclock_t )USEC2TICK ((clock_t )delay_us );
159
+ param -> interval = (sclock_t )NSEC2TICK ((clock_t )delay_ns );
168
160
169
161
wdtest_assert (param -> interval >= 0 );
170
162
@@ -175,15 +167,12 @@ static void wdtest_recursive(FAR struct wdog_s *wdog,
175
167
wdtest_callback_recursive ,
176
168
(wdparm_t )param ) == OK );
177
169
178
- while (param -> callback_cnt < cnt + times )
179
- {
180
- wdtest_delay (delay_us );
181
- }
170
+ wdtest_delay (times * delay_ns );
182
171
183
172
wdtest_assert (wd_cancel (param -> wdog ) == 0 );
184
173
185
- wdtest_printf ("recursive wdog triggered %u times, elapsed tick %lld\n" ,
186
- times ,
174
+ wdtest_printf ("recursive wdog triggered %llu times, elapsed tick %lld\n" ,
175
+ ( unsigned long long )( param -> callback_cnt - cnt ) ,
187
176
(long long )(param -> triggered_tick - wdset_tick ));
188
177
}
189
178
@@ -253,7 +242,8 @@ static void wdog_test_run(FAR wdtest_param_t *param)
253
242
254
243
wdtest_assert (rest < delay && rest > (delay >> 1 ));
255
244
256
- wdtest_printf ("wd_start with maximum delay, cancel %ld\n" , (long )rest );
245
+ wdtest_printf ("wd_start with maximum delay, cancel %lld\n" ,
246
+ (long long )rest );
257
247
258
248
wdtest_assert (wd_cancel (& test_wdog ) == 0 );
259
249
@@ -264,19 +254,10 @@ static void wdog_test_run(FAR wdtest_param_t *param)
264
254
wdtest_callback , (wdparm_t )param ) != OK );
265
255
wdtest_assert (wd_gettime (& test_wdog ) == 0 );
266
256
267
- /* Recursive wdog delay from 10us to 1000us */
257
+ /* Recursive wdog delay from 1000us to 10000us */
268
258
269
- wdtest_recursive (& test_wdog , param , 10 , 1000 );
270
- wdtest_delay (10 );
271
- wdtest_recursive (& test_wdog , param , 100 , 100 );
272
- wdtest_delay (10 );
273
- wdtest_recursive (& test_wdog , param , 1000 , 10 );
274
- wdtest_delay (10 );
275
-
276
- /* Random delay ~1us */
277
-
278
- wdtest_rand (& test_wdog , param , 1024 );
279
- wdtest_delay (10 );
259
+ wdtest_recursive (& test_wdog , param , 1000000 , 100 );
260
+ wdtest_recursive (& test_wdog , param , 10000000 , 10 );
280
261
281
262
/* Random delay ~12us */
282
263
0 commit comments