move profiler to be a function

This commit is contained in:
Corwin 2022-03-22 09:39:03 +00:00
parent 4bec0d073f
commit ac9826c4d7
3 changed files with 24 additions and 11 deletions

View file

@ -101,18 +101,9 @@ fn all_tags(gfx: &ObjectController) {
fn main(mut gba: agb::Gba) -> ! {
let gfx = gba.display.object.get();
let timers = gba.timers.timers();
let mut my_timer = timers.timer0;
my_timer.set_interrupt(true);
my_timer.set_overflow_amount(10000);
my_timer.set_enabled(true);
let mut timers = gba.timers.timers();
agb::add_interrupt_handler!(
agb::interrupt::Interrupt::Timer0,
|_key: &CriticalSection| {
agb::println!("{:#010x}", agb::get_program_counter_before_interrupt());
}
);
let _a = agb::interrupt::profiler(&mut timers.timer0, 5000);
loop {
all_tags(&gfx);

View file

@ -360,3 +360,14 @@ mod tests {
);
}
}
#[must_use]
pub fn profiler(timer: &mut crate::timer::Timer, period: u16) -> InterruptHandler {
timer.set_interrupt(true);
timer.set_overflow_amount(period);
timer.set_enabled(true);
add_interrupt_handler(timer.get_interrupt(), |_key: &CriticalSection| {
crate::println!("{:#010x}", crate::get_program_counter_before_interrupt());
})
}

View file

@ -106,6 +106,17 @@ impl Timer {
fn get_timer_number(&self) -> usize {
self.timer_number as usize
}
pub fn get_interrupt(&self) -> crate::interrupt::Interrupt {
use crate::interrupt::Interrupt;
match self.timer_number {
0 => Interrupt::Timer0,
1 => Interrupt::Timer1,
2 => Interrupt::Timer2,
3 => Interrupt::Timer3,
_ => unreachable!(),
}
}
}
#[non_exhaustive]