arm按键处理与qt程序

合集下载

ARM开发软件使用教程

ARM开发软件使用教程

ARM开发软件使用教程
二、工程创建
安装完成后,打开ARM开发软件,点击“新建工程”按钮。

在弹出的
对话框中,选择工程类型和工程名称,并选择工程保存的目录。

点击“确定”按钮完成工程创建。

三、代码编写
四、编译调试
五、调试工具
ARM开发软件提供了强大的调试工具,包括调试器、仿真器等。

通过
调试工具可以实时监测程序的运行状态、寄存器的值、内存的使用情况等。

在调试过程中,可以使用调试工具进行断点设置、变量监视等操作,以辅
助调试工作。

六、调试技巧
ARM开发软件的调试过程中,可以使用一些技巧提高调试效率。

比如,使用断点进行程序的停留,通过查看寄存器的变化情况来分析程序的运行
状态。

还可以使用观察窗口实时监测变量的值,通过调试输出窗口打印调
试信息等。

七、其他功能
除了上述基本功能外,ARM开发软件还提供了其他一些功能,如性能
分析、代码优化等。

性能分析功能可以帮助开发者找出程序的性能瓶颈,
对代码进行优化改进。

代码优化功能可以将代码进行优化,提高程序的执
行效率。

总结:。

Windows平台交叉编译ArmLinux平台的QT5.7库

Windows平台交叉编译ArmLinux平台的QT5.7库

Windows平台交叉编译ArmLinux平台的QT5.7库1、准备交叉编译环境环境说明:Windows 7 64位此过程需要:(1)Qt库开源代码,我使⽤的是5.7.0版本;(2)Perl语⾔环境5.12版本以上;(3)Python语⾔环境 2.7 版本以上;(4)Windows平台上的MinGW开发⼯具集(内含本地编译器gcc、g++ 4.9以上版本,⽀持c++11);(5)Windows平台上的交叉编译器arm-linux-gnueabihf(gcc、g++4.9以上版本,⽀持c++11)。

1.1、下载Qt库源代码到Qt官⽹官⽹https://www.qt.io/download-open-source/#section-2下载qt-everywhere-opensource-src-5.7.0.zip或者qt-everywhere-opensource-src-5.7.0.tar.gz。

1.2、安装Perl到Perl官⽹https:///get.html下载ActivePerl 5.12以上版本,如ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe。

安装完成后将安装⽬录⾥的bin⽬录路径添加到windows环境变量的PATH中。

1.3、安装Python到Python官⽹ https:///downloads/下载Python2.7以上版本,如python-3.5.2.exe。

安装完成后将安装⽬录⾥的bin⽬录路径添加到windows环境变量的PATH中。

1.4、MinGW开发⼯具集MinGW⼯具集内含编译器⼯具gcc、g++等,需要此⼯具集来编译Qt的qmake等开发⼯具,因为qmake这些开发⼯具是在本地windows上运⾏的。

要求4.9以上版本的gcc、g++,4.8以上就已经⽀持c++11。

32位系统可以到https:///projects/mingw/下载mingw-get-setup.exe后进⾏在线安装;64位系统到https:///projects/mingw-w64/下载mingw-w64-install.exe后进⾏在线安装。

QT5静态编译工程(arm交叉编译)

QT5静态编译工程(arm交叉编译)

QT5静态编译⼯程(arm交叉编译)1、⾸先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境2、下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz3、编译QT前需先配置交叉编译器: 解压源码后,进⼊源码的qtbase/mkspecs/linux-arm-gnueabi-g++⽬录,编辑⾥⾯的qmake.conf⽂件: 将⽂件⾥的arm-linux-gnueabi-都改为你⽤的交叉编译器(带路径,如果不带路径则需设置好PATH变量)⽐如改为:arm-linux-gnueabihf-4、⽤静态⽅式编译并安装QT 在源码⽬录下执⾏如下命令: ./configure -v -prefix /home/wch/Qt-5-arm -static -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-accessibility -no-dbus -no-openssl -no-opengl -no-glib -no-iconv -no-xcb -no-pch -no-compile-examples -no-pkg-config -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland make make install 其中/home/wch/QT-5-arm是安装⽬录,根据你的情况指定;-static是指定为静态编译;-xplatform linux-arm-gnueabi-g++是说明⽬标平台是arm,其它参数根据⾃⼰的情况⾃⾏修改,各参数的含义可以⽤./configure --help命令查看 经过上⾯三步,就在指定的/home/wch/QT-5-arm⽬录下⽣成的QT的编译环境,该环境的bin⽬录下有qmake程序。

