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

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

3天内不再提示

基于DSP+ARM双处理器构架实现Qtopia Core应用程序的开发设计

电子设计 来源:微计算机信息 作者:曹林,童维勤,邵丹 2020-09-14 17:39 次阅读

1 引言

嵌入式Linux以其开放的源代码,精简高效的内核、易定制和易裁减的特征以及硬件支持广泛等优势,而深受嵌入式开发者的青睐,在消费类电子产品工业控制智能仪表等领域中有着广泛的应用。Qt是 Trolltech公司推出的一个跨平台的 C++图形用户界面应用程序开发框架。Qt是完全面向对象的,很容易扩展,并且允许真正的组件编程

Qtopia Core是适用于嵌入式 Linux 所支持的单一应用设备的主导性应用框架,能够稳定、可靠地运行于嵌入式 Linux下,并且可以快速构建一个可视化嵌入式软件系统。 Qtopia Core的前身是 Qt/Embedded,继承了Qt 4的功能与优点,拥有与桌面系统的 Qt相同的应用程序编程接口(API)和工具包。当编译 Qtopia Core时,可以去除不用的功能和组件,以昀小化软件的占用空间。

2 Qtopia Core介绍

Qtopia Core是一个为嵌入式设备上的图形用户接口和应用开发而订做的C++工具开发包。Qtopia Core采用与桌面版本同样的一套 API,但在其内部实现上作了很多出色的调整来适应硬件有所限制的嵌入式环境。Qtopia Core包含多个 Qt工具,可以进行快速和优化开发,如 Qt 4增强的 GUI布局和窗体构建器 Qt Designer。Qtopia Core与 Qt/X11昀大的区别在于 Qtopia Core不依赖于 X Server或 Xlib,而是直接访问帧缓存( FrameBuffer),这样显著减少了内存消耗。

2.1 Qtopia Core的窗口系统

Qtopia Core的窗口系统采用 Client/Server模型,任何一个 Qtopia Core的应用程序都需要运行在一个 Server应用上,而 Qtopia Core的应用程序本身也可以作为 Server来运行。 Server进程通常会生成 QWSServer类的一个对象,主要用来分配 Client进程的显示区域,并产生鼠标和键盘事件等。而 Client进程则通常生成 QWSClient类的一个对象,负责处理与各种应用相关的逻辑。Server和 Client之间的通信通过 socket来实现,这种通信通常被保持在一个较低的水平以减少通信的开销——比如窗口的绘制,并不是像 X那样完全由 Server来完成,而是由 Client进行直接操作 FrameBuffer来实现,Server进程所作的仅仅是通知 Client需要重绘的事件等。

2.2 信号与槽机制 (Signals and Solts)

信号与槽机制是 Qt的核心机制,它是一种高级接口,用于对象间的通讯,是 Qt区别于其它工具包的昀具特性的部分。信号与槽是 QT自行定义的一种通信机制,它独立于标准的 C/C++语言,需要借助一个称为 moc(Meta Object Compiler)的 QT工具对信号和槽在编译之前进行预处理,为高层次的事件处理自动生成所需要的附加代码。

Qt中使用信号与槽机制取代原始的回调和消息映射机制,信号与槽是类型安全的,完全面向对象的,并且它们之间的耦合比较松散,可以使得我们编写的通信程序更为简洁明了。当一个特定的事件发生时,一个被指定的信号就被发射,槽则是响应信号的函数,如果存在一个槽和该信号相连接,那在该信号被发射后,这个槽就会立刻执行。多个信号可以连接一个槽,一个信号也可以连接多个槽,甚至可以把信号与信号相连接。信号与槽构造了一个强大的组件编程机制,可以创建彼此互不了解的对象,利用信号就可以把信息正确的传递到对应的槽函数进行处理。

3 Qtopia Core的安装与移植

3.1 建立交叉编译环境

文中采用 Trolltech公司的 Qtopia Core 4.3.2自由版作为目标板 Linux图形界面库。与 Qt/Embedded 3.x不同,Qtopia Core 4系列指明编译器需要 3.2以上的版本,此处选用 arm-linux-gcc-3.4.1的交叉编译工具链,将其拷贝到根目录 /下,运行解压命令:

tar xjvf arm-linux-gcc-3.4.1.tar.bz2

交叉编译器会被安装在/usr/local/arm/3.4.1/bin目录下,编辑 /etc/bashrc文件,将其添加到环境变量 PATH中:

export PATH=/usr/local/arm/3.4.1/bin:$PATH

3.2 交叉编译 Qtopia Core库

在 Trolltech公司主页上下载 Qtopia Core 4源代码软件包qtopia-core-opensource-src-4.3.2.tar.gz,解压:

tar zxvf qtopia-core-opensource-src-4.3.2.tar.gz

cd qtopia-core-opensource-src-4.3.2

