基于MCU平台的HMI开发的性能优化与实战(下)

news2024/11/27 13:29:57

继上篇《基于MCU平台的HMI开发的性能优化与实战(上)》深入探讨了提升MCU平台HMI开发效率和应用性能的策略后,本文将专注于NXP i.MX RT1170 MCU平台的仪表盘开发实践。我们将重点介绍Qt for MCUs的优化技巧,展示如何通过实际案例应用这些策略,以实现高效且性能卓越的HMI解决方案。

NXP的i.MX RT1170是一款高性能双核MCU,集成1GHz Arm Cortex-M7和400MHz Cortex-M4内核,提供2MB SRAM和高级安全功能。它支持多种媒体功能和实时性能,适用于消费电子、工业和汽车应用。

上图展示的HMI仪表设计图融入了丰富元素,如实时速度、导航、车辆与电池状态,以及伪3D效果、动态车道线和多图层图像叠加等。这些设计在MCU平台上的精确实现,对HMI的高保真呈现构成了挑战。

我们将深入探讨这一设计在实际开发中的应用策略。通过实施9项关键优化,显著降低了资源消耗并增强了程序性能,确保了MCU平台上动画的流畅性,从而提升了用户体验。

  • 复用一个Text文本框达到多个Text的显示效果

UI设计中有许多文字部分,比如说像上图所示的能耗部分的文字显示,从常规思维来说 “XXX km”、“XXX wh/km”和“XX.X Kmh”三部分因为数字和单位的文字大小不一样,通常会用6个Text元素实现,但是会增加文本布局的计算开销,因此我们复用一个Text文本框以达到和多个Text相同的显示效果,避免多次针对文本的布局计算。

  •  烘焙素材,考虑素材之间的层叠关系

 在HMI开发中,为避免速度表动画因多图叠加导致的性能问题,我们优化了素材的层叠处理。原先通过五张图叠加实现的动效,因频繁像素计算而造成动画卡顿。我们对方案进行了改进,将指针、内外光晕合并为一张图,并仅使用上半部分。通过调整旋转中心,实现指针转动效果,这样既减少了图像处理的计算量,也降低了素材数量,有效节约了资源,提升了动画流畅度。

  • 图片素材优化

UI设计给出的图片资源中有些图片规格很大,然而并不是整张图片的内容都会被用到,但是没有用到的图片内容在运行时也进行了像素计算,这部分计算就是多余的资源开销,此时我们就需要对图片进行剪切,将不需要的图片内容剪裁掉,避免资源浪费。

  • 降低图片编码渲染格式

在UI设计中,我们根据图片的像素精细度需求,为它们分配了不同的编码渲染格式。例如,对于像素要求较低的纯色图像,我们采用ARGB4444格式;而对于细节丰富、色彩复杂的图像,则使用ARGB8888格式以保证质量。更多细节,请参考上一期的详细解析。

  •  使用PathSVG来替代部分图片

 PathSVG 是一个 SVG (Scalable Vector Graphics) 文件中的元素,通常用于定义矢量图形的路径。SVG 是一种基于 XML 的文件格式,用于描述二维矢量图形。Path 元素是其中最重要和最常用的元素之一,可以用来绘制任意形状的路径,如直线、曲线和复杂的多边形。如上图所示为能耗突变的矩形框,我们可以使用PathSVG绘制矩形框,使用Gradient实现矩形框内颜色渐变,减少了图片渲染。

  •  数字动画替代Timer

 仪表界面上有许多数值是随着时间变化而不断变化的,通常我们会绑定value,通过调用Timer不断改变value的数值,实现界面数据变化,但当Timer正在运行且其属性之一发生更改时,经过的时间会被重置,发生“脏事件”检查,占用大量CPU,所以我们使用NumberAnimation代替Timer,增加运行性能。

  • 优化Text写法

如下表所示,优化前相当于在设置字体相关属性之前先使用了一个Qt.font对象,随后又对其进行数值修改,优化后相当于直接构建一个自定义的Qt.font对象。这样的操作减少了多余的计算开销,在同时存在多个Text而且Text属性需时刻相同时效果尤为明显。

  • 编译器优化