基于Qt/Embedded的ARM—Linux应用程序研究

基于Qt/Embedded的ARM—Linux应用程序研究

3 ・ 3
维普资讯
基于 Q E bde A M—I u m edd的 R . x应用程序研 究 i n
可以对源 码 进 行 修 改 和 剪 裁 以适 应 自己特 定 的应 用 , 以 出现 了很 多 种 面 向嵌 入 式 应 用 的 Lnx 有 所 iu, R]nxU Lnx 还 有 目前 可 以支持 面 向 A M 核 的 1ju , C i , L u R Lnx操 作 系 统 A i x A M i x支 持 多种 iu M R Ln 。 R Ln u u
A M 芯片, R 带有大部分通用设备的驱动, 比如键盘、
鼠标 、S U B接 口等 , 开发者 只需专注 于开发 自己系统 特定 驱 动 , 即可使 整 个 系统正 常运行 , 大缩短 了开 大 发周 期 , 降低 了开发 的复杂度 。 3 Q/ m edd进 行应 用开发 的流 程 tE bde
线和 串口线相连, 最终在 主机上把应用程序编译成 A M格 式的二进制文件通过 网线或 串口传输到 目 R
标板 上运行 。 主机 与 目标 板 的连接 图如 图 2所 示。 开发环境 构 建 所 需 软 件 开 发 包 有 :nx内核 , lu i
l u 一2 4 2 一e s i x . . 1 l 一1—4—3 t ; R 交 叉 编 译 n m . rA a M
收 稿 日期 "06—0 —2 20 6 5
可从 网上下载。把这些软件包解压安装 , 在安装 时,
应配置两套开发环境, 一种是 A M 体系的, R 另一种 是 X 6体 系的 , 通过设 置 cngr 的参数 完成 。 8 这 of u i e后
作者简介 : 李佳林(90 6一)男 , 18 . , 在读硕士研究生 ; 主要研究方 向: 微机控制技术与应用。

Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440

Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440
软件准备:
到/downloads-cn下载最新版的软件包,当前是:
1、用于 Linux/X11 32位 的 Qt Creator 2.0.0 二进制软件包Qt SDK for Linux/X11 32-bit** (371 MB)( /qtsdk/qt-sdk-linux-x86-opensource-2010.04.bin)
-no-opengl \
-no-cups \
-no-glib \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -nomake tools -nomake docs \
# make
# make install
我下载的包解压后没有configure文件,需要运行autogen.sh后才能生成。
9、进入qt-everywhere-opensource-src-4.6.3-arm目录编译安装
首先先配置:
注:必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm ”参数, 不然安装后不在QtEmbedded-4.6.3-arm文件夹下,而是覆盖了QtEmbedded-4.6.3。
1234 dev lib opt sbin usr
Settings etc linuxrc proc sys var
bin home mnt root tmp www
5. 编译 PC 版:
进入pc目录
#./configure
# gmake
# gmake install

Windows平台交叉编译ArmLinux平台的QT5.7库

Windows平台交叉编译ArmLinux平台的QT5.7库

Windows平台交叉编译ArmLinux平台的QT5.7库我的环境:ubuntu14.04 64位1.下载Qt:上⽹搜索 qt-opensource-linux-x64-5.3.0.run下载有好多百度云盘qt-opensource--x64-5.6.1.run这个.run⽂件既包含了SDK也包含了IDE:QtCreator不⽤⾃⼰再编译好⼏个⼩时了2.安装Qt::1下载完⼀般在Download⽬录下$ cd ~/Downloads给⽂件运⾏权限$ chmod u+x qt-opensource-linux-x64-5.3.0.run运⾏./qt-opensource-linux-x64-5.6.1.run3.配置环境变量如果进⼊到QtCreator所在⽬录下是可以运⾏QtCreator的,但每次都这样会很⿇烦,可以将其加⼊到系统环境变量#vim /etc/profile 后⾯那个⽂件就是存放环境变量的,如果没有取得root权限这个⽂件是只读的,所以要想修改它就要先取得权限(我⽐较菜也⽐较懒直接先#su了,后⾯也不⽤#sudo xxx了)在⽂件中添加1 2 3 4export QTDIR=/opt/Qt5.3.0/Tools/QtCreatorexport PATH=$QTDIR/bin:$PATHexport MANPATH=$QTDIR/man:$MANPATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH其中/opt/Qt5.3.0是我的Qt的安装⽬录$ source /etc/profile 使修改的环境变量⽣效运⾏1# /opt/Qt5.3.0/Tools/QtCreator/bin/qtcreator电脑的qt creator已经安装好了,下⾯配置交叉编译环境参考友善之臂⼿册安装交叉编译⼯具Step1:1$ tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz -C /注意: C 后⾯有个空格,并且 C 是⼤写的,它是英⽂单词“ Change”的第⼀个字母,在此是改变⽬录的意思。

