udisp0401_2

ESP32S2软件设计

开机logo

实现开机logo功能,该功能旨在展示屏驱动的正常工作。logo图片以内嵌jpeg文件数组的形式呈现,具体实现位于logo.c文件中。如需更新logo,仅需替换logo_jpg数组的内容即可,但需确保图片尺寸不超过320*240像素,以确保显示效果的兼容性。转换jpeg文件为数组的工作借助了Jamesits提供的bin2array工具,该工具采用python脚本实现文件格式的转换。

USB设备与数据接收

本文基于IDF自带的tinyusb框架,构建了一个具有特定厂商ID(VID)为303A和产品ID(PID)为1986的USB外设设备。该设备实现了一个vendor自定义的USB设备类,并配备了一个输入IN管道。

通过注册tud_vendor_rx_cb回调处理函数,软件能够接收并处理来自USB的数据包,每次最多接收64字节的数据。在接收数据后,软件首先进行头部解析,若检测到起始标志位(byte[0]的bit7置位),则识别为一个新操作的开始,并解析相应的参数(如total_size, top, bottom等)。解析完成后,软件将有效数据推入缓存区disp_rx_ring_buf中,以便后续解码操作使用。

解码

在解码环节,显示线程负责从disp_rx_ring_buf中读取数据进行处理。由于当前处理的数据均为jpeg格式的显示数据,因此软件采用jpeg解码算法进行处理。jpg解码采用了适合单片机的开源项目jpgdec。其主要的特点是采用流式数据,无非等待接收完整jpg才能解码。

屏幕显示

采用了流行的SPI接口LCD,引脚占用少,性能优异,本文利用DMA模式的SPI进行数据传输,其运行频率设定为40Mhz。理论上,该配置能够支持高达30fps的帧率。若SPI频率能够提升至80Mhz,且屏幕硬件支持,则帧率可进一步提升至60fps,从而带来更为流畅和高效的视觉体验。

帧率性能优化

初始阶段,帧率仅维持在8fps,视觉体验颇为滞涩,近似于幻灯片效果。因此,我们深入剖析了性能瓶颈的成因。主要问题在于显示流程的串行性,即接收一帧数据耗时10ms,解码jpg数据需60ms,再通过DMA传输上屏显示需40ms。

针对这一问题,我们确定了优化关键——实施流水线并行处理,即在解码过程中同时刷新数据。举例来说,若一帧数据的处理及传输各自耗时50ms,则串行处理需时100ms,而并行处理则仅需50ms。此外,为减少非必要开销,我们建议单次DMA数据传输量不宜过少,以5kB为宜,具体数值应根据实际情况与数据进行调优。

具体实施方案为:在接收jpg数据的同时进行解码,并将解码与DMA传输并行执行。为此,我们创建了两组各含8320个像素的缓冲数组,采用乒乓工作模式。每当解码完成一行8320个像素的数据时,即启动一次DMA传输上屏,同时继续解码下一行8*320像素数据,如此循环往复。

经过上述优化措施,最终将帧率提升至15fps,基本实现了流畅播放的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI智能写作:巧用AI大模型让新媒体变现插上翅膀【文末送书】

文章目录 一、AI智能写作的崛起二、AI智能写作与新媒体变现AI智能写作的挑战与应对策略 AI智能写作:巧用AI大模型让新媒体变现插上翅膀【文末送书】 近年来,人工智能(AI)技术的发展日新月异,逐渐渗透到了各行各业&…

AI会是一个怎样的创业技术

AI技术创业有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展,未来AI技术方面会有哪些创业机会呢? AI技术为创业者提…

稻盛和夫|普通人如何才能取得非凡成就?

哈喽,你好啊,我是雷工! 稻盛和夫老先生曾经回答过这么一个问题: 资质平庸的普通人如何才能取得非凡的成就? 稻盛和夫认为:人生成就能力努力态度。 也就是:做一个努力工作却不甘于只做眼前的事&a…

Verilog基础【二】

3.1 Verilog 连续赋值 关键词:assign, 全加器 连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。: assign LHS_target RHS_expression ;LHS(left hand side)…

linux 系统安装php 8.0.2

1. 安装包准备 https://www.php.net/distributions/php-8.0.22.tar.gz 我下载到 /usr/local/src 这个目录了 cd /usr/local/srcwget https://www.php.net/distributions/php-8.0.22.tar.gz 2. tar 解压 然后进到解压的文件夹 tar -zxvf php-8.0.22.tar.gz cd php-8.0.2…

鸿蒙OS开发实例:【NAPI入门】

背景 公司内部已经有现成的MQTT动态库,想在HarmonyOS平台上共享使用。查找官方指导后,发现可以通过NAPI方式,将MQTT C库导入进来,然后封装一层ArkTS接口就可直接使用。 本篇内容是在按照官方指导下,自己做的一些调研…

