嵌入式开发中DSP与FPGA的关系-嵌入式Linux基于Qt开发GPIO应用
时间:2017-03-02 11:03 来源:未知 作者:admin 点击:次
常所说的单片机侧重于控制,不支持信号处理,属于低端嵌入式处理器,arm可以看做是低端单片机升级版,支持操作系统管理,更多接口如网卡,处理能力更强;fpga是可编程逻辑器件,侧重时序,可构建从小型到大型的几乎所有数字电路系统,DSP主要完成复杂的数字信号处理,如fft,通常一个复杂系统可以由单片机、arm、FPGA、dsp中的一种或几种构成,各有优势和不足。 dsp通常用于运算密集型,fpga用于控制密集型,许多人都用dsp高算法,用fpga 作外围控制电路。 去年xilinx在北京介绍FPGA和DSP融合的时候,大有席卷DSP和FPGA市场之势。但后来在实际中发现其阻力也是不小的,关键是很难搭配FPGA和DSP的比重。我们知道FPGA擅长各种控制(也包括适时性非常高的信号处理如移动通信中基带滤波,该滤波用C5000,C6000很难胜任,除非多芯片并行),DSP擅长各种信号处理运算,但在一个系统中究竟有多大的控制电路,有多少密集运算?变数是很大的,我们不可能用一个芯片解决这个问题。对于运算密集性系统,我们如果使用这种芯片的话很有可能还要其他DSP,那么我们需要了解多种DSP编程和接口设计,这是否与我们的初衷背道而驰呢? 上面都是一些基本概念的介绍,下面我就来通俗介绍一下,在DSP里,你是一个软件设计者,硬件已经完全固化,你所要做的,就是在这个固定的硬件平台实现其功能的最优化,一般TI的DSP涉及最多的是一些基本的BIOS操作系统之间的任务调度,以及算法改进与优化等待, DSP的关键优势包括其对于新型及复杂算法时的更短的开发时间,以及能够运行多种算法的灵活性。 而对于FPGA来说,你是一个硬件设计者,FPGA就是一张白纸,上面写什么,画什么都取决于你。同样一片FPGA,菜鸟和高手实现的功能会是天壤之别,FPGA的最大优势在于硬件实现已及通过并行处理实现的效率增益。使用FPGA,您大多的时间并非进行算法设计与优化,而是逻辑设计与时序约束等等。 FPGA与DSP关系: 1、 DSP侧重于核心算法处理,FPGA侧重于外围控制处理。 2、 DSP内是用C语言编写,语言执行是串行处理,效率比较低。 FPGA侧重于并行处理,效率较高;还有交合逻辑(外围接口、通讯等); FPGA发展领域: 使用领域:电子设计、通讯、汽车、军工 不适合:消费类产品(手机)—FPGA功耗高; FPGA技术难点: 1、 需要专门的硬件语言来开发 2、 FPGA灵活性比较高,设计是由工程师来决定,需要测试验证 主图: 嵌入式Linux基于Qt开发GPIO应用 简介 基于Embedded Linux系统的嵌入式设备使用跨平台GUI开发工具Qt来开发嵌入式应用已经非常普遍,本文就以GPIO应用为示例演示下如何通过Qt的集成开发环境Qtcreator来开发嵌入式Linux应用. 本文所采用的硬件平台来自与Toradex发布的基于NXPiMX7 SoC的ColibriiMX7 ARM计算机模块配合ColibriEva Board. 2). 准备 a).Toradex ColibriiMX7S (基于NXPiMX7S SoC)计算机模块配合ColibriEva Board开发载板. b). EmbeddedLinux 使用基于OpenEmbedded框架重新编译的集成Qt5.5的Toradex Linux imagereleaseV2.6.1版本以及对应的SDK.这个可以结合这里的说明自己进行编译,也可以通过这里直接下载编译好的image和SDK文件. c).合适的Qtcreator版本,本文使用为3.1.1版本. 3). 软硬件安装 a).由于只是简单展示利用Qt开发GPIO应用,本文只使用一个GPIO来驱动ColibriEva Board上面自带的LED. b).硬件连接,将ColibriEva载板X10连接器SODIMM_127 和X21连接器LED1连接,并去掉对应的X11跳线帽。其他就是标准的串口网口等连接用于调试程序. c).将上面准备好Linux image (如Colibri_iMX7_LinuxImageV2.6.1_20170220.tar.bz2)按照这里的说明更新到ColibriiMX7计算机模块上面. d).安装Qtcreator, 具体方法这里不赘述. e).在Ubuntu开发主机上面,运行下面命令安装SDK, 安装位置默认为”/usr/local/oecore-x86_64”,当然也可以自行设置, 本文保留默认选项. ------------------------------ toradex@toradex-ubuntu:chmod a+xangstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh toradex@toradex-ubuntu:./angstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh ------------------------------ 4).Qtcreator配置 a).打开Ubuntu开发主机命令行,通过下面命令启动Qtcreator ------------------------------ toradex@toradex-ubuntu: source/usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi toradex@toradex-ubuntu: $ echo$OE_QMAKE_CXX arm-angstrom-linux-gnueabi-g++-march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard--sysroot=/usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi toradex@toradex-ubuntu:qtcreator ------------------------------ b).在qtcreator界面下,进入Tools->Options选项菜单,进入Device选项 ./点击”Add”, 并选择”Generic Linux Device”添加新设备,设置好设备名字和IP地址,用户名默认为”root”,密码空.
./首先进入Qt Versions, 点击”Add”添加,指定SDK qmake, 其位置位于”/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/qt5/qmake”. ./进入Compilers, 点击”Add”添加GCCC++编译器,其位置位于”usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-g++”,不过更新版本的Qtcreator下这里还需要添加C编译器,也在同一目录下,为”arm-angstrom-linux-gnueabi-gcc”. 另外其他配置上”Platform codegenflags”设置为”‘${CFLAGS}’”,“Platform linker flags”设置为”‘${LDFLAGS}’”. ./进入Debuggers, 点击”Add”添加GDB,其位置位于”/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb” ./进入Kits, 点击”Add”添加,如下讲上述设定的内容适配,新版本Qtcreator在Compiler这里会分开C和C++分别设定.
5). Qtcreator GPIO应用开发 a). Qtcreator 创建一个新项目, New Project-> Applications -> QtWidgets Application -> Location (任意)-> Kit (指定上面创建的kit)-> Class Information (默认). b). 在qtcreator项目下新建GPIO操作相关的header和source文件 ./ Header 文件代码如下,主要定义一些全局环境变量和声明GPIO基本的操作函数 https://github.com/simonqin09/QtGPIOProject/blob/master/GPIOSet.h ./ source文件代码如下,主要是GPIO基本操作函数 https://github.com/simonqin09/QtGPIOProject/blob/master/GPIOSet.cpp c). 进入Forms -> mainwindow.ui, 如下编辑界面,添加一个”button”控件和一个”lineedit”控件.同时通过”go to slot” 添加”button” 的”clicked” 动作.
d). 修改mainwindow header和source文件,实现GPIO控制 ./ Hearder文件代码如下,只是声明了几个要用的变量 https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.h ./ source文件代码如下, 在窗口初始化时候同时初始化GPIO(这里使用SODIMM127作为GPIO输出pin),另外在”clicked”下面处理按键反转GPIO输出的动作控制. https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.cpp e). 编译应用程序,讲编译号的可执行文件scp复制到ColibriiMX7模块系统上面执行,效果如下: (责任编辑:admin) |