arm qt编译步骤

arm qt编译步骤

在使用ARM架构上编译Qt应用程序的过程中,你需要使用交叉编译工具链,该工具链能够生成适用于ARM处理器的可执行文件。

以下是通用的ARM架构上Qt 应用程序的编译步骤。

请注意,具体的步骤可能会因为Qt和工具链的版本而有所不同,因此请参考你使用的具体版本的Qt和工具链的文档。

步骤:1. 安装交叉编译工具链:首先,你需要安装适用于ARM架构的交叉编译工具链。

这个工具链包括编译器、链接器等工具,用于生成ARM平台上的可执行文件。

工具链的获取和安装方法取决于你的目标平台,你可能需要从交叉编译工具链的官方网站或者嵌入式 Linux 发行版的软件包管理器中获取。

2. 获取Qt源代码:你可以从Qt的官方网站上下载Qt的源代码。

确保下载的是适用于你目标ARM平台的版本。

3. 配置Qt编译环境:解压下载的Qt源代码,并进入源代码目录。

然后运行configure脚本,配置Qt编译环境。

在这一步,你需要指定交叉编译工具链的路径,并设置一些其他选项,如目标设备的架构和操作系统等。

请根据实际情况替换<device>和/path/to/cross-compiler。

4. 编译Qt:运行make命令,开始编译Qt。

这个过程可能会花费一段时间,具体取决于你的机器性能和编译选项。

5. 安装Qt:编译成功后,运行make install命令,将Qt安装到指定目录。

6. 编译你的Qt应用程序:现在你已经成功编译并安装了Qt库,接下来你可以使用交叉编译工具链来编译你的Qt应用程序。

这里的your_project.pro是你的Qt项目文件。

请注意,这些步骤是一个通用的概述,具体的步骤和参数可能会根据你的环境和需求而有所不同。

确保查阅Qt文档和交叉编译工具链的文档以获取更详细的信息。

qtcreator单步调试嵌入式arm程序的方法

qtcreator单步调试嵌入式arm程序的方法

qtcreator单步调试嵌入式arm程序的方法前言该方法配置步骤为:(1)安装gdb-multiarch。

(2)在qtcreator中配置gdb-multiarch。

(3)启动板子上的gdbserver。

(4)将qtcreator连接到板子上的gdbserver,启动单步调试。

1.安装gdb-multiarch使用“sudo apt-get install gdb-multiarch”命令安装gdb-multiarch。

安装完如图1所示。

图12.在qtcreator中配置gdb-multiarch在qtcreator中添加gdb-multiarch步骤如下。

在[工具]-[选项]中,在[Debuggers]页面中,添加gdb-multiarch,如图2和图3所示。

图2图3在[构建套件(kit)]页面中,添加gdb-multiarch对应的调试器,如图4所示。

图43.在板子上启动gdbserver将要调试的程序拷贝到板子上,如图5所示。

图5用如下指令,启动gdbserver。

gdbserver 172.24.119.123:8888 /tmp/only_only_test172.24.119.123是虚拟机的IP地址。

8888是选取的一个通信端口。

/tmp/only_only_test是板子上要调试的程序。

如图6所示。

图64.qtcreator连接gdbserver单步调试首先,确保虚拟机与板子能互相ping通,如图7所示。

图7然后,在虚拟机的qtcreator中,用Debug模式编译程序,如图8所示。

图8在虚拟机中的qtcreator中,点击[调试]-[开始调试]-[Attach to Running Debug Server...]。

参考图9进行设置。

图9设置中:✧本地执行档:虚拟机中待调试程序的存在位置。

✧Override server channel: IP地址为板子IP地址,端口号为gdbserver启动时指定的端口号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、使用定时器来实现自定义按键的读取/home/sprife/../example/tutorial/t13实现使用定时器来完成外部输入设备(按键)的操作。

