fps
This commit is contained in:
+19
-22
@@ -10,10 +10,9 @@ use embedded_graphics::pixelcolor::Rgb565;
|
||||
use embedded_graphics::prelude::*;
|
||||
use embedded_graphics::primitives::{PrimitiveStyle, Triangle};
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_time::Timer;
|
||||
use embassy_time::{Instant, Timer};
|
||||
use esp_backtrace as _;
|
||||
use esp_bootloader_esp_idf::esp_app_desc;
|
||||
use esp_hal::gpio::Output;
|
||||
use esp_hal::timer::timg::TimerGroup;
|
||||
use esp_hal::{init, rmt::Rmt, time::Rate, Config};
|
||||
use esp_println::println;
|
||||
@@ -42,13 +41,14 @@ async fn led_task(mut led: led::RgbLed) {
|
||||
|
||||
#[embassy_executor::task]
|
||||
async fn display_task(
|
||||
mut spi: display::SpiDmaBus,
|
||||
mut dc: Output<'static>,
|
||||
mut cs: Output<'static>,
|
||||
pins: display::LcdPins,
|
||||
mut fb: framebuffer::Framebuffer,
|
||||
timer: esp_hal::ledc::timer::Timer<'static, esp_hal::ledc::LowSpeed>,
|
||||
bl_pin: esp_hal::peripherals::GPIO22<'static>,
|
||||
) {
|
||||
let mut parts = display::init_parts(pins);
|
||||
println!("LCD {}x{} initialized", display::WIDTH, display::HEIGHT);
|
||||
|
||||
let mut backlight =
|
||||
backlight::LcdBacklight::new(&timer, bl_pin).expect("Failed to init backlight");
|
||||
backlight.set_level(0.5).unwrap();
|
||||
@@ -62,6 +62,8 @@ async fn display_task(
|
||||
let mut vx: i32 = 3;
|
||||
let mut vy: i32 = 2;
|
||||
let mut frame = 0u32;
|
||||
let mut fps_window_start = Instant::now();
|
||||
let mut fps_frames = 0u32;
|
||||
|
||||
loop {
|
||||
let hue = (frame % 256) as u8;
|
||||
@@ -95,7 +97,7 @@ async fn display_task(
|
||||
.draw(&mut fb)
|
||||
.unwrap();
|
||||
|
||||
display::send_framebuffer(&mut spi, &mut dc, &mut cs, fb.as_bytes())
|
||||
display::send_framebuffer(&mut parts.spi, &mut parts.dc, &mut parts.cs, fb.as_bytes())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
@@ -106,6 +108,15 @@ async fn display_task(
|
||||
);
|
||||
}
|
||||
|
||||
fps_frames += 1;
|
||||
if fps_frames >= 60 {
|
||||
let elapsed_ms = fps_window_start.elapsed().as_millis().max(1);
|
||||
let fps = (fps_frames as u64 * 1000) / elapsed_ms;
|
||||
println!("fps: {fps} ({fps_frames} frames in {elapsed_ms} ms)");
|
||||
fps_frames = 0;
|
||||
fps_window_start = Instant::now();
|
||||
}
|
||||
|
||||
frame = frame.wrapping_add(1);
|
||||
}
|
||||
}
|
||||
@@ -124,8 +135,8 @@ async fn main(spawner: Spawner) -> ! {
|
||||
let (_ledc, timer) =
|
||||
backlight::setup_timer(peripherals.LEDC).expect("Failed to init backlight timer");
|
||||
|
||||
let mut buffer = [0u8; 4096];
|
||||
let lcd = display::init(
|
||||
spawner.spawn(led_task(led).unwrap());
|
||||
spawner.spawn(display_task(
|
||||
display::LcdPins {
|
||||
spi2: peripherals.SPI2,
|
||||
sck: peripherals.GPIO7,
|
||||
@@ -135,20 +146,6 @@ async fn main(spawner: Spawner) -> ! {
|
||||
rst: peripherals.GPIO21,
|
||||
dma_ch: peripherals.DMA_CH0,
|
||||
},
|
||||
&mut buffer,
|
||||
);
|
||||
|
||||
let (interface, _model, _rst) = lcd.release();
|
||||
let (device, dc) = interface.release();
|
||||
let (spi, cs) = device.into_inner();
|
||||
|
||||
println!("LCD {}x{} initialized", display::WIDTH, display::HEIGHT);
|
||||
|
||||
spawner.spawn(led_task(led).unwrap());
|
||||
spawner.spawn(display_task(
|
||||
spi,
|
||||
dc,
|
||||
cs,
|
||||
framebuffer::Framebuffer,
|
||||
timer,
|
||||
peripherals.GPIO22,
|
||||
|
||||
Reference in New Issue
Block a user