嵌入式实验报告_第1页
嵌入式实验报告_第2页
嵌入式实验报告_第3页
嵌入式实验报告_第4页
嵌入式实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重庆邮电大学研究生堂下考试答卷2013/2014学年第2学期考试科目嵌入式系统开发技术姓名李才齐年级2013级专业仪器科学与技术2014年4月28日一、【实验题目】实验题目:QT程序设计之数码管二、【实验目的】实验目的:1、学会开发板的挂载;2、掌握数码管驱动程序的编写方法;3、熟练并掌握QT程序设计的控制界面设计方法;4、学会对QT应用程序进行条件编译和下载;5、通过QT应用程序,可操控数码管进行加1计数或者减1计数。三、【实验步骤】1、先进行开发板的挂载:安装交叉编译器:将压缩包cross-422-eabi.tar.bz2W压至U/usr/local/arm目录下即可。编译UBOOT:将压

2、缩包uboot1.1.6_FORLINX_6410.tgz解压到/forlinux目录下,并用makesmdk6410_config进行配置,然后用make编译。编译Linux-2.6.28:将压缩包linux2.6.28_FORLINX_6410.tgz解压到/forlinux录下,用makemenuconfig命令,依次进入DeviceDrivers->Graphicssupport->Supportforframebufferdrivers->SelectLEDType目录下,选择液晶屏类型,分辨率为640X480O按Esc推出并保存。然后用makezImage命令编译

3、内核。在电脑上查看设备端口号,并用超级终端建立连接。在ubuntu上配置IP地址为172.24.58.11并重启开发板,在超级终端界面中快速按下空格键,输入setenvbootargs"root=/dev/nfsnfsroot=172.24.58.11:/forlinux/rootip=172.24.58.22:172.24.58.11:172.24.58.1:255.255.255.0:eth0:console=ttySAC0,115200"后按下回车,并输入saveenv保存配置。k TFiahf * o1MHUf.feAlB W sclent-IT?. ?l Sfi

4、? 17i.e t1 iiliMVorsigjnOFM - I i常 _?l _ M Imy>i 11 i_ lidnl cd fiSNUK641U * 叩eew iMiuino tvYuiroiMnii I d NIIKiEri、i曰 hrfcicj Wri t ieig 1 a Nrifd匚" x n *e.; i=-*-i新:博 轻T?罔H. ilk - L37MHshkmlbUR<W.9Mb“duh。kgm由m»i«<i”. rm重启开发板,超级终端界面显示如下即挂载成功liooiyFURLlX6410/JHIsFORLINX_6410_

5、yaffs2_ul.0JgzHV6410vaffs2ul.0.tgzIinuxrcrootFORLIX6&10/JU2、QT程序及数码管驱动程序的生成:把题目一所使用的timul和startThread两个文件夹放在共享文件夹下,分另用cp-r/mnt/hgfs/share/timu1/forlinux/root/和cp-r/mnt/hgfs/share/startThread/forlinux/root/将两个文件夹复制至I/forlinux/root/工作目录下,输入cd/forlinux/root/startThread/src进入startThread文件夹里面的src目录,使

6、用makeclean清除以前的编译信息。输入/fafish/4.4.3/builddir/sdk/qtopiacore/target/bin/qmake指定编译器SDK包中的qmake工具路径。使用geditMakefile编辑Makefile文件,在Makefile的CFLAGS和CXXFLAGS两栏的等号后面添加-fno-rtti,并保存退出。输入exportPATH=/usr/local/arm/4.3.2/bin:$PATH检查当前交叉编译工具是版本4.3.2,然后使用make生成目标文件,如图所示:'Kt8gntuMrtutf-m>chinr/hrtinu心哂拉.HTK

7、r*盯*cr»t$ubunctj-vinu«l-Fiachlft*:/forUr'iDLjro«t/it4fTThrt41f/ircr.HitHMefUfrootfritaxuuYtrtMl-MctitrteVftorttrw/rwVitarHkrircfU)r»/target/bldltloQ .h roafibuniki“一'"T*fT_nL*ire.*4H“kTL”d.".FlI*whtrwiHU)v>;r«*t;it«rtlbrte4/wc*raot*ubuptu-nKhtM£