微信小程序开发:颠覆式思维转变与实践指南

在小程序开发中,我们需要转变展现形式、开发模式、体验思路、发布模式、性能思路和技术选型等多方面的思维。以下通过一些代码示例,展示微信小程序开发中需要转变的思路。 展现形式转变 在传统Web开发中,我们通常这样切换页面: <!-- index.html --> <a href"a…

Leetcode 16. 最接近的三数之和

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&#xff1a;…

Latex绘制多行多TSNE列子图

Latex绘制多行多列TSNE子图 问题描述解决办法 问题描述 写论文需要绘制TSNE可视化图像。 解决办法 代码如下 \usepackage{subfigure}\begin{figure*}\centering\small\subfigure[aaa]{\includegraphics[width0.18\textwidth]{Figure/MFPT_v5_train_tsne_user0_bs0.png}}\su…

Docker 学习

一起学习,加油芹菜!!! 镜像:相当于模板,容器:相当于服务器 镜像:(centos镜像、mysql镜像、nginx镜像、redis镜像、自己的应用程序等) 容器:想让镜像跑起来就需要创建容器,相当于服务器,容器与容器之间是隔离的,安全性较高 1)yum包更新到最新 sudo yum upd…

neo4j使用详解(六、cypher即时时间函数语法——最全参考)

Neo4j系列导航&#xff1a; neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 6.时间函数-即时类型 表示具体的时刻的时间类型函数 6.1.date函数 年-月-日时间函数&#xff1a; yyyy-mm-dd 6.1.1.获取date da…

Windows下配深度学习环境

Requirements Python version 3.8.5Pytorch version: pytorch1.6.0 torchvision0.8.2 torchaudio0.7.0 cudatoolkit10.2.89pytorch3d version 0.3.0Cuda version 10.2 感觉readme文件里的不适配&#xff0c;怎么办

C++ vector 数组/向量

文章目录 【 1. vector 的声明与初始化 】1.1 vector 的声明1.2 vector 的初始化1.2.1 构造一个空的 vector1.2.2 指定数量初值的方式初始化 vector1.2.3 迭代器的方式初始化1.2.4 构造一个相同的 vector 【 2. vector 的相关操作 】2.1 插入元素2.1.1 在vector的末尾插入新元素…

Linux 网络: 网卡速度异常案例(1)

文章目录 1. 前言2. 问题描述3. 问题简析 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 问题描述 在 TI 的 AM335x 平台适配了一个 1000Mbps 的 PHY 芯片&#xff0c;通过 iperf 打流&#x…

C语言最详细内存函数

1. memcpy 使用和模拟实现 void * memcpy(void *destination,const void * source,size_t num);• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 ‘\0’ 的时候并不会停下来。 • 如果source和destination有任何的重…

IPv4地址

IP v4 由32位二进制构成、可以用点分十进制表示。 例如&#xff1a;192.168.1.1 11000000101010000000000100000001 由网络位和主机位组成。为了区分网络位和主机位&#xff0c;需要用子网掩码&#xff0c;子网掩码也是由32位二进制构成&#xff0c;连续的1对应网络位&#…

HDMI 2.1b 规范解读

HDMI 规范 HDMI 2.1b 是最新版 HDMI 规范&#xff0c;支持一系列更高的视频分辨率和刷新频率&#xff0c;包括 8K60 和 4K120 以及高达 10K 的分辨率。同时支持动态 HDR 格式&#xff0c;带宽能力增加到 48Gbps HDMI。 新的超高速 HDMI 线缆支持 48Gbps 带宽。该线缆可确保提供…

TS学习02 面向对象 类、封装继承、接口、泛型

TS学习02 TypeScript 面向对象1、类&#xff08;class&#xff09;属性实例属性&类属性只读属性 方法实例方法类方法 构造函数 & this 2、面向对象的特点封装属性的权限属性存取器静态属性 继承重写super抽象类 3、接口&#xff08;Interface&#xff09;4、泛型&#…

吴恩达机器学习笔记 三十二 K-means初始化 选择聚类数量

K-means 初始化 首先 K < m&#xff0c;若集群的数量多于样本数显然是不合理的。 第一步&#xff1a;随机选取 K 个样本&#xff1b; 第二步&#xff1a;设这 K 个样本为 μ1 μ2 ... μk 有时候K-meas 算法会出现局部最小值的情况&#xff0c;如左下图和右下图&#xf…

spark sql执行引擎原理及配置

如果我们想要给上层开发人员配置好一个统一的sql开发界面&#xff0c;让他们统一通过sql开发即可&#xff0c;可通过spark中的thriftserver服务实现&#xff0c;与hive中的thriftserver类似&#xff0c;配置好该服务后&#xff0c;上层通过db client或者代码中通过jdbc连接即可…