由于项目中使用带有触摸功能的 TFT液晶屏作为显示和输入设备,需要添加对触摸屏的支持。一种方法是利用 Qtopia Core为 Linux TP协议提供的鼠标驱动接口类,修改触摸屏驱动的源代码,并在执行 configure配置时传递-qt-mouse-linuxtp选项激活;另一种方法是嵌入 Tslib。Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能。这里使用第一种方法,过程如下:

首先在源码树 src\gui\embedded\qmouselinuxtp_qws.h中加入宏定义:

#define QT_QWS_IPAQ

#define QT_QWS_IPAQ_RAW

然后修改 qmouselinuxtp_qws.cpp文件,把 QWSLinuxTPMouseHandlerPrivate函数中打开的设备文件节点 ”/dev/h3600_tsraw”替换为自己的触摸屏设备文件,如笔者目标板中为”/dev/touchscreen/0”。

配置编译参数

。/configure -embedded arm -xplatform qws/linux-arm-g++ -depths 8,16,32 -no-qt3support -no-qvfb -qt-mouse-linuxtp

根据 configure生成的 Makefile文件编译并安装:

gmake

gmake install

交叉编译完后,程序和库默认会安装到 /usr/local/Trolltech/QtopiaCore-4.3.2-arm目录下。设置环境变量,修改$HOME/.bash_profile文件,加入

export PATH=/usr/local/Trolltech/QtopiaCore-4.3.2-arm/bin:$PATH

这样就可以直接使用 qmake工具交叉编译 Qtopia Core应用程序,生成可运行在 ARM平台的二进制可执行文件。

3.3构建根文件系统和移植到目标平台

可以选择使用 Busybox工具构建一个全新的根文件系统,也可对开发板上原有的文件系统进行剪裁和修补。此处利用原有的文件系统映像,把新建的应用程序的相关文件加入其中。首先把原有的根文件系统映像 mount到工作的机器上,然后复制其内容到一临时目录下。将交叉编译好的 Qtopia Core库文件拷贝到目标板文件系统对应/lib目录下,其中主要库包括libQtCore.so.x,libQtGui.so.x,libQtNetwork.so.x等。此外,还需将交叉编译器所在目录下的 libstdc++.so.6库文件也拷贝过来。

为使应用程序能正确执行,需要设定系统的运行环境,将以下环境变量写入目标文件系统/etc/profile文件中:

export QTDIR=”/usr/local/Trolltech/QtopiaCore-4.3.2-arm”

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QWS_MOUSE_PROTO=”LinuxTp:/dev/touchscreen/0”

要使我们的程序在系统启动后能够自动运行,还需在目标文件系统/usr/etc/rc.local脚本文件中,添加应用程序的路径和执行命令:

exec /apps/harmonic -qws

此时在开发板运行 Qtopia Core应用程序后,触摸屏还不能正确响应用户的点击,主要原因是目标板文件系统中用于存放校准信息的/etc/pointercal文件不存在或该文件中对触摸屏进行调整的参数不正确。Qtopia Core示例程序中提供了一个校准程序 mousecalibration,将其下载至目标板并运行,在出现校准界面后采用 5点校准会在 /etc目录下生成 pointercal校准文件。以后每次触摸屏启动都会读取该文件内容进行触摸屏设定。

4 Qtopia Core应用程序开发实例

本实例的背景是为嵌入式电力谐波检测设备设计开发其上的图形用户界面程序,系统采用了 DSP+ARM双处理器构架的设计模式,通过串口通信实现数据传输和协同工作。基于 Qtopia Core的应用程序运行在 ARM平台上,其软件设计主要包括完成与 DSP的通信,接收传来的数据,并加以计算分析和统计,将电力谐波参数值及信息以波形曲线、频谱柱状图、表格等形式实时显示出来,通过人机交互界面反馈给用户,便于用户操作与控制。程序框架结构如图 1所示:

基于DSP+ARM双处理器构架实现Qtopia Core应用程序的开发设计

设计上利用 Qtopia Core的多线程机制分前后台处理,前台为用户界面主线程,用来保持对用户操作的响应,控制和调度其他线程。其他执行起来耗时的任务如数据读取、处理分别设计成专门的线程放置在后台,各线程间使用互斥信号量方式通信达到同步工作。数据读取线程在编程实现上主要是依靠Linux系统提供的 termios结构对串口属性参数进行设置,并对串口对应的设备文件(位于 /dev目录下,串口一为 /dev/ttyS0)进行访问,将接收到的数据按照规定的协议格式加以解析,从而为数据处理线程提供数据支持。数据处理线程中自定义 PowerQuality类实现对电能质量各项性能指标的计算方法的封装,并将结果分析统计后发送至显示线程。数据显示线程通过子类化 Qtopia Core提供的相应的窗体控件,重新实现其绘制事件处理器 paintEvent()虚函数,在函数中创建并调用 QPainter类变量实现各类图形信息的绘制显示。程序以屏幕点触事件驱动,通过 Qtopia Core的信号与槽机制与终端用户交互。图2为开发实例运行在虚拟仿真窗口qvfb中的截图。