Gameboard.h文件内容如下:#ifndef GAMEBOARD_H#define GAMEBOARD_H#include <QWidget>#include <QTimer>#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <QDebug>#include <errno.h>#include "lcdrange.h"#define BUTTONS_DEV "/dev/buttons"QT_BEGIN_NAMESPACEclass QLCDNumber;QT_END_NAMESPACEclass CannonField;class GameBoard : public QWidget{Q_OBJECTpublic:GameBoard(QWidget *parent = 0);protected slots:void fire();void hit();void missed();void newGame();void getButtonKey();private:QLCDNumber *hits;QLCDNumber *shotsLeft;CannonField *cannonField;QTimer *getKey;int buttons_fd;LCDRange *angle;LCDRange *force;};#endifGameboard.cpp文件内容如下:#include <QApplication>#include <QFont>#include <QGridLayout>#include <QHBoxLayout>#include <QLCDNumber>#include <QLabel>#include <QPushButton>#include <QVBoxLayout>#include "cannonfield.h"#include "gameboard.h"#include "lcdrange.h"GameBoard::GameBoard(QWidget *parent): QWidget(parent){if((buttons_fd=::open(BUTTONS_DEV,O_RDWR))<0){qDebug()<<"Error opening "<<BUTTONS_DEV<<"buttons device."; }else{qDebug()<<"Open"<<BUTTONS_DEV<<"successful.";}……getKey = new QTimer(this);connect(getKey,SIGNAL(timeout()),this,SLOT(getButtonKey()));……newGame();}……void GameBoard::getButtonKey(){int value;int key_value;fd_set rds;int ret;FD_ZERO(&rds);FD_SET(buttons_fd, &rds);ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL);if (ret < 0) {qDebug("select");exit(0);}if (ret == 0) {qDebug("Timeout.\n");} else if (FD_ISSET(buttons_fd, &rds)) {ret = read(buttons_fd, &key_value, sizeof(key_value));if (ret != sizeof(key_value)) {if (errno != EAGAIN)qDebug("read buttons\n");} else {//qDebug("You pressed buttons %d\n", key_value);switch(key_value){case 1:value = angle->value();value = value+1;angle->setValue(value);break;case 2:value = angle->value();value = value-1;angle->setValue(value);break;case 3:value = force->value();value = value+1;force->setValue(value);break;case 4:value = force->value();value = value-1;force->setValue(value);break;case 5:fire();}}}}该程序运行时需要加载buttons的驱动程序,其设备文件名应当为/dev/buttons2、使用多线程机制来实现输入/输出/home/sprife/../example/tutorial/t13_thread项目实现的是使用多线程方法来完成外部输入设备(按键)的操作,其中的renderthread.h与renderthread.cpp文件实现类输入设备(按键)操作的实时监控,当有按键被按下时使用emit sendkey(key_value)来发送信号。

