Skip to content

Commit 2291253

Browse files
c1728p90xc0170
authored andcommitted
Restore ticker state after each test
Update the ticker common test to clean up after each case by restoring the ticker IRQ handler. This allows tickers to function normally after each case has completed.
1 parent 3821b54 commit 2291253

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

TESTS/mbed_hal/common_tickers/main.cpp

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ using namespace utest::v1;
4747

4848
volatile int intFlag = 0;
4949
const ticker_interface_t* intf;
50+
ticker_irq_handler_type prev_irq_handler;
5051
unsigned int ticker_overflow_delta;
5152

5253
/* Auxiliary function to count ticker ticks elapsed during execution of N cycles of empty while loop.
@@ -444,26 +445,46 @@ utest::v1::status_t us_ticker_setup(const Case *const source, const size_t index
444445

445446
intf->init();
446447

447-
set_us_ticker_irq_handler(ticker_event_handler_stub);
448+
prev_irq_handler = set_us_ticker_irq_handler(ticker_event_handler_stub);
448449

449450
ticker_overflow_delta = US_TICKER_OVERFLOW_DELTA;
450451

451452
return greentea_case_setup_handler(source, index_of_case);
452453
}
453454

455+
utest::v1::status_t us_ticker_teardown(const Case * const source, const size_t passed, const size_t failed,
456+
const failure_t reason)
457+
{
458+
set_us_ticker_irq_handler(prev_irq_handler);
459+
460+
prev_irq_handler = NULL;
461+
462+
return greentea_case_teardown_handler(source, passed, failed, reason);
463+
}
464+
454465
#if DEVICE_LPTICKER
455466
utest::v1::status_t lp_ticker_setup(const Case *const source, const size_t index_of_case)
456467
{
457468
intf = get_lp_ticker_data()->interface;
458469

459470
intf->init();
460471

461-
set_lp_ticker_irq_handler(ticker_event_handler_stub);
472+
prev_irq_handler = set_lp_ticker_irq_handler(ticker_event_handler_stub);
462473

463474
ticker_overflow_delta = LP_TICKER_OVERFLOW_DELTA;
464475

465476
return greentea_case_setup_handler(source, index_of_case);
466477
}
478+
479+
utest::v1::status_t lp_ticker_teardown(const Case * const source, const size_t passed, const size_t failed,
480+
const failure_t reason)
481+
{
482+
set_lp_ticker_irq_handler(prev_irq_handler);
483+
484+
prev_irq_handler = NULL;
485+
486+
return greentea_case_teardown_handler(source, passed, failed, reason);
487+
}
467488
#endif
468489

469490
utest::v1::status_t test_setup(const size_t number_of_cases)
@@ -473,25 +494,25 @@ utest::v1::status_t test_setup(const size_t number_of_cases)
473494
}
474495

475496
Case cases[] = {
476-
Case("Microsecond ticker init is safe to call repeatedly", us_ticker_setup, ticker_init_test),
477-
Case("Microsecond ticker info test", us_ticker_setup, ticker_info_test),
478-
Case("Microsecond ticker interrupt test", us_ticker_setup, ticker_interrupt_test),
479-
Case("Microsecond ticker past interrupt test", us_ticker_setup, ticker_past_test),
480-
Case("Microsecond ticker reschedule test", us_ticker_setup, ticker_repeat_reschedule_test),
481-
Case("Microsecond ticker fire interrupt", us_ticker_setup, ticker_fire_now_test),
482-
Case("Microsecond ticker overflow test", us_ticker_setup, ticker_overflow_test),
483-
Case("Microsecond ticker increment test", us_ticker_setup, ticker_increment_test),
484-
Case("Microsecond ticker speed test", us_ticker_setup, ticker_speed_test),
497+
Case("Microsecond ticker init is safe to call repeatedly", us_ticker_setup, ticker_init_test, us_ticker_teardown),
498+
Case("Microsecond ticker info test", us_ticker_setup, ticker_info_test, us_ticker_teardown),
499+
Case("Microsecond ticker interrupt test", us_ticker_setup, ticker_interrupt_test, us_ticker_teardown),
500+
Case("Microsecond ticker past interrupt test", us_ticker_setup, ticker_past_test, us_ticker_teardown),
501+
Case("Microsecond ticker reschedule test", us_ticker_setup, ticker_repeat_reschedule_test, us_ticker_teardown),
502+
Case("Microsecond ticker fire interrupt", us_ticker_setup, ticker_fire_now_test, us_ticker_teardown),
503+
Case("Microsecond ticker overflow test", us_ticker_setup, ticker_overflow_test, us_ticker_teardown),
504+
Case("Microsecond ticker increment test", us_ticker_setup, ticker_increment_test, us_ticker_teardown),
505+
Case("Microsecond ticker speed test", us_ticker_setup, ticker_speed_test, us_ticker_teardown),
485506
#if DEVICE_LPTICKER
486-
Case("lp ticker init is safe to call repeatedly", lp_ticker_setup, ticker_init_test),
487-
Case("lp ticker info test", lp_ticker_setup, ticker_info_test),
488-
Case("lp ticker interrupt test", lp_ticker_setup, ticker_interrupt_test),
489-
Case("lp ticker past interrupt test", lp_ticker_setup, ticker_past_test),
490-
Case("lp ticker reschedule test", lp_ticker_setup, ticker_repeat_reschedule_test),
491-
Case("lp ticker fire interrupt", lp_ticker_setup, ticker_fire_now_test),
492-
Case("lp ticker overflow test", lp_ticker_setup, ticker_overflow_test),
493-
Case("lp ticker increment test", lp_ticker_setup, ticker_increment_test),
494-
Case("lp ticker speed test", lp_ticker_setup, ticker_speed_test),
507+
Case("lp ticker init is safe to call repeatedly", lp_ticker_setup, ticker_init_test, lp_ticker_teardown),
508+
Case("lp ticker info test", lp_ticker_setup, ticker_info_test, lp_ticker_teardown),
509+
Case("lp ticker interrupt test", lp_ticker_setup, ticker_interrupt_test, lp_ticker_teardown),
510+
Case("lp ticker past interrupt test", lp_ticker_setup, ticker_past_test, lp_ticker_teardown),
511+
Case("lp ticker reschedule test", lp_ticker_setup, ticker_repeat_reschedule_test, lp_ticker_teardown),
512+
Case("lp ticker fire interrupt", lp_ticker_setup, ticker_fire_now_test, lp_ticker_teardown),
513+
Case("lp ticker overflow test", lp_ticker_setup, ticker_overflow_test, lp_ticker_teardown),
514+
Case("lp ticker increment test", lp_ticker_setup, ticker_increment_test, lp_ticker_teardown),
515+
Case("lp ticker speed test", lp_ticker_setup, ticker_speed_test, lp_ticker_teardown),
495516
#endif
496517
};
497518

0 commit comments

Comments
 (0)