Skip to content

Commit 53a3682

Browse files
committed
Critical tests: use atomics
Get rid of a volatile, and use atomics to synchronise with the interrupt routine instead. Useful as a non-RTOS basic compilation check for the atomics - the fuller atomic test relies on the RTOS.
1 parent 3515c2f commit 53a3682

File tree

1 file changed

+16
-19
lines changed
  • TESTS/mbed_platform/critical_section

1 file changed

+16
-19
lines changed

TESTS/mbed_platform/critical_section/main.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
using utest::v1::Case;
2323

2424

25-
volatile bool callback_called;
25+
bool callback_called;
2626

2727
void tiemout_callback(void)
2828
{
29-
callback_called = true;
29+
core_util_atomic_store(&callback_called, true);
3030
}
3131

3232
template<int N>
@@ -49,7 +49,7 @@ void critical_section_raii_recursive(Timeout &timeout)
4949
wait_us(wait_time_us);
5050
}
5151
TEST_ASSERT_TRUE(core_util_in_critical_section());
52-
TEST_ASSERT_FALSE(callback_called);
52+
TEST_ASSERT_FALSE(core_util_atomic_load(&callback_called));
5353
}
5454

5555

@@ -82,31 +82,30 @@ void test_C_API(void)
8282

8383
TEST_ASSERT_FALSE(core_util_in_critical_section());
8484

85-
callback_called = false;
85+
core_util_atomic_store(&callback_called, false);
8686
timeout.attach_us(callback(tiemout_callback), timeout_time_us);
8787
wait_us(wait_time_us);
88-
TEST_ASSERT_TRUE(callback_called);
88+
TEST_ASSERT_TRUE(core_util_atomic_exchange(&callback_called, false));
8989

9090
for (int i = 0; i < N; i++) {
9191
core_util_critical_section_enter();
9292
TEST_ASSERT_TRUE(core_util_in_critical_section());
9393
}
9494

95-
callback_called = false;
9695
timeout.attach_us(callback(tiemout_callback), timeout_time_us);
9796
wait_us(wait_time_us);
98-
TEST_ASSERT_FALSE(callback_called);
97+
TEST_ASSERT_FALSE(core_util_atomic_load(&callback_called));
9998
TEST_ASSERT_TRUE(core_util_in_critical_section());
10099

101100
for (int i = 0; i < N - 1; i++) {
102101
core_util_critical_section_exit();
103102
TEST_ASSERT_TRUE(core_util_in_critical_section());
104-
TEST_ASSERT_FALSE(callback_called);
103+
TEST_ASSERT_FALSE(core_util_atomic_load(&callback_called));
105104
}
106105

107106
core_util_critical_section_exit();
108107
TEST_ASSERT_FALSE(core_util_in_critical_section());
109-
TEST_ASSERT_TRUE(callback_called);
108+
TEST_ASSERT_TRUE(core_util_atomic_load(&callback_called));
110109
}
111110

112111
/** Template for tests
@@ -138,16 +137,15 @@ void test_CPP_API_constructor_destructor(void)
138137

139138
TEST_ASSERT_FALSE(core_util_in_critical_section());
140139

141-
callback_called = false;
140+
core_util_atomic_store(&callback_called, false);
142141
timeout.attach_us(callback(tiemout_callback), timeout_time_us);
143142
wait_us(wait_time_us);
144-
TEST_ASSERT_TRUE(callback_called);
143+
TEST_ASSERT_TRUE(core_util_atomic_exchange(&callback_called, false));
145144

146-
callback_called = false;
147145
critical_section_raii_recursive<N>(timeout);
148146

149147
TEST_ASSERT_FALSE(core_util_in_critical_section());
150-
TEST_ASSERT_TRUE(callback_called);
148+
TEST_ASSERT_TRUE(core_util_atomic_load(&callback_called));
151149
}
152150

153151
/** Template for tests
@@ -179,31 +177,30 @@ void test_CPP_API_enable_disable(void)
179177

180178
TEST_ASSERT_FALSE(core_util_in_critical_section());
181179

182-
callback_called = false;
180+
core_util_atomic_store(&callback_called, false);
183181
timeout.attach_us(callback(tiemout_callback), timeout_time_us);
184182
wait_us(wait_time_us);
185-
TEST_ASSERT_TRUE(callback_called);
183+
TEST_ASSERT_TRUE(core_util_atomic_exchange(&callback_called, false));
186184

187185
for (int i = 0; i < N; i++) {
188186
CriticalSectionLock::enable();
189187
TEST_ASSERT_TRUE(core_util_in_critical_section());
190188
}
191189

192-
callback_called = false;
193190
timeout.attach_us(callback(tiemout_callback), timeout_time_us);
194191
wait_us(wait_time_us);
195-
TEST_ASSERT_FALSE(callback_called);
192+
TEST_ASSERT_FALSE(core_util_atomic_load(&callback_called));
196193
TEST_ASSERT_TRUE(core_util_in_critical_section());
197194

198195
for (int i = 0; i < N - 1; i++) {
199196
CriticalSectionLock::disable();
200197
TEST_ASSERT_TRUE(core_util_in_critical_section());
201-
TEST_ASSERT_FALSE(callback_called);
198+
TEST_ASSERT_FALSE(core_util_atomic_load(&callback_called));
202199
}
203200

204201
CriticalSectionLock::disable();
205202
TEST_ASSERT_FALSE(core_util_in_critical_section());
206-
TEST_ASSERT_TRUE(callback_called);
203+
TEST_ASSERT_TRUE(core_util_atomic_load(&callback_called));
207204
}
208205

209206

0 commit comments

Comments
 (0)