summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--extmod/utime_mphal.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/extmod/utime_mphal.c b/extmod/utime_mphal.c
index 1a32180cf5..9aa2f13245 100644
--- a/extmod/utime_mphal.c
+++ b/extmod/utime_mphal.c
@@ -89,7 +89,13 @@ STATIC mp_obj_t time_ticks_diff(mp_obj_t end_in, mp_obj_t start_in) {
// we assume that the arguments come from ticks_xx so are small ints
uint32_t start = MP_OBJ_SMALL_INT_VALUE(start_in);
uint32_t end = MP_OBJ_SMALL_INT_VALUE(end_in);
- return MP_OBJ_NEW_SMALL_INT((int32_t)(end - start));
+ int32_t diff = end - start;
+ if (diff < (signed)-(MICROPY_PY_UTIME_TICKS_PERIOD / 2)) {
+ diff += MICROPY_PY_UTIME_TICKS_PERIOD;
+ } else if (diff >= (signed)(MICROPY_PY_UTIME_TICKS_PERIOD / 2)) {
+ diff -= MICROPY_PY_UTIME_TICKS_PERIOD;
+ }
+ return MP_OBJ_NEW_SMALL_INT(diff);
}
MP_DEFINE_CONST_FUN_OBJ_2(mp_utime_ticks_diff_obj, time_ticks_diff);