当前位置: 首页 > news >正文

专业网站建设分类标准网页游戏排行榜电脑

专业网站建设分类标准,网页游戏排行榜电脑,自媒体是做什么的,电子商务网店运营文章目录 说在前面关于slint关于no-std关于dma准备工作相关依赖代码结果参考 说在前面 esp32版本#xff1a;s3运行环境#xff1a;no-std开发环境#xff1a;wsl2LCD模块#xff1a;ST7789V2 240*280 LCDSlint版本#xff1a;master分支github地址#xff1a;这里 关于s… 文章目录 说在前面关于slint关于no-std关于dma准备工作相关依赖代码结果参考 说在前面 esp32版本s3运行环境no-std开发环境wsl2LCD模块ST7789V2 240*280 LCDSlint版本master分支github地址这里 关于slint 官网为啥不用lvgl 只能说rust的生态还是不太行lvgl的rust binding似乎还在开发中已经有仓库了但是还在开发中。 slint目前比较完善但是相关资料也少。 反正已经在折腾rust了也不在乎再多折腾个小众点的。 关于no-std 上一篇还是std环境怎么就变成no-std了 std环境下也折腾了slint但是fps就是不怎么高 可能哪里写的不对 然后就试了下no-std稍微丝滑点并且编译也快。 关于dma rust生态下dma的资料更是少的可怜找了好久也没啥进展所以本文不涉及dma 准备工作 引脚连接见上篇开发环境部分由于不需要esp idf简单很多cargo直接搞定 相关依赖 Cargo.toml[dependencies] hal { package esp32s3-hal, version 0.13.0} esp-backtrace { version 0.9.0, features [esp32s3, panic-handler, exception-handler, print-uart] } esp-println { version 0.7.0, features [esp32s3,log] } log { version 0.4.18 } esp-alloc { version 0.3.0 } embedded-hal 0.2.7 embedded-graphics-core 0.4.0 embedded-graphics 0.8.1 embedded-graphics-framebuf 0.5.0 display-interface 0.4 display-interface-spi 0.4 mipidsi 0.7.1 slint { git https://githubfast.com/slint-ui/slint, default-features false, features [compat-1-2,unsafe-single-threaded,libm, renderer-software] }[build-dependencies] slint-build { git https://githubfast.com/slint-ui/slint }代码 #![no_std] #![no_main]extern crate alloc; use alloc::boxed::Box; use alloc::rc::Rc; use rs_esp32s3_no_std_st7789_demo::dma::DmaBackend; use core::cell::RefCell; use core::mem::MaybeUninit; use display_interface_spi::SPIInterfaceNoCS; use embedded_graphics_core::prelude::{DrawTarget, Point, RgbColor, Size}; use embedded_graphics_core::{pixelcolor::raw::RawU16, primitives::Rectangle}; use esp_backtrace as _; use esp_println::println; use hal::spi::master::{Spi, dma}; use hal::{clock::{ClockControl, CpuClock},peripherals::Peripherals,prelude::*,spi::SpiMode,systimer::SystemTimer,timer::TimerGroup,Delay, Rtc, IO, }; use mipidsi::Display;#[global_allocator] static ALLOCATOR: esp_alloc::EspHeap esp_alloc::EspHeap::empty();// 分配内存 fn init_heap() {const HEAP_SIZE: usize 250 * 1024;static mut HEAP: MaybeUninit[u8; HEAP_SIZE] MaybeUninit::uninit();unsafe {ALLOCATOR.init(HEAP.as_mut_ptr() as *mut u8, HEAP_SIZE);} }// slint自动编译ui代码 slint::include_modules!(); #[entry] fn main() - ! {init_heap();// slint 设置默认backendslint::platform::set_platform(Box::new(EspBackend::default())).expect(backend already initialized);let main_window Recipe::new().unwrap();let strong main_window.clone_strong();let timer slint::Timer::default();// 由于我的lcd不支持触屏 这里模拟了下按钮点击timer.start(slint::TimerMode::Repeated,core::time::Duration::from_millis(1000),move || {if strong.get_counter() 0 {strong.set_counter(25);} else {strong.set_counter(0);}},);main_window.run().unwrap();panic!(The MCU demo should not quit); }#[derive(Default)] pub struct EspBackend {window: RefCellOptionRcslint::platform::software_renderer::MinimalSoftwareWindow, }impl slint::platform::Platform for EspBackend {fn create_window_adapter(self,) - ResultRcdyn slint::platform::WindowAdapter, slint::PlatformError {let window slint::platform::software_renderer::MinimalSoftwareWindow::new(slint::platform::software_renderer::RepaintBufferType::ReusedBuffer,);self.window.replace(Some(window.clone()));Ok(window)}fn duration_since_start(self) - core::time::Duration {core::time::Duration::from_millis(SystemTimer::now() / (SystemTimer::TICKS_PER_SECOND / 1000),)}fn run_event_loop(self) - Result(), slint::PlatformError {let peripherals Peripherals::take();let mut system peripherals.SYSTEM.split();let clocks ClockControl::configure(system.clock_control, CpuClock::Clock240MHz).freeze();let mut rtc Rtc::new(peripherals.RTC_CNTL);let timer_group0 TimerGroup::new(peripherals.TIMG0, clocks);let mut wdt0 timer_group0.wdt;let timer_group1 TimerGroup::new(peripherals.TIMG1, clocks);let mut wdt1 timer_group1.wdt;rtc.rwdt.disable();wdt0.disable();wdt1.disable();let mut delay Delay::new(clocks);let io IO::new(peripherals.GPIO, peripherals.IO_MUX);let clk io.pins.gpio18;let sdo io.pins.gpio17;let cs io.pins.gpio14;// 初始化spilet spi Spi::new_no_miso(peripherals.SPI2,clk,sdo,cs,60u32.MHz(),SpiMode::Mode0,clocks,);println!(spi init.);let dc io.pins.gpio15.into_push_pull_output();let rst io.pins.gpio16.into_push_pull_output();// spi interfacelet di SPIInterfaceNoCS::new(spi, dc);// st7789 驱动let mut display mipidsi::Builder::st7789(di).with_display_size(240, 280).with_window_offset_handler(|_| (0, 20)) // 这里稍微设置了下偏移.with_framebuffer_size(240, 280).with_invert_colors( mipidsi::ColorInversion::Inverted).init(mut delay, Some(rst)).unwrap();println!(display init.);let mut bl io.pins.gpio13.into_push_pull_output();bl.set_high().unwrap();let size slint::PhysicalSize::new(240, 280);self.window.borrow().as_ref().unwrap().set_size(size);let mut buffer_provider DrawBuffer {display,buffer: mut [slint::platform::software_renderer::Rgb565Pixel::default(); 240],};loop {slint::platform::update_timers_and_animations();// 这里的大致流程是// slint会计算出当前帧需要变化的像素// 结果会暂时存放在buffer_provider// 然后将buffer_provider中的数据传给spiif let Some(window) self.window.borrow().clone() {window.draw_if_needed(|renderer| {renderer.render_by_line(mut buffer_provider);});if window.has_active_animations() {continue;}}}}fn debug_log(self, arguments: core::fmt::Arguments) {println!({}, arguments);} }struct DrawBuffera, Display {display: Display,buffer: a mut [slint::platform::software_renderer::Rgb565Pixel], }implDI: display_interface::WriteOnlyDataCommand, RST: embedded_hal::digital::v2::OutputPinslint::platform::software_renderer::LineBufferProviderfor mut DrawBuffer_, DisplayDI, mipidsi::models::ST7789, RST {type TargetPixel slint::platform::software_renderer::Rgb565Pixel;fn process_line(mut self,line: usize,range: core::ops::Rangeusize,render_fn: impl FnOnce(mut [slint::platform::software_renderer::Rgb565Pixel]),) {let buffer mut self.buffer[range.clone()];render_fn(buffer);// We send empty data just to get the device in the right windowself.display.set_pixels(range.start as u16,line as _,range.end as u16,line as u16,buffer.iter().map(|x| embedded_graphics_core::pixelcolor::raw::RawU16::new(x.0).into()),).unwrap();} }结果 还是有卡顿的感觉 对比c lvgldma加权fps有157差距太大了 参考 slint mcu
http://www.hkea.cn/news/14480786/

