|
25 | 25 | #include "hal/us_ticker_api.h"
|
26 | 26 | #include "hal/lp_ticker_api.h"
|
27 | 27 |
|
28 |
| -#include <limits.h> |
29 | 28 | #include <stdio.h>
|
30 | 29 |
|
31 | 30 | #if DEVICE_SLEEP
|
@@ -173,29 +172,21 @@ void sleep_tracker_unlock(const char *const filename, int line)
|
173 | 172 |
|
174 | 173 | void sleep_manager_lock_deep_sleep_internal(void)
|
175 | 174 | {
|
176 |
| - core_util_critical_section_enter(); |
177 |
| - if (deep_sleep_lock == USHRT_MAX) { |
178 |
| - core_util_critical_section_exit(); |
179 |
| - MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_OVERFLOW), "DeepSleepLock overflow (> USHRT_MAX)", deep_sleep_lock); |
| 175 | + if (core_util_atomic_incr_u16(&deep_sleep_lock, 1) == 0) { |
| 176 | + MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_OVERFLOW), "DeepSleepLock overflow (> 0xFFFF)", deep_sleep_lock); |
180 | 177 | }
|
181 |
| - core_util_atomic_incr_u16(&deep_sleep_lock, 1); |
182 |
| - core_util_critical_section_exit(); |
183 | 178 | }
|
184 | 179 |
|
185 | 180 | void sleep_manager_unlock_deep_sleep_internal(void)
|
186 | 181 | {
|
187 |
| - core_util_critical_section_enter(); |
188 |
| - if (deep_sleep_lock == 0) { |
189 |
| - core_util_critical_section_exit(); |
| 182 | + if (core_util_atomic_decr_u16(&deep_sleep_lock, 1) == 0xFFFF) { |
190 | 183 | MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_HAL, MBED_ERROR_CODE_UNDERFLOW), "DeepSleepLock underflow (< 0)", deep_sleep_lock);
|
191 | 184 | }
|
192 |
| - core_util_atomic_decr_u16(&deep_sleep_lock, 1); |
193 |
| - core_util_critical_section_exit(); |
194 | 185 | }
|
195 | 186 |
|
196 | 187 | bool sleep_manager_can_deep_sleep(void)
|
197 | 188 | {
|
198 |
| - return deep_sleep_lock == 0 ? true : false; |
| 189 | + return core_util_atomic_load_u16(&deep_sleep_lock) == 0; |
199 | 190 | }
|
200 | 191 |
|
201 | 192 | bool sleep_manager_can_deep_sleep_test_check()
|
|
0 commit comments