具体代码如下:#include <QtGui>#include <math.h>#include "renderthread.h"int buttons_fd;RenderThread::RenderThread(QObject *parent): QThread(parent){//buttons device openif((buttons_fd=::open(DEV_BUTTONS, O_RDWR))<0){qDebug()<<"Error opening "<<DEV_BUTTONS<<"BUTTONS device.";}elseqDebug()<<"Open"<<DEV_BUTTONS<<"successfull.";}RenderThread::~RenderThread(){close(buttons_fd);}void RenderThread::run(){int ret;int key_value;forever {fd_set rds;FD_ZERO(&rds);FD_SET(buttons_fd, &rds);ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL);if (ret < 0) {perror("select");exit(1);}if (ret == 0) {printf("Timeout.\n");} else if (FD_ISSET(buttons_fd, &rds)) {ret = read(buttons_fd, &key_value, sizeof key_value);if (ret != sizeof key_value) {if (errno != EAGAIN)perror("read buttons\n");continue;}}emit sendKey(key_value);}}在主线程中通过启动该线程,并将该线程的触发的信号与相应的槽进行连接,完成对按键操作的相应,具体代码在gameboard.cpp文件中,文件的具体内容如下:GameBoard::GameBoard(QWidget *parent): QWidget(parent){......connect(&thread, SIGNAL(sendKey(int)),this, SLOT(readKey(int)));thread.start();……newGame();}……void GameBoard::readKey(int key_value ){if (cannonField->gameOver() || cannonField->isShooting())return;int value;switch(key_value){case 1:value = angle->value();value = value+1;angle->setValue(value);break;case 2:value = angle->value();value = value-1;angle->setValue(value);break;case 3:value = force->value();value = value+1;force->setValue(value);break;case 4:value = force->value();value = value-1;force->setValue(value);break;case 5:fire();}}程序的运行需要在程序运行前加载按钮的驱动程序,该驱动程序代码如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/poll.h>#include <asm/irq.h>#include <linux/interrupt.h>#include <linux/irq.h>#include <asm/uaccess.h>#include <asm/arch/regs-gpio.h>#include <asm/hardware.h>#define DEVICE_NAME "buttons"#define BUTTON_MAJOR 232struct button_irq_desc {int irq;int pin;int pin_setting;int number;char *name;};#if 1static struct button_irq_desc button_irqs [] = {{IRQ_EINT3, S3C2410_GPF3, S3C2410_GPF3_EINT3, 0, "KEY1"}, /* K1 */{IRQ_EINT11, S3C2410_GPG3, S3C2410_GPG3_EINT11, 1, "KEY2"}, /* K5 */{IRQ_EINT9, S3C2410_GPG1, S3C2410_GPG1_EINT9, 2, "KEY3"}, /* K4 */{IRQ_EINT5, S3C2410_GPF5, S3C2410_GPF5_EINT5, 3, "KEY4"}, /* K3 */{IRQ_EINT12, S3C2410_GPG4, S3C2410_GPG4_EINT12, 4, "KEY5"}, /* K2 */};#endifstatic DECLARE_WAIT_QUEUE_HEAD(button_waitq);static irqreturn_t buttons_interrupt(int irq, void *dev_id){struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id;int up = s3c2410_gpio_getpin(button_irqs->pin);if (up)key_values[button_irqs->number] = (button_irqs->number +1);elsekey_values[button_irqs->number] = (button_irqs->number +1) + 0x80;//save num labelkey_values[5] = button_irqs->number;ev_press = 1;if(up)//modify by lyjwake_up_interruptible(&button_waitq);return IRQ_RETVAL(IRQ_HANDLED);}static int qq2440_buttons_open(struct inode *inode, struct file *file){int i;int err;for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) { s3c2410_gpio_cfgpin(button_irqs[i].pin,button_irqs[i].pin_setting);err = request_irq(button_irqs[i].irq, buttons_interrupt, NULL,button_irqs[i].name, (void *)&button_irqs[i]);set_irq_type(button_irqs[i].irq, IRQT_BOTHEDGE);if (err)break;}if (err) {i--;for (; i >= 0; i--) {disable_irq(button_irqs[i].irq);free_irq(button_irqs[i].irq, (void *)&button_irqs[i]);}return -EBUSY;}return 0;}static int qq2440_buttons_close(struct inode *inode, struct file *file) {int i;for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) { disable_irq(button_irqs[i].irq);free_irq(button_irqs[i].irq, (void *)&button_irqs[i]);}return 0;}static int qq2440_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){unsigned long err;int i =0;if (!ev_press) {if (filp->f_flags & O_NONBLOCK)return -EAGAIN;elsewait_event_interruptible(button_waitq, ev_press);}ev_press = 0;err = copy_to_user(buff, (const void *)&(key_values[key_values[5]]), min(sizeof(key_values), count));//modify by lyjmemset((void *)key_values, 0, sizeof(key_values));return err ? -EFAULT : min(sizeof(key_values), count);}static unsigned int qq2440_buttons_poll(struct file *file,struct poll_table_struct *wait){unsigned int mask = 0;poll_wait(file, &button_waitq, wait);if (ev_press)mask |= POLLIN | POLLRDNORM;return mask;}static struct file_operations qq2440_buttons_fops = {.owner = THIS_MODULE,.open = qq2440_buttons_open,.release = qq2440_buttons_close,.read = qq2440_buttons_read,.poll = qq2440_buttons_poll,};static int __init qq2440_buttons_init(void){int ret;ret = register_chrdev(BUTTON_MAJOR, DEVICE_NAME,&qq2440_buttons_fops);if (ret < 0) {printk(DEVICE_NAME " can't register major number\n");return ret;}printk(DEVICE_NAME " initialized\n");return 0;}static void __exit qq2440_buttons_exit(void){unregister_chrdev(BUTTON_MAJOR, DEVICE_NAME);}module_init(qq2440_buttons_init);module_exit(qq2440_buttons_exit);MODULE_AUTHOR("");MODULE_DESCRIPTION("S3C2410/S3C2440 BUTTON Driver");MODULE_LICENSE("GPL");在使用该QT程序是应当先加载按钮的驱动程序,加载的设备文件名应当为/dev/buttons。

相关文档
最新文档