相关文章:

  • 全国网站建设公司排行版和wordpress一样的
  • 网站开发项目总结模板网站特点怎么写
  • 百度站长工具seo综合查询档案门户网站建设方案
  • 仓山福州网站建设网站主体负责人必须是法人吗
  • 东莞网站建设多长时间魔方的网站
  • 网站建设规划书中的技术可行性不包括全球推广
  • o2o服务平台百度seo价格查询
  • 徐州自助建站系统中国十大旅游网站
  • 公司介绍网站源码php 手机网站开发
  • 都是做面食网站苏州有什么好玩的景点景区
  • 建设通是正规网站吗wordpress 缓存机制
  • 建建设网站的漳州网站建设去博大a优
  • 青岛建站费用仿 手机 网站模板html源码
  • 选片 网站 建设微商客源人脉app下载
  • 用个人的信息备案网站什么网站可以接装修活
  • 国内有做网游评测的网站么海口制作网站
  • 网站建设规划书河北做网站的公司在哪
  • 方维制网站重庆做网站最好的
  • 如何用ps做网站界面国家重点高新技术企业名单
  • 网站不换域名换空间做视频解析网站
  • 网站建设合同书(范本)淘宝网站建设教程视频教程
  • 设计手机网站公司建设官方网站请示
  • 惠州网站小程序建设建设银行信用卡网站查询
  • 编程 朋友 做网站建网站要多少费用
  • 备案网站建设方案书全景网投资者关系互动平台
  • 广州市照明建设管理中心网站3030wa网站开发学校
  • 定制产品网站一键logo生成器
  • 二手车网站模板建设镇江网站制作价格
  • 网站建设公司的发展前景制作企业网站页面多少钱
  • 网站设置仅某浏览器大数据营销的作用