编译器优化是一个复杂的领域,它使用了一系列的技术和策略,可以在保持程序语义不变的情况下,提高程序的运行速度并减小可执行文件的大小。同时编译器提供多个优化级别,允许开发人员在性能和可维护性之间进行权衡,例如,GCC和Clang等编译器提供了如下的优化级别:

  1. O0:无优化,默认的优化级别,编译器不执行任何优化。
  2. O1:基本优化,执行一些基本的优化操作,如删除未使用的变量、内联简单函数等。
  3. O2:中级优化,进行了更多的优化操作,包括更大范围的内联、循环展开、函数调用图优化等。
  4. O3:高级优化,进行了更深入的优化操作,如更大范围的内联、循环变形、自动向量化等。

在MCU仪表的开发中,我们采用Ofast编译模式以确保程序运行效率最大化。Ofast模式通过结合-O3和-ffast-math的优化特性,提供了一种极端的优化设置。这种设置能够充分利用CPU的多核和向量化指令集等硬件特性,显著提升程序的执行速度。尽管使用这种模式会增加程序的编译时间,但为了性能考虑这种取舍是必要的。

  • 启用图片资源压缩

当处理图片显示时,MCU会先将图片数据从外部ROM复制到外部RAM,经过缩放、旋转等处理后复制到图像缓冲区中,其中外部ROM->外部RAM的步骤会消耗大量的运行时间,影响程序运行速度,为解决此问题,我们配置了以下三个参数:

resourceCachePolicy

配置resourceCachePolicy: “OnDemand”启用图像缓存,此时,图像在首次加载并使用后,并不会立刻被释放,而是保存在一个专门的缓存空间内,在下次使用时将直接从缓存中拿取,避免了重复加载图像带来的时间开销。

maxResourceCacheSize

设置maxResourceCacheSize: xxxxxxxx可配置最大缓存空间。

resourceCompression

配置resourceCompression: true则可以启用对图像的资源压缩,尽可能的减小图像体积,节省外部ROM空间。

应用这些优化策略后,我们能够在NXP1170平台上高效地实现并流畅运行UI设计。

若您希望获取完整的Demo源代码或深入了解Qt for MCUs,请随时联系我们或将需求发送至market@dotrustech.com。

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

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

相关文章

三、分布式软总线的架构设计

软总线的主要架构如下: 软总线主体功能分为发现、组网、连接和传输四个基本模块,实现: 即插即用:快速便捷发现周边设备。 自由流转:各设备间自组网,任意建立业务连接,实现自由通信。 高效传…

Ubuntu 22.04远程自动登录桌面环境

如果需要远程自动登录桌面环境,首先需要将Ubuntu的自动登录打开,在【settings】-【user】下面 然后要设置【Sharing】进行桌面共享,Ubuntu有自带的桌面共享功能,不需要另外去安装xrdp或者vnc之类的工具了 点开【Remote Desktop】…

Zerotier+Parsec五分钟实现外网远程访问校园或公司内网

0 需求 校园网或公司内网是不能直接通过远程控制桌面软件访问的,想要实现,就必须通过三方的服务来实现穿透内网。但是这样的缺点就是存在延迟。 1 安装软件 (1)Zerotier 是内网穿透软件,在两台设备上都要安装&#…

LabVIEW图像分段线性映射

介绍了如何使用LabVIEW对图像进行分段线性映射处理,通过对特定灰度值区间进行不同的线性映射调整,以优化图像的显示效果。案例中详细展示了如何配置和使用LabVIEW中的图像处理工具,包括设置分段区间、计算映射参数和应用映射函数等步骤。 实…

我独立开发生涯的第一个商业化产品 - 微寻

2024 年 04 月 27 日晚八点,微寻 终于正式上线了。时隔一周,我在五一假期的最后一天写下此文,以纪念这款我独立开发生涯的第一个商业化产品。 1. 何为微寻 微寻 为个人网站提供微信码登录 能力。 没错,微寻 是一个小型 SaaS&am…

【数据结构】07.循环队列

一、循环队列的定义 定义:队列主要有顺序队列,循环队列,双端队列,优先队列。而当中循环队列是一种线性数据结构。它也被称为“环形缓冲器”。它只允许在一端进行插入操作,即队尾(rear)&#xf…

【elasticsearch】IK分词器添加自定义词库,然后更新现有的索引

