0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式MCU上启动基本的Qt应用程序的案例分析

电子设计 来源:embedded 作者:Alexander Kalmuk和Al 2021-04-05 10:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:Alexander Kalmuk和Alexander Kalmuk

嵌入式系统有望为智能产品提供越来越多的功能。这可以通过Linux轻松实现,Linux为您所需要的每种情况提供软件。但是Linux需要相当大的硬件资源,尤其是内存,因此目标平台通常会很昂贵并且功耗很高。另一方面,现代微控制器MCU)具有很多资源,足以应付许多智能任务。使用Embox RTOS之类的实时操作系统(RTOS),该操作系统允许在包括MCU在内的所有地方使用Linux软件,开发人员可以更轻松地开发成本更低,功耗更低的智能设备。

在本文中,我们讨论在运行Embox RTOS的嵌入式MCU上启动基本的Qt应用程序。我们使用两个基于Cortex-M7的单核板(216MHz):STM32F746g-Discovery和STM32F769i-Discovery,它们分别具有480×272和800×480屏幕分辨率的触摸屏。

不久前,我们设法在STM32F746-Discovery [注1]上启动了一个标准的Qt示例“ moveblocks”。但是我们想走得更远,用触摸屏启动一个示例,我们选择另一个标准示例``animatedtiles''。这是一个相当不错的示例,即使在台式机上也看起来很酷。它是交互式的,因此我们可以使用触摸屏,并且看起来也像3D动画。

我们想了解STM32 MCU是否可以提供足够的性能。我们不确定CPU的速度是否足以使该渲染场景平滑,因为我们发现,即使是刷新800×480显示器的屏幕也是一项昂贵的操作[注2]。

建筑

首先,让我们将应用程序构建为Embox的一部分。最简单的方法是为QEMU构建应用程序,这是一个开放源代码模拟器。使用QEMU意味着在这种情况下,我们不需要照顾内存消耗。这将帮助我们确保所有必需的组件均可用。当在QEMU上启动“动画”时,我们可以轻松地将必要的组件添加到STM32的配置文件中。

首次在目标板上启动

我们在目标板STM32F746G-Discovery上成功地启动了“动画”,但是我们注意到只绘制了屏幕的上半部分。当然,我们可以尝试通过立即在板上进行调试来解决问题,但是有一种更简单的方法:我们可以首先在Linux环境中启动和调试示例。

在主机上调试

要运行此示例并调试您的应用程序,您需要Qt库本身以及QVFB(它是提供虚拟屏幕的Qt应用程序)。您可以按照官方文档中的说明构建QVFB。

然后,您可以使用所需的屏幕分辨率(对于STM32F746G-Discovery为480×272)启动QVFB:

./qvfb-宽度480-高度272 -nocursor

您还应该使用嵌入式配置文件(即带有“ -embedded”选项)来构建Qt库。此选项旨在在没有X11或现有图形环境的情况下运行Qt,将改用QWS(Qt窗口系统)。此外,我们禁用了其他一些不必要的选项和模块。产生的配置行如下:

./configure -opensource -confirm-license -debug \ 
 -embedded -qt-gfx-qvfb -qvfb \ 
 -no-javascript-jit -no-script -no-scripttools \ 
  -no-qt3support -no-webkit -nomake演示- nomake的例子

最后,让我们构建并启动“动画”。构建阶段与Qt(qmake; make;)一样。启动应用程序时,应指定QVFB作为显示:

./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0

屏幕的上半部分显示了相同的图片。我们在源代码(examples / animation / animatedtiles / main.cpp)中发现,该应用程序以“ view-> show()”开头,这意味着不处于全屏模式。之后,我们完全相信屏幕的唯一上半部分用于显示应用程序。我们稍微修改了“动画”代码,并添加了“ -fullscreen”选项。

在STM32F746-发现上启动

我们在Embox中构建了修改后的应用程序,并检查它是否已成功在QEMU上运行。但是,当我们在目标板上启动应用程序时,我们收到了“内存不足”错误。这意味着我们的配置中的堆大小不足以容纳应用程序。我们决定在Linux中使用丰富的开发工具来解决问题,即估计所需的堆大小。

我们已经从valgrind开始了我们的应用程序。Valgrind是用于内存调试和性能分析的工具,Massif是堆分析器(它是Valgrind的一部分)。

$ valgrind --tool = massif --massif-out-file = animatedtiles.massif。/ examples / animation / animatedtiles / animatedtiles -qws -fullscreen 
$ ms_print animationtiles.massif> animationtiles.out

并发现该应用程序需要的堆大小约为2.7 MB。

我们在Embox配置中将堆大小设置为3 MB,然后再次开始演示。它已在全屏模式下成功运行。

在STM32F769I-Discovery上启动。

我们还想在类似的板上尝试该示例,但显示更大。本示例使用的显示分辨率为800×480的STM32F769I-Discovery。在这种情况下,仅16位彩色模式(800x480x2 = 768000)的帧缓冲区仅需要将近1MB,但是此板上有足够的(16MB)外部SDRAM。因此,我们只需要估计堆的大小即可。

我们以新的分辨率(800×480)启动了QVFb:

$。/ qvfb-宽度800-高度480 -nocursor&

并使用valgrind作为上一次:

