lancaster-university / codal-microbit-v2

CODAL target for the micro:bit v2.x series of devices
MIT License
43 stars 52 forks source link

Are all `time.tick_xxx()` functions bound to 30 bits? #421

Closed microbit-carlos closed 6 months ago

microbit-carlos commented 6 months ago

Looking at time.tick_cpu() and the values returned, it looks like this functions overflows at the 30-bit limit of a MicroPython "small int". Would this be true for all time.tick_xxx()? If that's the case, it's something we could add to the docs.

microbit-carlos commented 6 months ago

Ah, looking at the upstream code it's more clear that this is the case: https://github.com/micropython/micropython/blob/v1.22.0/extmod/modtime.c#L151-L164

STATIC mp_obj_t time_ticks_ms(void) {
    return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_ms() & (MICROPY_PY_TIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_time_ticks_ms_obj, time_ticks_ms);

STATIC mp_obj_t time_ticks_us(void) {
    return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_us() & (MICROPY_PY_TIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_time_ticks_us_obj, time_ticks_us);

STATIC mp_obj_t time_ticks_cpu(void) {
    return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_cpu() & (MICROPY_PY_TIME_TICKS_PERIOD - 1));
}
MP_DEFINE_CONST_FUN_OBJ_0(mp_time_ticks_cpu_obj, time_ticks_cpu);

And https://github.com/bbcmicrobit/micropython/blob/v1.1.1/source/extmod/utime_mphal.c#L67-L80.

We can update the micro:bit MicroPython docs for V1 and V2 to reflect this.

microbit-carlos commented 6 months ago

Ups, wrong repo, moved to https://github.com/microbit-foundation/micropython-microbit-v2/issues/178