进入elasticsearch中的plugins位置,找到ik分词器插件,进入ik插件的config文件夹,当中有一个IKAnalyzer.cfg.xml配置文件。使用vim编辑器修改配置文件: vim IKAnalyzer.cfg.xml 配置文件如下(添加了自定义字典的位置&…

springboot交流论坛网站-计算机毕业设计源码00304

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了交流论坛网站的开发全过程。通过分析交流论坛网站管理的不足,创建了一个计算机管理交流论坛网站的方案。文章介绍了交流论坛网站的系统分析部分&…

名企面试必问30题(十九)——最近行业内你觉得做的最好的案例是哪一个,为什么?

1.思路 考察你对于行业了解,对于新动态是否保持时时关注,以及判断好和不好的能力。 首先,明确指出您认为行业内做得最好的案例。简要介绍该案例所属的公司和产品。阐述该案例在测试方面的突出特点和优势,例如采用了创新的测试方法…

海量设备集中运维,向日葵远程控制赋能农牧产品加工产业链

产业规模越大,单位成本就越低,这是一个广泛存在的商业规律。 在诸多行业中,农牧业的这种“规模效应”尤为明显,这使得在农牧行业内逐渐发展出许多横跨产业链上下游的大型企业集团,业务甚至覆盖相关产业设备的设计与生…

[产品]理解产品

课程安排 认识互联网行业 1.行业对比 2.互联网公司 广义理解: 互联网行业的公司大都以计算机网络技术为基础, 利用网络平台帮助企业提供服务, 并以此获取收入 3.行业细分 典型产品 认识产品经理 1.职责差异 不同类型的公司, 产品经理岗位所负责的工作都是略有差异的 1,外包…

555 定时器芯片工作原理

在本教程中,您将学习如何使用 555 定时器做一些有趣的事情。许多人用它做的第一件事就是制造闪烁的灯光。但这只是用该芯片可以做很多事情的简单示例之一。您还可以控制电机、创建闹钟、创建乐器等等。 让我们先来概览一下这些引脚。 555 定时器引脚排列 引脚 1 接地…

maven项目启动的时候,自动启动netty

1.写一个监听器,重开一个线程初始化,netty,一定要重开一个线程去启动,要不会阻塞的 public class StartupListener implements ServletContextListener {Overridepublic void contextInitialized(ServletContextEvent sce) {// 在Web应用启动时启动WebSocket服务器new Thread(…

从零开始学量化~Ptrade使用教程(三)——行情界面主要功能

技术分析 除复权 提供向前复权、向后复权,系统默认不复权。此外,全面支持月、周、日线复权,支持向前和向后复权、不同时段分段复权等功能。系统能够根据盘中即时行情,个股K线图可以根据该股除权日的送股、配股及红利情况圆滑地画出…

从“钓”到“管”:EasyCVR一体化视频解决方案助力水域安全管理

一、背景 随着城市化进程的加快,越来越多的市民热衷于钓鱼活动。钓鱼活动在带来乐趣的同时,也伴随着一定的安全隐患。尤其是在一些危险水域,也经常出现垂钓者的身影,非法垂钓,这给城市管理带来了不小的阻力。传统的人…

狂赚三个亿,百亿医用耗材上市公司重金押注老人轮椅

布局海外市场,轮椅销量翻两番 作者 | 艾米莉 排版 | 张思琪 抛砖引玉 1.年销售60万台轮椅,英科医疗如何做到? 2.老年人轮椅是出海,还是深耕国内市场? 3.2022年全球轮椅市场规模为48亿美元,谁在喝汤&…

NLTK下载及其报错问题,包解决

目录 问题分析 下载 报错 报错原因 正确ip获取 写入host文件 再次下载 测试是否成功 问题分析 NLTK一般是在作自然语言处理时用到,最开始时,我是直接在conda进行conda install nltk进行安装,以为就可以直接使用,但是运行…

基于docker环境及Harbor部署{很简短一点了,耐心看吧}

用到的环境: docker 、nacos、compose、harbor(自行安装 ,以下连接作为参考) nacos:史上最全整合nacos单机模式整合哈哈哈哈哈_nacos 源码启动 单机模式-CSDN博客 docker、compose、harbor:史上最全的整合Harbor安装教程&#…

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

openssl交叉编译-移植ARM

OpenSSL是一个开源的密码学工具包,提供了一组用于网络安全的加密和解密算法、协议以及相关工具的库,它通过提供多种加密算法、协议和工具,为网络通信和数据存储提供了强大的安全保障。 主要功能 加密和解密: OpenSSL提供了多种对…