@@ -66,10 +66,7 @@ static volatile utest_v1_harness_callback_t minimal_callback;
66
66
static volatile utest_v1_harness_callback_t ticker_callback;
67
67
68
68
// Timeout object used to control the scheduling of test case callbacks
69
- static Timeout& utest_timeout_object () {
70
- static Timeout timeout;
71
- return timeout;
72
- }
69
+ SingletonPtr<Timeout> utest_timeout_object;
73
70
74
71
static void ticker_handler ()
75
72
{
@@ -80,7 +77,9 @@ static void ticker_handler()
80
77
static int32_t utest_us_ticker_init ()
81
78
{
82
79
UTEST_LOG_FUNCTION ();
83
- // Ticker scheduler does not require any initialisation so return immediately
80
+ // initialize the Timeout object to makes sure it is not initialized in
81
+ // interrupt context.
82
+ utest_timeout_object.get ();
84
83
return 0 ;
85
84
}
86
85
static void *utest_us_ticker_post (const utest_v1_harness_callback_t callback, timestamp_t delay_ms)
@@ -91,7 +90,7 @@ static void *utest_us_ticker_post(const utest_v1_harness_callback_t callback, ti
91
90
if (delay_ms) {
92
91
ticker_callback = callback;
93
92
// fire the interrupt in 1000us * delay_ms
94
- utest_timeout_object (). attach_us (ticker_handler, delay_us);
93
+ utest_timeout_object-> attach_us (ticker_handler, delay_us);
95
94
96
95
}
97
96
else {
@@ -105,7 +104,7 @@ static int32_t utest_us_ticker_cancel(void *handle)
105
104
{
106
105
UTEST_LOG_FUNCTION ();
107
106
(void ) handle;
108
- utest_timeout_object (). detach ();
107
+ utest_timeout_object-> detach ();
109
108
return 0 ;
110
109
}
111
110
static int32_t utest_us_ticker_run ()
0 commit comments