$ valgrind --tool = massif --massif-out-file = animatedtiles.massif。/ examples / animation / animatedtiles / animatedtiles -qws -fullscreen 
$ ms_print animationtiles.massif> animationtiles.out

我们发现它大约需要6 MB。我们已经设置了6 MB的堆大小,并在STM32F769I板上成功启动了“动画时间”。

图1:Embox RTOS下STM32F769I-DISCOVERY板上的QT动画片段示例。(来源:Embox)

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18605

    浏览量

    386935
  • 嵌入式
    +关注

    关注

    5186

    文章

    20146

    浏览量

    328774
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3716

    浏览量

    133099
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式Linux-Qt环境搭建 Qt程序运行测试

    本编介绍如何在嵌入式Linux开发板配置Qt运行环境,并进行Qt程序运行测试。
    的头像 发表于 06-01 09:07 8840次阅读
    <b class='flag-5'>嵌入式</b>Linux-<b class='flag-5'>Qt</b>环境搭建 <b class='flag-5'>Qt</b><b class='flag-5'>程序</b>运行测试

    嵌入式QT常见开发方式有哪些?

    嵌入式工程师可以使用同一套代码库开发适用于不同嵌入式操作系统(如Linux、RTOS)的应用程序,只需针对目标平台调整编译选项和配置即可。 6.Qt for
    发表于 08-12 10:05

    嵌入式QT的内核分析与优化

    本文给出了QT嵌入式版本(QT/E)与其它嵌入式GUI 工具箱在性能、结构的比较,从宏观
    发表于 06-22 08:30 17次下载

    开发基本的嵌入式应用程序

    开发基本的嵌入式应用程序 一、 实验目的读懂main.c 文件中调用的函数,了解uCOS-II 系统的启动过程。学习使用SourceInsight 3.0 C 代码文
    发表于 12-25 23:17 1684次阅读
    开发基本的<b class='flag-5'>嵌入式</b><b class='flag-5'>应用程序</b>

    基于Qt嵌入式Linux通讯簿程序设计

      摘 要: 随着嵌入式系统的发展,在Linux 下使用Qt 开发嵌入式应用程序嵌入式图形用户界面( GUI) 系统应用研究的重点。通过一
    发表于 11-23 11:31 4477次阅读

    嵌入式linux GUI-Qt解析

    职业培训班》二期课程中嵌入式linux应用开发方面的重要内容。不少学员对QT方面的内容比较关注,所以在这里我们先对QT做一下简单介绍。 QT Qt
    发表于 11-01 16:53 1次下载

    嵌入式linux应用开发之QT

    随着linux系统及基于linux系统的嵌入式产品的蓬勃发展,QtQt/Embedded、Qtopia的字样越来频繁的出现在我们面前。 QT Qt
    发表于 11-06 14:05 4次下载

    嵌入式Linux应用程序例程

    嵌入式Linux应用程序例程(arm嵌入式开发步骤)-嵌入式Linux应用程序例程,有需要的可以参考!
    发表于 07-30 13:23 16次下载
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>应用程序</b>例程

    嵌入式linux安装qt

    嵌入式linux部署qt几个疑问在windows系统里编好的QT程序,经过交叉编译后能直接运行在板子吗?还是板子需要弄个
    发表于 10-20 18:06 6次下载
    <b class='flag-5'>嵌入式</b>linux安装<b class='flag-5'>qt</b>

    嵌入式Linux的Qt

    的eglfs显存linuxfbUnix信号处理程序字型嵌入式Linux设备用于窗口系统的平台插件XCBWaylan
    发表于 11-01 17:06 3次下载
    <b class='flag-5'>嵌入式</b>Linux的<b class='flag-5'>Qt</b>

    嵌入式Linux应用程序开发-(1)第一个嵌入式QT应用程序

    第一个嵌入式QT应用程序在成功安装 Qt Creator 开发环境后,我们通过一个简单的嵌入式Qt
    发表于 11-01 17:21 16次下载
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>应用程序</b>开发-(1)第一个<b class='flag-5'>嵌入式</b><b class='flag-5'>QT</b><b class='flag-5'>应用程序</b>

    Qt应用程序出现卡顿的现象怎么解决呢

    在使用Qt完成项目开发后,需要将其运行在嵌入式linux平台上,在设备启动后,经uboot引导和linux内核后,直接进入Qt应用程序
    的头像 发表于 09-23 10:38 1w次阅读

    嵌入式Linux中让应用程序自动启动

    在很多嵌入式系统中,由于可用资源较少,常常在系统启动后就直接让应用程序自动启动,以减少用户操作和节省资源。如何让自己的应用程序自动
    发表于 10-28 11:04 0次下载

    嵌入式系统中集成Rust和Qt的实践

    Rust 拥有丰富的库生态系统,用于序列化和反序列化、异步操作、解析不安全输入、线程、静态分析等,而 Qt 是一个 C++ 工具包,支持跨各种平台的丰富的、基于 GUI 的应用程序,从 iOS 到
    发表于 05-03 10:26 3158次阅读
    在<b class='flag-5'>嵌入式</b>系统中集成Rust和<b class='flag-5'>Qt</b>的实践

    嵌入式系统的启动流程

    嵌入式系统的启动流程是一个复杂但有序的过程,它涉及从系统电到操作系统内核及应用程序启动的多个阶段。
    的头像 发表于 10-05 17:44 1486次阅读