diff --git a/freertos-rust/src/timers.rs b/freertos-rust/src/timers.rs index 3cc3053..8c32fad 100644 --- a/freertos-rust/src/timers.rs +++ b/freertos-rust/src/timers.rs @@ -47,7 +47,7 @@ impl TimerBuilder { /// Note that the newly created timer must be started. pub fn create(&self, callback: F) -> Result where - F: Fn(Timer) -> (), + F: Fn(&Timer) -> (), F: Send + 'static, { Timer::spawn( @@ -87,7 +87,7 @@ impl Timer { name: &str, period_ticks: FreeRtosTickType, auto_reload: bool, - callback: Box, + callback: Box, ) -> Result { let f = Box::new(callback); let param_ptr = &*f as *const _ as *mut _; @@ -119,10 +119,11 @@ impl Timer { { let timer = Timer { handle }; if let Ok(callback_ptr) = timer.get_id() { - let b = Box::from_raw(callback_ptr as *mut Box); - b(timer); + let b = Box::from_raw(callback_ptr as *mut Box); + b(&timer); let _ = Box::into_raw(b); } + mem::forget(timer); } } } @@ -139,7 +140,7 @@ impl Timer { callback: F, ) -> Result where - F: Fn(Timer) -> (), + F: Fn(&Timer) -> (), F: Send + 'static, { unsafe { Timer::spawn_inner(name, period_tick, auto_reload, Box::new(callback)) }