8、;;f&rUAv>i/rMt/K«rt1hrf«d/irc4««dlt*uk“llorwtfuUmtuYtrI-iwi/ferl1Jt/r*4t/>t*rtTkrttdytrcflexportMTd/utrrocttkibunu-vlrtu-'nachtntJforHrwh/rKt/1tirtIhre*d/irc<E-LlMiH-gif/-MtU/CAtENfRAMTDflT_CUI_LIi-DQTWORK_mDT_eonf_Llt-DQT_4kMI&I/f«IrUh.4J/tl4tUdtr/h/qto

9、pl«cor«ftVdt/nlii.p«ct/qlw«/llAii*i>am-fl+<-1,-I/ftlflth/l.4.3/butld4trsdh/qtaplKor*IncludeyQtCara-I/fitftih/butIdritr/idk/qtcpt»Ear»/t«rgttnclu»/QtCdr#EyfAt*tshF立,bKjtl4Adtr/sdk/i|topticcir«/taret/Ipcludw/QrHwtprary-1/fatfIth/<.4,J/bullddlr/tdit

10、/qtafit«rgr«t/1lyet/QtMtwrki/fimvJh/f.«.1/bt1«,r/tji?中I<)4|>*for«/cftrget/tnclud*/QtCut*I/fltflth/4t4u3/biitl(Mtr/tdk/qra0l*rorff/t*rfle|-jjJe/QtGuri-i/f«tft«h/4.4.3/butIddlf/iidk/fitjw4Kw*/C4rgier/irK:lkKte-I.-I.-a,*-e zsuwp* 4 +rncmt «pip* -h*11 +-mt .

11、wrLn <mt_h!hX*.T*-Dqf/OAFJIH QQT.IHaUFOi»h/<.l/ljuUddL-/idk/qt<»pl*corf;t*r9it屈*p*c“qwi.HHun*trR中. -J. T*Mfl,4*,bwLW<ikrN±q2pLH*rEjt*E*h'iKldde/OtLorr * I /fitf Kt/4,4.J/huilcWtr /M0i/<jtDfit*CEK i/t* "t fine tWE。"。" IJJbunckl 11,由,3时1处2r tjfsrc-T.;Iw

12、arkThr«>»d.0worklhriejicl-eppI编译完成后,进入/forlinux/root/startThread/bin/文件夹会发现里边生成了一个名为startThread的文件,该文件即是QT程序操作界面的文件,用filestartThread命令查看该文件信息,会发现在第一行中间显示有ARM字样即成功编译。使用cpstartThread/forlinux/root/timu1将该文件复制至U/folinux/root目录下自己新建的timu1的文件夹中。再进入timu_1文件夹,用makeclean命令清除以前的编译文件,然后使用make编译文件

13、夹中的文件。使用ls查看该文件夹,发现生成了SEGo和SEGko两个文件,这两个文件即是数码管的驱动程序。用cpSEGoSEGko/forlinux/root/timu1将这两个文件复制到自己的文件夹下。如下图所示:fo«tfubufttu wUtuil - FH4Lhtne:: /trtudil - nachl,: /forltt<builtq Kfrdulr. sywvers 手 M .Hod. cno4xiltt d*c r atutouft rt/tlMul r 8t1胸1科七1JEu -ftod.atEp_cltent rC itr r.nFlsl zmM的看3,%(

14、1*"/啾仃3“七11|_】,工05<GkQ EEG. ffQ ltny»/rticj| L :,orllLinuM/gt/tiRu此d a.haI-R*ch1linycd «tartThrtid/raatBJlbunku-E Fti«I -Nfht»t /forllnux/r*at/edrtThr*#4ir cd btnr wttubvntu* vlr tualL-NchLnei/fcx linn,/ rgL/*T.r't Ihr.M/母七府. Ie. jfrtTkmir»t>ubuntu vtrtu*L Nch

15、i wi /fQprltnMii/rWt/»t*rtTh*t*4/bIiX cp atartThr««<t "口 iFMJK / C »C t / ttlHU l<aot*u*bunitij - vlr ta«t- f*ChtMhi / fwllftu k / fo«ttThr«»i/blnil !1.JfitBrtThr*drootftibuntu-wlrtual-wcht w; /foritfbuji/r nui/*七才 t>hre»d/btn* c4 .r ootJBUt

16、iiUfflit uvi r tuat»wch Inv: f for llniiA / r oeItThf «v4* c< 4 giWfcuMu产vtr WLp>«hlm*/HtLAugt.匚d timbi rwtiubuntu-virtiiL-neclitM'S/flLtflUK/rMbt/'tlnui* l« 1EC. ke 5£G .。*ti»rtThmytr卜ii-l- Z£*lfl*,*Forni.3、超级终端的配置:如下如所示,进入timul文件夹,使用insmod SEGko命令加载

17、新的数码管驱动程序,输入cat /proc/devices查看设备号,在下面的输出信息中找到SEG 的设备号为222。用mknod/dev/SEGc2220建立新的设备,再用ls/dev/SEG查看一下新设备是否已正确安装。并使用lsmod查看一下在线的设备信息中是否为SEG。若正确显示如下图,则表示设备已正确安装,输入calibrate进行屏幕校准。Utod/dsv/SEGU/dev/SEG«BOdcalibrate校准完成后,在超级终端输入一下配置信息演门0L29313233M35?9PaSEGHwN,震ii他皿stft»L,Mlss儡藁exportPATH='

18、/opt/Qtopia4.4.3/bin:/sbin:/usr/sbin:/bin:/usr/bin'exportQPEDIR='/opt/Qtopia4.4.3'exportQTDIR='/opt/Qtopia4.4.3'exportQT_QWS_FONTDIR=7opt/Qtopia4.4.3/lib/fonts/'exportQWS_DISPLAY='LinuxFb:mmWidth76:mmHeight44:1'exportQWS_MOUSE_PROTO='Tslib:/dev/input/event1'ex

19、portTSLIB_CALIBFILE='/etc/pointercal'exportTSLIB_CONFFILE='/usr/local/tslib/etc/ts.confexportTSLIB_CONSOLEDEVICE='none'exportTSLIB_FBDEVICE=7dev/fb0'exportTSLIB_PLUGINDIR='/usr/local/tslib/lib/ts'exportTSLIB_ROOT='/usr/local/tslib'exportTSLIB_TSDEVICE='/de

20、v/input/event1'exportTSLIB_TSEVENTTYPE='H3600'exportQT_PLUGIN_PATH='/opt/Qtopia4.4.3/plugins:/opt/Qtopia4.4.3/qt_plugins'exportLDLIBRARYPATH=7opt/Qtopia4.4.3/lib'如下如所示: lroQt®F0RHX641® /UmuIltt聆portWSJJISPLfiV-LinuxFb.Hidtht志 巴?黑前转思小片“巴产QT OHS.凰USE_PR0T0/%】ib:/&

21、"iMu5 热!ro°!鱼。旦H般/tiMill* e«D0r1 TS1IB CiStIBFILh= Vetc/pointores 1 "jll# pxporl TSL1B COHFUIE- /tisr/Iocnl/ls ullCEEro0tL1X641O /tiiQLnm TUJ-/ 阴叫 /rullM ewport TSLIB CONSOL EDtV ICE-wieF0RLIH64? ej40rt TSLIB FBDNnf 时书 r。愿g黑用”稗”吗?!! e-Port TSLIB_PLUGIHDIR='/usr/locai/1shbT SL

22、IB_ T SDEVICE /dev/iopot/eventexport JSL1B JStVtNilVPt- H3600plolrcot 乱。noneroots ORLDW0 /tiftuUH«lFOftUtM6410 7tInuiJ4 otHRNLDMU«>xparewor t QT_PLOGIN_PflTH'/opt/Qtopia4.4.3/plijni a4.4.3/qi _pIugi notfiFQlolHf 01H6&1H /I imiiUNoteFORLI«6410 /tinullttexpor1 LD_LIBRARV_PniH

23、-7opt/Qtopie4.4 J/liL ./st c»r t Ihrerni u& &MCI1配置完成后输入./startThreadpws&即可运行程序。到此实验完成。这时,开发板显示如下图所示,并且按下start和stop数码管就会开始和停止计数四、【程序分析】1、对话框主要代码分析:intfd=-1;/设置文件描述符初始值为-1ThreadDlg:ThreadDlg(QWidget*parent):QDialog(parent)fd=:open("/dev/SEG",O_RDONLY);/打开设备,若能打开,将设/备值赋给设备描述

24、符if(fd<0)qDebug()<<"Can'topen/dev/SEGn"/若无法打开设备,显示/Can'topen/dev/SEG/设置界面上按键的的名称及属性startButton=newQPushButton(tr("start");quitButton=newQPushButton(tr("quit");stopButton=newQPushButton(tr("stop");stopButton->setEnabled(false);buttonBox=newQ

25、DialogButtonBox;buttonBox->addButton(startButton,QDialogButtonBox二ActionRole);buttonBox->addButton(stopButton,QDialogButtonBox二ActionRole);buttonBox->addButton(quitButton,QDialogButtonBox二RejectRole);/设置按下按键的链接属性,使按键按下后执行相应的程序connect(startButton,SIGNAL(clicked(),this,SLOT(start();connect(qu

26、itButton,SIGNAL(clicked(),this,SLOT(close();connect(stopButton,SIGNAL(clicked(),this,SLOT(stop();/设置输出界面相关属性QVBoxLayout*mainLayout=newQVBoxLayout;mainLayout->addWidget(buttonBox);setLayout(mainLayout);setWindowTitle(tr("startThread");2、界面主函数代码分析voidWorkThread二run()/设定计数初值为0/如果计数值等于1000,

27、将值重/新赋值为0,重新开始计数/在屏幕上打印出计数结果/计数值每次自动加1jishu=0;while(true)if(jishu=1000)jishu=0;if(pnum=1)num+;printf("%dn",num);ioctl(fd,0,(num);jishu+;五、【程序结果】实验完成后,运行程序,并在开发板上点击start后,电脑超级终端上显示结果如下图所示:运行中的开发板显示情况如下图所示:按下start后,屏幕上从0开始每次加1显示,数码管上同时显示计数的情况,即从0开始依次加1。按下stop后,计数暂停,再按start后,计数继续进行。六、【总结】在这次试

28、验中,遇到了一些不太清楚的问题,通过查阅资料将其弄清楚。遇到的问题主要有一下几个:1、/fafish/4.4.3/builddir/sdk/qtopiacore/target/bin/qmake这一条命令的作用?答:这条命令主要作用是指定编译器SDK包中的qmake工具路径,确保qmake命令能够正确执行。2、exportPATH=/usr/local/arm/4.3.2/bin:$PATH这条命令是什么意思?答:检查当前交叉编译工具是版本4.3.2,确保使用正确的编译工具对程序进行编译。3、用巾lestartThread命令查看文件信息,在第一行中间显示有ARM字样才表示成功编译,这个具体A

29、RM代表什么意思?答:显示ARM表示该程序当前能够在ARM平台上运行。4、mknod命令是什么意思,如何使用?答:mknnod命令用于创建一个新的设备文件,当一个新的设备驱动完成后,要加载该设备就需要使用mknod命令。mknod/dev/SEGc2220中,/dev/SEG表示设备路径,c表示创建一个新的设备,222表示主设备号,0表示次设备号。5、屏幕校准完成后,在超级终端输入的一系列配置信息是什么意思?如:exportPATH='/opt/Qtopia4.4.3/bin:/sbin:/usr/sbin:/bin:/usr/bin'exportQPEDIR='/op

30、t/Qtopia4.4.3'答:这些表示设置环境变量,包括编译器版本,触屏环境变量,按键环境变量,库文件变量等一系列的环境变量的设定。通过这次试验,我熟练的掌握了开发板的挂载流程,掌握了数码管驱动程序如何进行编译和加载,同时掌握了QT程序设计的控制界面设计方法,并且试验了如何对QT应用程序进行条件编译和下载,最后通过QT应用程序,操控数码管进行加1计数。虽然在这个过程中遇到了一些挫折,比如开发板挂载不上,编译无法通过等问题,但经过细心检查和仔细思考后,都把这些问题解决了,让自己在实验的过程中学到了很多以前看PDF上的文档中学习不到的东西,这次的实验让我受益良多。附录(程序代码):1、s

31、tartThread主函数代码:externunsignedintnum;externintfd;externintpnum;#include"workThread.h"#include"dialog.h"#include<QTextEdit>#include<QDebug>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/ioctl.h>#include<time.h>voidWorkTh

32、read:run()jishu=0;while(true)if(jishu=1000)jishu=0;if(pnum=1)num+;printf("%dn",num);ioctl(fd,0,(num);jishu+;2、对话框代码#include<qcheckbox.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<sys/ioctl.h>#include<fcntl.h&

33、gt;#include<QDebug>#include<QtGui>#include"workThread.h"#include"dialog.h"intpnum=0;unsignedintnum=0;intfd=-1;ThreadDlg:ThreadDlg(QWidget*parent):QDialog(parent)fd=:open("/dev/SEG",O_RDONLY);/打开设备if(fd<0)qDebug()<<"Can'topen/dev/SEGn"s

34、tartButton=newQPushButton(tr("start");quitButton=newQPushButton(tr("quit");stopButton=newQPushButton(tr("stop");stopButton->setEnabled(false);buttonBox=newQDialogButtonBox;buttonBox->addButton(startButton,QDialogButtonBox二ActionRole);buttonBox->addButton(stopBu

35、tton,QDialogButtonBox二ActionRole);buttonBox->addButton(quitButton,QDialogButtonBox二RejectRole);connect(startButton,SIGNAL(clicked(),this,SLOT(start();connect(quitButton,SIGNAL(clicked(),this,SLOT(close();connect(stopButton,SIGNAL(clicked(),this,SLOT(stop();QVBoxLayout*mainLayout=newQVBoxLayout;ma

36、inLayout->addWidget(buttonBox);setLayout(mainLayout);setWindowTitle(tr("startThread");voidThreadDlg二start()pnum=1;for(inti=0;i<MAXSIZE;i+)threadVectori=newWorkThread();for(inti=0;i<MAXSIZE;i+)threadVectori->start(QThread:LowestPriority);stopButton->setEnabled(true);startButt

37、on->setEnabled(false);voidThreadDlg二stop()for(inti=0;i<MAXSIZE;i+)threadVectori->terminate();threadVectori->wait();startButton->setEnabled(true);stopButton->setEnabled(false);3、数码管驱动主程序SEGc#include<linux/module.h>#include<linux/kernel.h>#include<linux/fs.h>#includ

38、e<linux/init.h>#include<linux/miscdevice.h>#include<linux/delay.h>#include<asm/irq.h>#include<mach/hardware.h>#include<linux/cdev.h>#include<linux/device.h>#include<linux/gpio.h>#include<plat/gpio-cfg.h>#include<plat/regs-gpio.h>#include<

39、;asm/uaccess.h>#include<linux/delay.h>#include<asm/io.h>#defineSEG_MAJOR222#defineDEVICE_NAME"SEG"staticunsignedintcode=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0xFF;/串并转换voidHC595_senddata(unsignedchardat).unsignedinti;for(i=0;i<8;i+)/发送一个八位数据if(dat<<

40、i)&0x80)=0)gpio_set_value(S3c64XX_GPM(0),0);第i位为0时,Qn发送0;elsegpio_set_value(S3c64XX_GPM(0),1);否则发送1;gpio_set_value(S3c64XX_GPM(2),0);/SCK的上升沿,将数据送进移位寄存器;gpio_set_value(S3C64XX_GPM(2),1);gpio_set_value(S3c64XX_GPM(1),0);LCK的上升沿,将数据送进移位寄存器;gpio_set_value(S3c64XX_GPM(1),1);/*操控数码管,对数字进行显示*/staticvoidset_SEG_bit(unsignedlongdat)一一unsignedchartmp;num_LED,num_GPK分另对应片选与位选unsignedinti,j=1;for(i=0;i<=7;i+)tmp=readl(S3c64X

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论