嵌入式课程设计报告.docx

上传人:b****4 文档编号:4651352 上传时间:2022-12-07 格式:DOCX 页数:15 大小:329.65KB
下载 相关 举报
嵌入式课程设计报告.docx_第1页
第1页 / 共15页
嵌入式课程设计报告.docx_第2页
第2页 / 共15页
嵌入式课程设计报告.docx_第3页
第3页 / 共15页
嵌入式课程设计报告.docx_第4页
第4页 / 共15页
嵌入式课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

嵌入式课程设计报告.docx

《嵌入式课程设计报告.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

嵌入式课程设计报告.docx

嵌入式课程设计报告

 

嵌入式课程设计

---------基于QT的界面程序设计

 

学院:

信息科学与工程学院

专业:

电子信息工程

班级:

姓名:

学号:

指导老师:

日期:

2015年06月15日

 

目录

一、设计目的3

二、设计任务及要求3

三、方案设计3

1内核编译3

2文件系统4

四、搭建嵌入式系统开发环境4

1安装交叉编译器4

2安装tslib-1.4.14

3安装Qt4.75

4、qt-4.5文件系统6

五、NFS挂载6

六、QT界面设计(LED实现)7

1QTcreater安装7

2ARM平台的编译环境设置7

3创建工程7

4LED界面设计8

5主要程序代码8

七、结果12

八、总结12

1遇到的问题及解决方法12

2实验心得感想13

基于QT界面的程序设计

一、设计目的

1.进一步巩固嵌入式系统的基本知识;

2.掌握嵌入式应用系统的基本结构;

3.掌握嵌入式系统开发环境建立和使用;

4.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;

5.学会查阅有关专业资料及设计手册;

6.QT界面编程。

二、设计任务及要求

1.掌握嵌入式系统开发环境建立和使用;

2.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;

3、QT在PC上的安装、

4、QT在开发板上的移植

5、QT界面程序设计

6.编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;

7.绘制有关图纸

三、方案设计

1内核编译

两种方案;一:

静态编译内核,二:

动态编译内核。

用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活,本次选用静态编译。

2文件系统

在嵌入式linux系统中,编译的环境和运行的环境不一样,所以我们需要交叉编译工具,一般是在PC上面运行交叉编译工具编译好程序,然后再烧写到目标板的flash上,对于应用程序,我们需要频繁的调试,如果每次都需要烧写,那一定是一件很烦的事情,因此我们此次尝试通过NFS文件系统来调试程序的方法,减少调试工作量。

四、搭建嵌入式系统开发环境

1安装交叉编译器

(1)解压EABI-4.3.3_EmbedSky_20091210.tar.bz2

tar-xvfEABI-4.3.3_EmbedSky_20091210.tar.bz2

(2)设置环境变量

exportPATH=/opt/EmbedSky/4.3.3/bin:

$PATH

(3).永久设置环境变量

vi/etc/profile在最后添加一行

exportPATH=/opt/EmbedSky/4.3.3/bin:

$PATH

2安装tslib-1.4.1

(1)解压tslib-1.4.tar.gz

tar-zxvftslib-1.4.tar.gz-C/

(2)创建目录

mkdir/optEmbedSky/tslib_install

(3)生成configure

./autogen.sh

(4)配置

./configure--prefix=/opt/EmbedSky/tslib_install--host=arm-linuxac_cv_func_malloc_0_nonnull=yes

(5)编译(大概20~30分钟)

make

(6)安装

makeinstall

如果以上步骤没错,则可以在/opt/tslib_install下出现我们需要的库文件,这些库文件我们移植时会用到。

3安装Qt4.7

(1)解压qt-everywhere-opensource-src-4.7.0.tar.gz

tar-zxvfqt-everywhere-opensource-src-4.7.0.tar.gz-C/

(2)创建目录,把QT4.7安装在qt-4.7.0-arm目录下

mkdir/opt/qtEmbedded/qt-4.7.0-arm

(3)配置configure

./configure-embeddedarm-release-opensource-silent-qt-libpng-qt-libjpeg-qt-libmng-qt-libtiff-no-multimedia-makelibs-nomaketools-nomakeexamples-nomakedocs-nomakedemos-qt-kbd-linuxinput-qt-mouse-tslib-xplatformqws/linux-arm-g++-little-endian-qt-freetype-depths16,18-qt-gfx-linuxfb-no-qt3support-no-nis-no-cups-no-iconv-no-dbus-no-openssl-no-fast-no-accessibility-no-scripttools-no-mmx-no-multimedia-svg-no-webkit-no-3dnow-no-sse-no-sse2-no-gfx-transformed-no-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-no-glib-prefix/opt/EmbedSky/qt-4.7-arm/-I/opt/EmbedSky/tslib_install/include-L/opt/EmbedSky/tslib_install/lib