5 结论

随着嵌入式 Linux应用的不断发展,嵌入式处理器运算能力的不断增强,对外设支持的不断丰富,越来越多的嵌入式设备开始采用较为复杂的 GUI系统,嵌入式 Linux系统下的 GUI应用程序开发也越来越深入。开发出优秀的的人机界面,是嵌入式发展的趋势,拥有广阔的市场前景。Qtopia Core延续了 Qt在桌面系统的所有功能,丰富的 API接口和基于组件的编程模型使得嵌入式 Linux系统中的应用程序开发更加便捷。

本文的创新点是:详细讲述了 Qtopia Core图形系统在嵌入式 Linux平台上的移植过程,并通过修改 Qtopia Core源代码,使得 Qtopia Core库支持触摸屏设备的使用。基于 Qtopia Core设计与实现了嵌入式电力谐波检测设备的系统界面,其界面友好、运行稳定,为其他嵌入式系统软件开发和应用提供一个参考。

责任编辑:gt

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

    关注

    68

    文章

    18269

    浏览量

    222118
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7681

    浏览量

    344346
  • 嵌入式
    +关注

    关注

    4981

    文章

    18278

    浏览量

    288374
收藏 人收藏

    评论

    相关推荐

    处理器ARM_DSP如何实现协同工作

    处理器ARM_DSP如何实现协同工作
    发表于 08-17 14:26

    DSP+ARM开发视频

    新添DSP+ARM开发视频,不单有基于TI TMS320C6748的DSP开发视频教程,还新添加了基于TI OMAPL138的SYSLINK
    发表于 10-21 14:15

    创龙TI AM5728 DSP ARM 开发板特点

    TI AM5728 DSP+ARM 开发板简介1 核心板简介Ø 基于TI AM5728浮点
    发表于 08-13 23:40

    请问TI还有其他的DSP+ARM的芯片吗?

    本帖最后由 一只耳朵怪 于 2018-6-22 09:57 编辑 大家好!TI的工程师好!我现在在做一个项目,想用DSP做信号处理跑算法,用ARM跑linux和连接以太网。想找一个集成
    发表于 06-21 20:55

    DM8168 linux开发,请问DSPARM处理器程序开发是独立的吗?

    开发DM8168的过程中遇到以下问题,没有想通,请各位大侠帮忙看一下吧:DSPARM处理器程序开发
    发表于 08-09 07:31

    基于DSP+ARM核嵌入式系统通信接口设计

    操作系统的理论,并且支持完整的硬件驱动程序、网络通信协议与多处理器的架构,其源码的公开更有利于操作系统嵌入式应用。基于上述分析,笔者开发了基于ARM
    发表于 07-23 07:37

    什么是DSP,DSP处理器有什么特点?

    字,并行度非常高。7、某些型号的DSP处理器内部是DSP+ARM。8、有多核DSP。9、价格较贵。三、哪里用到DSP
    发表于 09-04 10:31

    Qtopia Core的安装与移植过程是怎样进行的?

    Qtopia Core是什么?Qtopia Core的安装与移植过程是怎样进行的?Qtopia Core
    发表于 04-27 07:22

    介绍易于使用的Arm Cortex-M处理器上的信号处理功能

    库功能节省开发时间受益于使用高级编程语言(例如C或C ++)进行编程,而不是通常用于专有DSP的手动汇编程序该文章将介绍易于使用的Arm Cortex-M
    发表于 07-29 14:48

    ARM应用程序构架_时间片轮询模板

    ARM嵌入式应用程序架构设计实例精讲--ARM应用程序构架02时间片轮询模板
    发表于 07-08 11:08 12次下载

    ARM应用程序构架_顺序执行模板

    ARM嵌入式应用程序架构设计实例精讲--ARM应用程序构架01顺序执行模板
    发表于 07-08 11:08 6次下载

    ARM应用程序构架_操作系统模板

    电子专业单片机相关知识学习教材资料——ARM应用程序构架03操作系统模板
    发表于 09-13 17:23 0次下载

    ARM应用程序构架02时间片轮询模板

    电子专业单片机相关知识学习教材资料——ARM应用程序构架02时间片轮询模板
    发表于 09-13 17:23 0次下载

    OMAPL138B C6-Integra™ DSP+ARM® 处理器

    OMAPL138B C6-Integra™ DSP+ARM® 处理器是一款低功率应用处理器,此处理器基于一个 ARM926EJ-S™ 和一个
    发表于 04-13 15:57 6次下载
    OMAPL138B C6-Integra™ <b class='flag-5'>DSP+ARM</b>® <b class='flag-5'>处理器</b>

    OMAP-L138 C6000 DSP ARM处理器的详细中文数据手册免费下载

    OMAP-L138 C6000 DSP+ARM 处理器 是一款低功耗 应用 处理器,该处理器基于 ARM926EJ-S 和 C674x
    发表于 07-25 08:00 32次下载