@@ -24,8 +24,18 @@ static void duration_stop(struct k_timer *timer);
2424
2525/** TESTPOINT: init timer via K_TIMER_DEFINE */
2626K_TIMER_DEFINE (ktimer , duration_expire , duration_stop );
27- static struct k_timer timer ;
28- static struct timer_data tdata ;
27+
28+ static struct k_timer duration_timer ;
29+ static struct k_timer period0_timer ;
30+ static struct k_timer expire_timer ;
31+ static struct k_timer sync_timer ;
32+ static struct k_timer periodicity_timer ;
33+ static struct k_timer status_timer ;
34+ static struct k_timer status_anytime_timer ;
35+ static struct k_timer status_sync_timer ;
36+ static struct k_timer remain_timer ;
37+
38+ static ZTEST_BMEM struct timer_data tdata ;
2939
3040#define TIMER_ASSERT (exp , tmr ) \
3141 do { \
@@ -119,16 +129,15 @@ void test_timer_duration_period(void)
119129{
120130 init_timer_data ();
121131 /** TESTPOINT: init timer via k_timer_init */
122- k_timer_init (& timer , duration_expire , duration_stop );
123- k_timer_start (& timer , DURATION , PERIOD );
132+ k_timer_start (& duration_timer , DURATION , PERIOD );
124133 tdata .timestamp = k_uptime_get ();
125134 busy_wait_ms (DURATION + PERIOD * EXPIRE_TIMES + PERIOD / 2 );
126135 /** TESTPOINT: check expire and stop times */
127- TIMER_ASSERT (tdata .expire_cnt == EXPIRE_TIMES , & timer );
128- TIMER_ASSERT (tdata .stop_cnt == 1 , & timer );
136+ TIMER_ASSERT (tdata .expire_cnt == EXPIRE_TIMES , & duration_timer );
137+ TIMER_ASSERT (tdata .stop_cnt == 1 , & duration_timer );
129138
130139 /* cleanup environemtn */
131- k_timer_stop (& timer );
140+ k_timer_stop (& duration_timer );
132141}
133142
134143/**
@@ -150,17 +159,16 @@ void test_timer_period_0(void)
150159{
151160 init_timer_data ();
152161 /** TESTPOINT: set period 0 */
153- k_timer_init (& timer , period0_expire , NULL );
154- k_timer_start (& timer , DURATION , 0 );
162+ k_timer_start (& period0_timer , DURATION , 0 );
155163 tdata .timestamp = k_uptime_get ();
156164 busy_wait_ms (DURATION + 1 );
157165
158166 /** TESTPOINT: ensure it is one-short timer */
159- TIMER_ASSERT (tdata .expire_cnt == 1 , & timer );
160- TIMER_ASSERT (tdata .stop_cnt == 0 , & timer );
167+ TIMER_ASSERT (tdata .expire_cnt == 1 , & period0_timer );
168+ TIMER_ASSERT (tdata .stop_cnt == 0 , & period0_timer );
161169
162170 /* cleanup environemtn */
163- k_timer_stop (& timer );
171+ k_timer_stop (& period0_timer );
164172}
165173
166174/**
@@ -182,28 +190,24 @@ void test_timer_expirefn_null(void)
182190{
183191 init_timer_data ();
184192 /** TESTPOINT: expire function NULL */
185- k_timer_init (& timer , NULL , duration_stop );
186- k_timer_start (& timer , DURATION , PERIOD );
193+ k_timer_start (& expire_timer , DURATION , PERIOD );
187194 busy_wait_ms (DURATION + PERIOD * EXPIRE_TIMES + PERIOD / 2 );
188195
189- k_timer_stop (& timer );
196+ k_timer_stop (& expire_timer );
190197 /** TESTPOINT: expire handler is not invoked */
191- TIMER_ASSERT (tdata .expire_cnt == 0 , & timer );
198+ TIMER_ASSERT (tdata .expire_cnt == 0 , & expire_timer );
192199 /** TESTPOINT: stop handler is invoked */
193- TIMER_ASSERT (tdata .stop_cnt == 1 , & timer );
200+ TIMER_ASSERT (tdata .stop_cnt == 1 , & expire_timer );
194201
195202 /* cleanup environment */
196- k_timer_stop (& timer );
203+ k_timer_stop (& expire_timer );
197204}
198205
199206/* Wait for the next expiration of an OS timer tick, to synchronize
200207 * test start
201208 */
202209static void tick_sync (void )
203210{
204- static struct k_timer sync_timer ;
205-
206- k_timer_init (& sync_timer , NULL , NULL );
207211 k_timer_start (& sync_timer , 0 , 1 );
208212 k_timer_status_sync (& sync_timer );
209213 k_timer_stop (& sync_timer );
@@ -238,29 +242,30 @@ void test_timer_periodicity(void)
238242
239243 init_timer_data ();
240244 /** TESTPOINT: set duration 0 */
241- k_timer_init (& timer , NULL , NULL );
242- k_timer_start (& timer , 0 , PERIOD );
245+ k_timer_start (& periodicity_timer , 0 , PERIOD );
243246
244247 /* clear the expiration that would have happenned due to
245248 * whatever duration that was set.
246249 */
247- k_timer_status_sync (& timer );
250+ k_timer_status_sync (& periodicity_timer );
248251 tdata .timestamp = k_uptime_get ();
249252
250253 for (int i = 0 ; i < EXPIRE_TIMES ; i ++ ) {
251254 /** TESTPOINT: expired times returned by status sync */
252- TIMER_ASSERT (k_timer_status_sync (& timer ) == 1 , & timer );
255+ TIMER_ASSERT (k_timer_status_sync (& periodicity_timer ) == 1 ,
256+ & periodicity_timer );
253257
254258 delta = k_uptime_delta (& tdata .timestamp );
255259
256260 /** TESTPOINT: check if timer fired within 1ms of the
257261 * expected period (firing time)
258262 */
259- TIMER_ASSERT (WITHIN_ERROR (delta , PERIOD , 1 ), & timer );
263+ TIMER_ASSERT (WITHIN_ERROR (delta , PERIOD , 1 ),
264+ & periodicity_timer );
260265 }
261266
262267 /* cleanup environment */
263- k_timer_stop (& timer );
268+ k_timer_stop (& periodicity_timer );
264269}
265270
266271/**
@@ -281,15 +286,15 @@ void test_timer_periodicity(void)
281286void test_timer_status_get (void )
282287{
283288 init_timer_data ();
284- k_timer_init (& timer , status_expire , status_stop );
285- k_timer_start (& timer , DURATION , PERIOD );
289+ k_timer_start (& status_timer , DURATION , PERIOD );
286290 /** TESTPOINT: status get upon timer starts */
287- TIMER_ASSERT (k_timer_status_get (& timer ) == 0 , & timer );
291+ TIMER_ASSERT (k_timer_status_get (& status_timer ) == 0 , & status_timer );
288292 /** TESTPOINT: remaining get upon timer starts */
289- TIMER_ASSERT (k_timer_remaining_get (& timer ) >= DURATION / 2 , & timer );
293+ TIMER_ASSERT (k_timer_remaining_get (& status_timer ) >= DURATION / 2 ,
294+ & status_timer );
290295
291296 /* cleanup environment */
292- k_timer_stop (& timer );
297+ k_timer_stop (& status_timer );
293298}
294299
295300/**
@@ -310,15 +315,15 @@ void test_timer_status_get(void)
310315void test_timer_status_get_anytime (void )
311316{
312317 init_timer_data ();
313- k_timer_init (& timer , NULL , NULL );
314- k_timer_start (& timer , DURATION , PERIOD );
318+ k_timer_start (& status_anytime_timer , DURATION , PERIOD );
315319 busy_wait_ms (DURATION + PERIOD * (EXPIRE_TIMES - 1 ) + PERIOD / 2 );
316320
317321 /** TESTPOINT: status get at any time */
318- TIMER_ASSERT (k_timer_status_get (& timer ) == EXPIRE_TIMES , & timer );
322+ TIMER_ASSERT (k_timer_status_get (& status_anytime_timer ) == EXPIRE_TIMES ,
323+ & status_anytime_timer );
319324
320325 /* cleanup environment */
321- k_timer_stop (& timer );
326+ k_timer_stop (& status_anytime_timer );
322327}
323328
324329/**
@@ -340,20 +345,20 @@ void test_timer_status_get_anytime(void)
340345void test_timer_status_sync (void )
341346{
342347 init_timer_data ();
343- k_timer_init (& timer , duration_expire , duration_stop );
344- k_timer_start (& timer , DURATION , PERIOD );
348+ k_timer_start (& status_sync_timer , DURATION , PERIOD );
345349
346350 for (int i = 0 ; i < EXPIRE_TIMES ; i ++ ) {
347351 /** TESTPOINT: check timer not expire */
348- TIMER_ASSERT (tdata .expire_cnt == i , & timer );
352+ TIMER_ASSERT (tdata .expire_cnt == i , & status_sync_timer );
349353 /** TESTPOINT: expired times returned by status sync */
350- TIMER_ASSERT (k_timer_status_sync (& timer ) == 1 , & timer );
354+ TIMER_ASSERT (k_timer_status_sync (& status_sync_timer ) == 1 ,
355+ & status_sync_timer );
351356 /** TESTPOINT: check timer not expire */
352- TIMER_ASSERT (tdata .expire_cnt == (i + 1 ), & timer );
357+ TIMER_ASSERT (tdata .expire_cnt == (i + 1 ), & status_sync_timer );
353358 }
354359
355360 /* cleanup environment */
356- k_timer_stop (& timer );
361+ k_timer_stop (& status_sync_timer );
357362}
358363
359364/**
@@ -415,13 +420,13 @@ K_TIMER_DEFINE(timer2, user_data_timer_handler, NULL);
415420K_TIMER_DEFINE (timer3 , user_data_timer_handler , NULL );
416421K_TIMER_DEFINE (timer4 , user_data_timer_handler , NULL );
417422
418- static struct k_timer * user_data_timer [5 ] = {
423+ static ZTEST_DMEM struct k_timer * user_data_timer [5 ] = {
419424 & timer0 , & timer1 , & timer2 , & timer3 , & timer4
420425};
421426
422427static const intptr_t user_data [5 ] = { 0x1337 , 0xbabe , 0xd00d , 0xdeaf , 0xfade };
423428
424- static int user_data_correct [5 ] = { 0 , 0 , 0 , 0 , 0 } ;
429+ static ZTEST_BMEM int user_data_correct [5 ];
425430
426431static void user_data_timer_handler (struct k_timer * timer )
427432{
@@ -504,26 +509,45 @@ void test_timer_remaining_get(void)
504509 u32_t remaining ;
505510
506511 init_timer_data ();
507- k_timer_init (& timer , NULL , NULL );
508- k_timer_start (& timer , DURATION , 0 );
512+ k_timer_start (& remain_timer , DURATION , 0 );
509513 busy_wait_ms (DURATION / 2 );
510- remaining = k_timer_remaining_get (& timer );
511- k_timer_stop (& timer );
514+ remaining = k_timer_remaining_get (& remain_timer );
515+ k_timer_stop (& remain_timer );
512516 zassert_true (remaining <= (DURATION / 2 ), NULL );
513517}
514518
519+ static void timer_init (struct k_timer * timer , k_timer_expiry_t expiry_fn ,
520+ k_timer_stop_t stop_fn )
521+ {
522+ k_object_access_grant (timer , k_current_get ());
523+ k_timer_init (timer , expiry_fn , stop_fn );
524+ }
525+
515526void test_main (void )
516527{
528+ timer_init (& duration_timer , duration_expire , duration_stop );
529+ timer_init (& period0_timer , period0_expire , NULL );
530+ timer_init (& expire_timer , NULL , duration_stop );
531+ timer_init (& sync_timer , NULL , NULL );
532+ timer_init (& periodicity_timer , NULL , NULL );
533+ timer_init (& status_timer , status_expire , status_stop );
534+ timer_init (& status_anytime_timer , NULL , NULL );
535+ timer_init (& status_sync_timer , duration_expire , duration_stop );
536+ timer_init (& remain_timer , NULL , NULL );
537+
538+ k_thread_access_grant (k_current_get (), & ktimer , & timer0 , & timer1 ,
539+ & timer2 , & timer3 , & timer4 );
540+
517541 ztest_test_suite (timer_api ,
518- ztest_unit_test (test_timer_duration_period ),
519- ztest_unit_test (test_timer_period_0 ),
520- ztest_unit_test (test_timer_expirefn_null ),
521- ztest_unit_test (test_timer_periodicity ),
522- ztest_unit_test (test_timer_status_get ),
523- ztest_unit_test (test_timer_status_get_anytime ),
524- ztest_unit_test (test_timer_status_sync ),
525- ztest_unit_test (test_timer_k_define ),
526- ztest_unit_test (test_timer_user_data ),
527- ztest_unit_test (test_timer_remaining_get ));
542+ ztest_user_unit_test (test_timer_duration_period ),
543+ ztest_user_unit_test (test_timer_period_0 ),
544+ ztest_user_unit_test (test_timer_expirefn_null ),
545+ ztest_user_unit_test (test_timer_periodicity ),
546+ ztest_user_unit_test (test_timer_status_get ),
547+ ztest_user_unit_test (test_timer_status_get_anytime ),
548+ ztest_user_unit_test (test_timer_status_sync ),
549+ ztest_user_unit_test (test_timer_k_define ),
550+ ztest_user_unit_test (test_timer_user_data ),
551+ ztest_user_unit_test (test_timer_remaining_get ));
528552 ztest_run_test_suite (timer_api );
529553}
0 commit comments