(4)编译(大概2.5小时)

make

(5)安装

makeinstall

安装成功后/opt/QtEmbedded-4.7.0-arm/bin里面有qmake,稍后会用到

4、qt-4.5文件系统

(1)将root_qt_4.5_2.6.30.4_20100601.tar.bz2解压到根下

(2)超级用户下修改文件权限

Chmod–R777/opt/EmbedSky/root_nfs

(3)拷贝字体文件

解压:

tar-xvf/opt/wqy-zenhei-0.8.38-1.tar.gz-C/opt/EmbedSky

(3)Qt4.7相关文件

mkdir-p/opt/EmbedSky/root_nfs/opt/qt_4.7

cp-rf/opt/EmbedSky/qt-4.7-arm/lib/opt/EmbedSky/root_nfs/opt/qt_4.7

cp-rf/opt/EmbedSky/qt-4.7-arm/plugins/opt/EmbedSky/root_nfs/opt/qt_4.7

mkdir/opt/EmbedSky/root_nfs/opt/qt-4.7/bin

拷贝自己的可执行文件到bin/opt/EmbedSky/root_nfs/opt/qt-4.7/bin

(4)修改环境profile

vi/etc/profile

exportsetQTDIR=/opt/qt-4.7

exportsetQPEDIR=/opt/qt-4.7

五、NFS挂载

参考实验指导书二,在CentOS下安装、配置nfs服务

安装NFS

安装nfs服务器端:

$yuminstallnfs-kernel-server

3、配置/etc/exports

NFS允许挂载的目录及权限在文件/etc/exports中进行了定义。

例如,我们要将根目录下的/opt/EmbedSky/rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:

/opt/EmbedSky/rootfs*(rw,sync,no_root_squash)

4、拷贝文件

将tslib_install/lib/下的文件及bin下tslib提供的触摸屏校准程序ts_calibrate

和仅利用qt-4.7生成的lib和plugins文件。

拷贝到共享目录/source/rootfs下

5文件系统挂载

(1)设置虚拟机的IP地址

(2)设置参数

超级终端命令端口下,USB线,网线,和串口连接正常,启动开发板,进入调试。

依次设置PC机ip:

192.168.1.7和开发板IP:

192.168.1.6。

保存并退出

(3)nfs启动

选择8进入系统,成功后,超级终端命令端口输入ls查看开发板文件系统中是否有先前拷贝的文件,有即挂载成功。

六、QT界面设计(LED实现)

1下载QTcreater解压安装

【注:

新版下载文件格式为.run文件,需要更改文件权限才能正常安装使用】

2ARM平台的编译环境设置

(1)添加arm的环境

3创建工程

(1)创建工程

打开qtcreator后,创建一个工程,选择QTGuiApplication或者QTWidgetsApplication

(3)手动arm和pc机环境下的qmake

4LED界面设计(LED1~4分别控制等0~1,CLOSE用于熄灭全部的灯)

5主要程序代码

(1)程序初始化

Led.h

#ifndefLED_H

#defineLED_H

#include

#include

namespaceUi{

classLED;

}

classLED:

publicQMainWindow

{

Q_OBJECT

public:

explicitLED(QWidget*parent=0);

~LED();

publicslots:

voidL1();

voidL2();

voidL3();

voidL4();

voidCL();

private:

Ui:

:

LED*ui;

intled1,led2,led3,led4;

};

#endif//LED_H

Led.cpp

#include"led.h"

#include"ui_led.h"

#include

#include

#include

#include

#include

#include

#include

#include

intfd;

LED:

:

LED(QWidget*parent):

QMainWindow(parent),

ui(newUi:

:

LED)

{

ui->setupUi(this);

intscreenWidth=QDirectPainter:

:

screenWidth();

intscreenHeight=QDirectPainter:

:

screenHeight();

this->resize(screenWidth,screenHeight);

connect(ui->pushButton_LED1,SIGNAL(clicked()),this,SLOT(L1()));//定义信号获取和控制程序代码

connect(ui->pushButton_LED2,SIGNAL(clicked()),this,SLOT(L2()));

connect(ui->pushButton_LED3,SIGNAL(clicked()),this,SLOT(L3()));

connect(ui->pushButton_LED4,SIGNAL(clicked()),this,SLOT(L4()));

connect(ui->pushButton_CLOSE,SIGNAL(clicked()),this,SLOT(CL()));

led1=0;//软件清0,熄灭所有LED灯

led2=0;

led3=0;

led4=0;

fd=open("/dev/GPIO-Control",0);//定义io端口

if(fd<0)

{

perror("opendeviceledsfail");

exit

(1);

}

}

 

LED:

:

~LED()

{

deleteui;

}

voidLED:

:

L1()//LED控制程序

