From 8926fd02f0d436c2922dd96e08945963eb06c5ba Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Wed, 13 Nov 2019 15:31:33 +0100 Subject: [PATCH] feat(utime): Implement ticks_ms() and ticks_us() Implement the hal functions necessary for utime.ticks_ms() and utime.ticks_us(). This enables much more accurate measurements of time taken in Pycardium (useful for profiling). Please note that the tick counter will reset whenever a new app is loaded. Signed-off-by: Rahix <rahix@rahix.de> --- Documentation/pycardium/utime.rst | 14 ++++++++++++++ pycardium/modules/utime.c | 2 ++ pycardium/mphalport.c | 7 ++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Documentation/pycardium/utime.rst b/Documentation/pycardium/utime.rst index 30af11ef..b28d7b11 100644 --- a/Documentation/pycardium/utime.rst +++ b/Documentation/pycardium/utime.rst @@ -45,6 +45,20 @@ alarm. .. versionadded:: 1.11 +.. py:function:: ticks_ms() + + Return processor ticks (converted to milliseconds) since Pycardium startup. + + This function should be the preferred method for timing and profiling + because it does not need an API call and thus is very fast. + +.. py:function:: ticks_us() + + Return processor ticks (converted to microseconds) since Pycardium startup. + + This function should be the preferred method for timing and profiling + because it does not need an API call and thus is very fast. + .. py:function:: unix_time() Return the current unix time as seconds since the epoch. diff --git a/pycardium/modules/utime.c b/pycardium/modules/utime.c index f6fd365b..d2970820 100644 --- a/pycardium/modules/utime.c +++ b/pycardium/modules/utime.c @@ -202,6 +202,8 @@ static const mp_rom_map_elem_t time_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_utime_sleep_obj) }, { MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_utime_sleep_ms_obj) }, { MP_ROM_QSTR(MP_QSTR_sleep_us), MP_ROM_PTR(&mp_utime_sleep_us_obj) }, + { MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mp_utime_ticks_ms_obj) }, + { MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mp_utime_ticks_us_obj) }, { MP_ROM_QSTR(MP_QSTR_alarm), MP_ROM_PTR(&time_alarm_obj) }, #if 0 /* TODO: Implement those */ diff --git a/pycardium/mphalport.c b/pycardium/mphalport.c index 3e0c6de1..95954bba 100644 --- a/pycardium/mphalport.c +++ b/pycardium/mphalport.c @@ -271,7 +271,12 @@ void mp_hal_delay_us(mp_uint_t us) mp_uint_t mp_hal_ticks_ms(void) { - return 0; + return (mp_uint_t)(systick_get_us() / 1000); +} + +mp_uint_t mp_hal_ticks_us(void) +{ + return (mp_uint_t)systick_get_us(); } /****************************************************************************** -- GitLab