fix sleep timer overflow

This commit is contained in:
sigil-03 2025-11-14 16:09:27 -07:00
parent 7e187680f5
commit c71ace5063
2 changed files with 24 additions and 9 deletions

View file

@ -193,7 +193,7 @@ pub struct TimerConfig {
pub usb_adc_timer_ms: usize, pub usb_adc_timer_ms: usize,
pub led0_timer_ms: usize, pub led0_timer_ms: usize,
pub led1_timer_ms: usize, pub led1_timer_ms: usize,
pub shutdown_timer_ms: usize, pub shutdown_timer_s: usize,
// pub led2_timer_ms: usize, // pub led2_timer_ms: usize,
} }
@ -205,6 +205,7 @@ pub struct Timers {
led0_timer: TickTimerService, led0_timer: TickTimerService,
led1_timer: TickTimerService, led1_timer: TickTimerService,
shutdown_timer: TickTimerService, shutdown_timer: TickTimerService,
pps_timer: TickTimerService,
// led2_timer: TickTimerService, // led2_timer: TickTimerService,
} }
@ -236,9 +237,11 @@ impl Timers {
true, true,
), ),
shutdown_timer: TickTimerService::new( shutdown_timer: TickTimerService::new(
TickServiceData::new(config.shutdown_timer_ms * system_tick_rate_hz / 1000), TickServiceData::new(config.shutdown_timer_s),
false, false,
), // led2_timer: TickTimerService::new( ),
pps_timer: TickTimerService::new(TickServiceData::new(system_tick_rate_hz), true),
// led2_timer: TickTimerService::new(
// TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000), // TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000),
// true, // true,
// ), // ),
@ -251,7 +254,7 @@ impl Timers {
self.usb_adc_timer.tick(); self.usb_adc_timer.tick();
self.led0_timer.tick(); self.led0_timer.tick();
self.led1_timer.tick(); self.led1_timer.tick();
self.shutdown_timer.tick(); self.pps_timer.tick();
// self.led2_timer.tick(); // self.led2_timer.tick();
} }
pub fn need_service(&self) -> bool { pub fn need_service(&self) -> bool {
@ -262,6 +265,7 @@ impl Timers {
| self.led0_timer.need_service() | self.led0_timer.need_service()
| self.led1_timer.need_service() | self.led1_timer.need_service()
| self.shutdown_timer.need_service() | self.shutdown_timer.need_service()
| self.pps_timer.need_service()
// | self.led2_timer.need_service() // | self.led2_timer.need_service()
} }
pub fn init(&mut self) { pub fn init(&mut self) {
@ -357,6 +361,9 @@ impl App {
self.timers.shutdown_timer.reset(); self.timers.shutdown_timer.reset();
self.timers.shutdown_timer.enable(true); self.timers.shutdown_timer.enable(true);
self.timers.pps_timer.reset();
self.timers.pps_timer.enable(true);
// self.timers.led2_timer.reset(); // self.timers.led2_timer.reset();
// self.timers.led2_timer.enable(true); // self.timers.led2_timer.enable(true);
@ -406,6 +413,7 @@ impl App {
let avg = self.interfaces.adc_core.get_average(); let avg = self.interfaces.adc_core.get_average();
// #[cfg(feature = "enable_print")] // #[cfg(feature = "enable_print")]
// println!("batt adc service: {bv}, {avg}"); // println!("batt adc service: {bv}, {avg}");
// println!("none USB");
if avg < 421 { if avg < 421 {
self.set_state(State::DeepSleep); self.set_state(State::DeepSleep);
} }
@ -450,9 +458,14 @@ impl App {
// #[cfg(feature = "enable_print")] // #[cfg(feature = "enable_print")]
// println!("led1 service"); // println!("led1 service");
} }
if self.timers.pps_timer.need_service() {
self.timers.pps_timer.service();
self.timers.shutdown_timer.tick();
}
if self.timers.shutdown_timer.need_service() { if self.timers.shutdown_timer.need_service() {
self.timers.shutdown_timer.service(); self.timers.shutdown_timer.service();
self.timers.shutdown_timer.reset(); self.timers.shutdown_timer.reset();
// println!("eepy");
self.set_state(State::DeepSleep); self.set_state(State::DeepSleep);
} }
// if self.timers.led2_timer.need_service() { // if self.timers.led2_timer.need_service() {
@ -652,7 +665,7 @@ impl App {
if self.interfaces.usb.powered() { if self.interfaces.usb.powered() {
return true; return true;
} else { } else {
if self.interfaces.adc_core.get_average() > 421 { if self.interfaces.adc_core.get_average() >= 421 {
return true; return true;
} }
} }

View file

@ -339,7 +339,8 @@ fn app_main(mut p: hal::Peripherals) -> ! {
usb_adc_timer_ms: 10000, usb_adc_timer_ms: 10000,
led0_timer_ms: 100, led0_timer_ms: 100,
led1_timer_ms: 100, led1_timer_ms: 100,
shutdown_timer_ms: 4 * 60 * 60 * 1000, // 4 hours:
shutdown_timer_s: 4 * 60 * 60,
// led2_timer_ms: 100, // led2_timer_ms: 100,
}; };
@ -517,6 +518,7 @@ fn app_main(mut p: hal::Peripherals) -> ! {
app.shut_down(); app.shut_down();
loop { loop {
riscv::asm::delay(20_000);
unsafe { system::enter_standby() }; unsafe { system::enter_standby() };
unsafe { unsafe {
#[allow(static_mut_refs)] #[allow(static_mut_refs)]