{

led1++;

if(led1==1)//检测到有触屏信号L1输入全部灯熄灭,再将L1点亮

{

ioctl(fd,0,0);

ioctl(fd,0,1);

ioctl(fd,0,2);

ioctl(fd,0,3);

ioctl(fd,1,0);

qDebug()<<"led1on";

}

elseif(led1==2)

{

led1=0;

ioctl(fd,0,0);

qDebug()<<"led1off";

}

}

voidLED:

:

L2()//检测到有触屏信号L2入全部灯熄灭,再将L2亮

{

led2++;

if(led2==1)

{

ioctl(fd,1,1);

qDebug()<<"led2on";

}

elseif(led2==2)

{

led2=0;

ioctl(fd,0,1);

qDebug()<<"led2off";

}

}

voidLED:

:

L3()//检测到有触屏信号L3入全部灯熄灭,再将L3亮

{

led3++;

if(led3==1)

{

ioctl(fd,1,2);

qDebug()<<"led3on";

}

elseif(led3==2)

{

led3=0;

ioctl(fd,0,2);

qDebug()<<"led3off";

}

}

voidLED:

:

L4()//检测到有触屏信号L4入全部灯熄灭,再将L4点亮

{

led4++;

if(led4==1)

{

ioctl(fd,1,3);

qDebug()<<"led4on";

}

elseif(led4==2)

{

led4=0;

ioctl(fd,0,3);

qDebug()<<"led4off";

}

}

voidLED:

:

CL()//清除键,当所有灯点亮时,该键有效,摁下全部灯灭

{

if((led1==1)&&(led2==1)&&(led3==1)&&(led4==1))

{ioctl(fd,0,0);

ioctl(fd,0,1);

ioctl(fd,0,2);

ioctl(fd,0,3);

qDebug()<<"allledoff";

}

//else

//{ioctl(fd,1,0);

//ioctl(fd,1,1);

//ioctl(fd,1,2);

//ioctl(fd,1,3);

//qDebug()<<"allledon";

//}

}

程序构建调试完毕后,进入终端将源代码编译,将可执行文件拷贝到source下的rootfs中。

在超级终端下调试:

(1)到校准文件的路径下执行./ts_calibtate

(2)输入ps命令,把helloworld程序kill

(3)执行./zgh–qws–fnHHH,成功后,能弹出自己设计的界面,按键能按照之前设计的运行。

七、结果

成功后,能弹出自己设计的界面,按键能按照之前设计的运行。

LED1:

按一次点亮LED0,再按一次熄灭LED2:

按一次点亮LED1,再按一次熄灭

LED3:

按一次点亮LED2,再按一次熄灭LED4:

按一次点亮LED3,再按一次熄灭

CLOSE:

当全部灯亮的时候,按一次熄灭全部的灯。

八、总结

1遇到的问题及解决方法

错误1不同操作系统下指令的差别,之前Ubuntu使用apt-get的指令在centOS中需要使用yum命令,个别指令存在差别

错误2 configure:

 error:

 no acceptable C compiler found in $PATH

yum -y install gcc gcc-c++ gdb问题解决。

错误3 makecommandnotfound

命令yuminstallmake问题解决。

错误4:

install-fixincludeserror1…..

命令makeclean然后make问题解决。

错误5:

gnu/stubs-32.hnosuchfileordirectory

命令yuminstallglibc-devel.i686问题解决

错误6不同操作系统下指令的差别,之前Ubuntu使用apt-get的指令在centOS中需要使用yum命令,个别指令存在差别

错误7:

ft2build.h:

Nosuchfileordirectory

命令yuminstallfontconfig-devel问题解决。

错误8:

 BasicXLibfunctionalitytestfailed!

YoumightneedtomodifytheincludeandlibrarysearchpathsbyeditingQMAKE_INCDIR_X11andQMAKE_LIBDIR_X11

命令:

执行yuminstalllibX*,直接安装所有libX开头的包。

程序编译错误:

 错误9:

cannotfindlglerror:

collect2:

ldreturned1exitstatus

命令yuminstallmesa-libGL-develmesa-libGLU-devel(2个opengl核心库)

命令yuminstallfreeglut-devel(OpenGLUtilityToolKit)

2实验心得感想

通过本次实验,更加深入的了解了嵌入式程序开发的流程和方法。

学习在搭建交叉编译环境的基础上对开发板进行NFS挂载调试。

理论学习和实际操作存在着巨大差距,在课本上诸多的环境设置都是理想的,但一旦自己动手却总是一波三折,由于是用自己新装的centOS系统,因此总是会缺少各种设置或者编译器版本不够诸如此类的问题,但可喜的是,在同学帮助下和查阅资料的情况下,诸多问题迎刃而解,并最终成功进入编写程序调试设备的阶段。

在尝试解决各类问题的同时,自己也从中学到更多的知识,更加输入的了解其环境搭建过程。

总之,此次课程设计收获颇丰。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1