QT程序编写
控件
控件部分,只需要添加两个pushButton控件,一个用于打开继电器,一个用于关闭继电器,然后添加两个控件被单击时触发的clicked槽函数
槽函数
在对文件进行读写操作时,需要使用以下两个头文件
#include <unistd.h>
#include <fcntl.h>
打开继电器button的clicked槽函数
const char* filename = "/dev/relays";
int ret = 0;
int fd;
short data[1];
fd = open(filename, O_WRONLY);
if(fd < 0) {
qDebug()<<"open relyas file fail\r\n"<<endl;
close(fd);
return ;
}
data[0] = 0;
ret = write(fd, data, sizeof(data));
if (ret < 0) {
qDebug()<<"write data tp relays fail\r\n"<<endl;
close(fd);
return ;
}
close(fd);
关闭继电器button的clicked槽函数,也是类似的,只是传输给设备的数据变了
const char* filename = "/dev/relays";
int ret = 0;
int fd;
short data[1];
fd = open(filename, O_WRONLY);
if(fd < 0) {
qDebug()<<"open relyas file fail\r\n"<<endl;
close(fd);
return ;
}
data[0] = 1;
ret = write(fd, data, sizeof(data));
if (ret < 0) {
qDebug()<<"write data tp relays fail\r\n"<<endl;
close(fd);
return ;
}
close(fd);
QT程序编写完成
QT程序烧录
安装交叉编译器
IMX6ULL一款是arm架构芯片,由于我的电脑使用的是X86架构的cpu,在ubuntu上直接编译QT工程,生成的可执行文件是供x86架构的cpu使用的,无法在arm架构的cpu上运行,因此需要使用交叉编译器,将程序编译为可供arm架构运行的可执行文件。
这个轮子正点原子已经造好了,在正点原子的开发板光盘05、开发工具下,有一个交叉编译器,适配正点原子的出厂系统(实际测试后发现在驱动开发第二期视频移植的系统也能适配),将fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh放到ubhuntu下,修改脚本可执行权限:
chmod u+x fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain -4.1.15-2.1.0.sh
文件变成绿色脚本则可以执行,直接执行脚本文件,默认会装在opt上,这个目录是用来装第三方软件的。
安装完成后会出现提示:
. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
使用交叉编译器编译
执行下面这条命令使能环境变量:
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
执行完成后就会使能环境变量,这时就可以使用交叉编译器了(每次使用之前都要使能环境变量
可以使用qmake -v 查看qmake工具,如果没有使用前一段指令使能环境变量,就会找不到qmake
要进行交叉编译,首先进入qt项目文件夹,找到pro文件,用指令qmake xxx.pro,生成makefile和项目文件,如果生成成功会出现如下提示:
接下来使用make命令编译,编译完成后生成arm可执行文件,可以通过file命令查看可执行文件类型,如果生成的可执行文件是32bit ARM类型的,程序就能够放到开发板上运行。
编译完成后就可以将可执行文件放到开发板上运行。
可以编写一个shell脚本实现一键完成交叉编译器环境使能、工程清除、生成生成makefile和项目文件、编译以及文件拷贝。
vi autoCompile.sh
添加脚本内容
1 #!/bin/bash
2 source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
3 make distclean
4 qmake xxxxx.pro
5 make -j2
6 file xxxxx
7 cp ./xxxxx /home/xxx/linux/nfs -f
在开发板运行程序
需要注意的是,正点原子出厂系统在启动时,自动运行了桌面程序,在运行可我们编写的QT程序前需要先关闭这个桌面程序,否则桌面程序会与我们的QT程序抢占屏幕,导致显示出问题。
关闭默认桌面程序 killall /opt/QDesktop
如果要永久关闭桌面程序vi /etc/rc.local
,rc.local中是系统启动后默认会进行的命令和执行的应用,注释掉/opt/QDesktop >/dev/null 2>&1 &
就可以取消桌面程序开机自启动。然后执行编译好的文件,如果要默认执行用户自己的程序就按照注释掉的程序的格式,在/etc/rc.local 里添加xxx/xxx >/dev/null 2>&1 &
。