cortex-m
cortex-m copied to clipboard
Make SYST::get_current take &self?
Hi,
I'm just getting started with embedded rust, so apologies if this is a silly question!
While trying to get a tick counter, I realized SYST::get_current()
would (almost) always return 0
:
/// Gets current value
#[inline]
pub fn get_current() -> u32 {
// NOTE(unsafe) atomic read with no side effects
unsafe { (*Self::PTR).cvr.read() }
}
I hadn't read the docs properly and was actually using the systick somewhere else:
let core = pac::CorePeripherals::take().unwrap();
let mut syst = core.SYST;
syst.set_reload(0); // very small value as an example
syst.clear_current();
syst.enable_counter();
Without reading the cortex docs and the cortex-m crate sources, I would never have figured the reason why get_current
was almost always zero (reason as far as I understand: it will increment until the value passed to set_reload()
and then wrap).
I was wondering, wouldn't it be safer to also have get_current()
take a &SYST
? Then it would also be clearer that get_current()
and other functions (set_reload
, enable_counter
, etc) are related.
Again, apologies if this is silly! I'm just getting started with rust embedded.
At least in my experience systick is mostly used as a debug tool to measure code execution performance and clock ticks. Hence, it is often used in random parts of the code and carrying &SYST
everywhere would be very inconvenient.
I think best option would be to improve get_current()
docs and mention how to properly setup and enable systick.