合工大嵌入式系统实验报告_第1页
合工大嵌入式系统实验报告_第2页
合工大嵌入式系统实验报告_第3页
合工大嵌入式系统实验报告_第4页
合工大嵌入式系统实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

计算机与信息学院《嵌入式系统》

实验报告学生姓名:学号:专业班级:2014年6月20日实验一(1):熟悉Linux开发环境一、实验目的熟悉Linux开发环境,学会基于Mini6410的Linux开发环境的配置和使用。使用Linux的arm-linux-gcc编译,minicom串口方式下载调试二、实验内容本次实验使用Fedora9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。三、实验设备及工具(包括软件调试工具)硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤1、建立工作目录[root@zxtsmile]#mkdirhello[root@zxtsmile]#cdhello2、编写程序源代码在Linux下的文本编辑器有许多,常用的是vi和Xwindow界面下的gedit等,开发过程中推荐使用vi。Kdevelope、anjuta软件的界面与vc6.0类似,使用它们对于熟悉windows环境下开发的用户更容易上手。实际的hello.c源代码较简单,如下:#include<stdio.h>main()(printf(“helloworld\n”)}我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:[root@zxthello]#vihello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。3、编写Makefile要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,只需要敲一个“make”命令整个工程就可以实现自动编译,本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。本次实验用到的Makefile文件如下:CC=armv4l-unknown-linux-gccEXEC=helloOBJS=hello.oCFLAGS+=LDFLAGS+=-staticall:$(EXEC)$(EXEC):$(OBJS)$(CC)$(LDFLAGS)-o$@$(OBJS)clean:-rm-f$(EXEC)*.elf*.gdb*.o4、编译应用程序在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:[te咆zxthello]#makeclean5、下载调试1、进入root[Knight@localho£thello]$surootPassword:[root@lacalhosthello]#终端输入suroot,再输入密码即可。2、终端输入minicomwreLczismetominicom2.3of~txonis:xISnCompJLT-fedloniMm■-J.3卫囚囚巳P回回:5a:14.Port:/dl^vZ't'tyLJSBei出现上面的界面,点击回车,出现下图KinigilhtcSblOicallhiOiStz/horn^i/BCini^hit/lieilloElieEditwzperminall^tisHelpWeLeoiiiietominicom2.3OPTIONS:I18ncompiledonr-iar13zoos,aa;58;14.porir/usBiaPrwGGCTRL-AZfoihelponsp史七i^lkey&[toqt@FrLendlyAPM/]#[root(&FriendLyAF^M/]#|此时才能进行正常的下载。3、ctrl+a,再点击s,出现下图WeLcometoini-iii-ccmni2-3WeLcometoini-iii-ccmni2-3OPTIONS:TianCcmnpiLedonMar132008.oe:53z14aport:/dev/t:l-yusB®+-[Upload]——+PressCTRL-Azmiodem[rG«Git@FriendXyARH/]#[roQt@FriendlyARM/]#ymodem-xmodemkermiltasciinspecialkeys选择第一个zmodem,回车。出现下图kKriilgihtt/h$me/Knilgiht/heIIofileEdit^ievwZfcrminalTatsHelpwe+[Selectoneormarefilesforupload]|Directory:/rootopiir--]Co|[.designsr]Pqj[.gconT]|[-gconfd][.gnoreiie^][_gnome2private]I[-qt][r|.bashhistory[r|.bash_logout.bash_profileabashreIabashre-|.eshre.designerre.designerrctb(Escapet:oexitPSpacet:otag)[Goto][Prev][Show]FTagl[Untag][aksy]£TFU_AEforh匕7■口Ill'NEiEiBNJ.IMdRIHiriicom2.-3VTlEi』|OffLineICniigilhiit®IocaJhosts/lhome/lCiniyhit/hell&_File_EditViewErminal~r^b.s_Help时亡十-『[SelectoneormorefiLcsforupload]十IDirectory;/raotOP|F--1Co|[Hdesigner]Po|[geemf]If-gconfd][.gnomeZ][Hgriome2_private]I[-Qt][r|.bashhistory++|[r|»bashLogout|Mofileselected-enterfilename:.bashprofile|>..bashret卜Hbashrc^j.eshrej.designerre.designerrctb(Escapetoexit:PSpacetotag)[Goto][Prev][Show][Tag][Untag]iWifelMlICZTFIL-a.H下凸「ilflp[LISNQia君IXIZL]NCJFI]MzLnAiCOim旦一3i]UT1Q旦]□千干1]|■「月输入绝对路径,出现下图输入绝对路径,出现下图回车,出现下图Knfght^locLftlh^ste/Kni刍ht/he11。FieEditViewTerminalTabsFlelpwelcometomiricom2.3OPTIONS:T18HComipiledonMlar132008,OQs58:14HPort/dev/ttyuSB0TOC\o"1-5"\h\z+[zmiodenriupload-PressCTRL-Ctoquit]+|Sending:hello|sz:skipped:/home/Knight/hBllo/he11dII[roati@Fri|TrarsfercompLete|[root(3Fri|[root@Fri|READY:pressanyIke/tocontinue■■■|[root(3Fri|Offline1152008N1INORIMlinicom2.3IVT102从上图可以看出,文件未被下载,原因是mini6410板子已经有了hello可执行文件(之前下载的),若需要下载,则需要删除之前的hello文件,rmhello即可。Offline删除之后,继续下载,出现下图Knlght®lQCAlho5t:/hQme/icniyfileEdityiewZ^rminale整5HelpWelcometamlnlcom2.3OPTIONS:IlSHCompiledlonMar132QG8.GO:58:14.Port/dev/ttyUSB©+[zmiodemupload-PressCTRL-Ctoquit]+|sending:helloIBytessent:607593bps;16^31II[root®Fri|Transfercomplete[root@Frij[rooti^Fri|ready:pressanykeytocontinue...[root@Frl|[root@Fr±++[root@FriendlyARM/]^CTRL-AZ^uitielp|1152008N1|NQR|F1j.rii.3mW.:3|VT1HW|Offline下载成功。4、运行程序在电脑终端输入./hello,或者在mini6410终端输入hello都可。五、思考题Makefile是如何工作的?其中的宏定义分别是什么意思?Makefile定义了一系列规则,指明了哪些文件需要编译,哪些文件需要先编译等复杂命令。终端中只要在工作目录下输入make即可编译,输入makeclean则清除编译。makefile是一个文本文件,用于描述程序源代码之间以及程序可执行代码与源代码之间的依赖关系。关于宏定义,简单点说就是文本替换。为了方便使用不同的编译器或者编译环境以及硬件环境,一些复杂的软件使用了大量的宏定义来代替诸如“gcc这样的最基本的东西。CC:指明编译器;EXEC:指明编译后生成的可执行文件名称;OBJS:目标文件列表;CFLAGES:编译参数;LDFLAGES:链接参数;All:编译主入口;clean:清除编译。实验一(2):多线程应用程序设计一、实验目的了解多线程程序设计的基本原理学习pthread库函数的使用。二、实验内容1、读懂pthread.c的源代码,熟悉几个重要的pthread库函数的使用。掌握共享锁和信号量的使用方法。2、运行make产生pthread程序,使用minicom串口方式连接开发主机进行运行实验。三、实验设备及工具硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤使用vi编辑器或其他编辑器阅读理解源代码。运行make产生pthread可执行文件[roottaiocalhostpthread]#[rooWlocalhostpthread]#makecleanrm-fpthread*.elf*.gdb*.o[raoWLocalhostpthread]#makearm-linux-gcc-c-opthread.opthread.c□rm-Linux-gcc-Ipthread-opthreadpthread.a[rootfalocalhostpthread]#切换到minicom终端窗口。可能出现[raat(3lacalhostpthread]#minicofnDevice/dev/ttyUSESaccessfailed:Nosuchfileordirectory.[rootiaiocalhastpthread]#|拔插USB数次。4,运行pthread,观察运行结果的正确性。Krhigh1~@loCdalhoslEE/home/Knight/pthrieaci_*k|file£ditViewTerminalHelp9S2-->getput-->999waitfornotfull9S3-->getwaitfornotfull9S4-->getproducerstopoed!9S5--996-->get9S7-->get9SS-->get9S9-->get->get->get->get->get994-995--^-get997--^-getg耳--^getggg_-^getconsunerstoppedI[厂AFUM/]#I5.修改一些参数,再次运行调试,加深对多线程的理解。

实验二(1):A/D接口实验一、实验目的了解在linux环境下对S3C6410芯片的8通道10位A/D的操作与控制。二、实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。利用外部模拟信号编程实现ARM循环采集AIN0通道,并且在超级终端上显示。三、实验步骤1、阅读理解源码使用vi编辑器或其他编辑器阅读理解源代码。2、编译应用程序运行makeclean和make产生ad可执行文件ack]#*.gdbadc]#makecleanIsmakeack]#-c-□adc.□adc.c[fQat(ai.acaltiostadcj#Isadcadc.cadc.oMakefile[roottatocalhostrm-fack]#*.gdbadc]#makecleanIsmakeack]#-c-□adc.□adc.carm-linux-gcc-static-aadcadc.o[raat(aiocalhostadc]#3、下载调试换到minicom终端窗口。FileEditViewTerminalTabsHelpram/ratiBran9LrooWLocalhost[raoWlocalhostFileEditViewTerminalTabsHelpram/ratiBran9LrooWLocalhost[raoWlocalhost[root^localhost[raot@l.ocalho5t[raot^localhost[raoWlocalhostramdiskdev]#viadcdev]#dev]#dev]#dev]#dev]#makecleannake:***IJoruletomaketargetVlear'.Stop,fouhavenewmailin/var/spool/mail/root[r(»T@locaLhcstdev]#cd/roor/adc'raoWlocalhostadcl#cd/root/adc;root@localhostadc]#Isadcadc.cadc.oMakefile[root@localhostrm-fadc*.elt[root^localhostadc.cMakefile[root^localhostadc]#makeclean*.gdb*.oadc]#Isadc]#makearm-lirux-gcc-c-oadc.oadc.carm-linux-gcc-static-oadcaric.o「i-nri+Sllcmlhnc十nHr1i~IfileEditADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueadcvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueADCvalueA.nruslhi凸ViewTe90190179252952248721100fl008463563563410231G2310231023时4499498jIJT我们可以通过调节开发板上的W1可调电阻,可以看到不断变化的转换结果。四、思考题1.逐次逼近型的A/D转换器原理是什么?答:逐次逼近型的A/D转换器逐次逼近型(也称逐位比较式)的A/D转换器,应用比积分型更为广泛,其原理框图如图2.3.1所示,主要由逐次逼近寄存器SAR、D/A转换器、比较器以及时序和控制逻辑等部分组成。它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V。进行比较。A/D转换的重要指标包括哪些?答:分辨率、精度(绝对误差,相对误差,转换时间,工作温度范围)ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?2、ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?答:寄存器名地址ADC控制寄存器(ADCCON)0X58000000ADC触摸屏控制寄存器(ADCTSC)0X58000004ADC启动延时寄存器(ADCDLY)0X58000008ADCDAT00X580000CADC转换数据寄存器(ADCCON)ADCDAT10X58000010如何启动ARM开始转换A/D,有几种方式?转换开始时ARM是如何知道转换哪路通道的?如何判断转换结束?答:方式一:软件启动定义与A/D转换相关的寄存器;定义与A/D转换相关的寄存器初始化;RADCCON=0X1。方式二:硬件启动复位A/D转换器;外接用高电平触发ADCCON[0],转换开始时ARM时知道转换哪条通道的方式:通过对ADCCON[5:3]的未赋值来选择通道。实验二(2):LED驱动程序以及测试应用程序一、实验目的1、学习在LINUX下进行驱动设计的原理。2、了解LED驱动程序和应用测试程序的设计。二、实验内容1、读懂LED驱动程序,熟悉驱动程序中调用的几个函数。2、设计LED测试应用程序,控制LED灯的亮或灭。四、实验步骤1、阅读理解源码进入/code/04_leds目录,使用vi编辑器或其他编辑器阅读理解源代码。2、编译应用程序运行make产生ad可执行文件[root@zxt/]#cd/arm6410s/code/04_leds/[root@zxt03_adc]#makeArm-linux-gcc-Wall-02led.c-oled3、下载调试在测试之前请先关闭led-player,即打开mini6410开发板上友善之臂选项中的“LEDs”,在弹出的界面上单击按钮“stoptest-player”,关闭led-player。换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。[root@zxtroot]#minicom[/mnt/yaffs]mount-tnfs-onolock6:/arm6410s/host[/mnt/yaffs]cd/host/code/04_leds/[/host/code/04_leds/]./led01[/host/code/04_leds/]./led11[/host/code/04_leds/]./led21[/host/code/04_leds/]./led31[/host/code/04_leds/]./led00

五、实验结果如下图:LVTIAiLL*匚r*UMMMMl.14齐-'liWBflMK'iIMFl・EtfmflUnKKTflTiiiiwiiWf*hrwLDioVRmnagUbiBIA-!|fHWn||FWF1I六、实验感想本次实验让我进一步学习到LINUX下进行驱动设计的原理,了解了LED驱动程序和应用测试程序的设计;读懂LED驱动程序,熟悉驱动程序中调用的几个函数,设计LED测试应用程序,控制LED灯的亮或灭;掌握在Linux集成开发环境中编写和调试程序的基本过程,了解ARM芯片的基本结构和Linux内核中关于设备控制的基本原理。联系了课堂内容,加深了对Linux系统和嵌入式课程的兴趣。实验三:I2C-EEPROM编程实验一、实验目的了解I2C总线的基本原理理解如何通过I2C总线对EEPROM数据的读写。二、实验内容读懂eeprog.c的源代码,熟悉几个重要的函数的使用。三、实验设备及工具(包括软件调试工具)硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤1、阅读理解源代码使用vi编辑器或其他编辑器阅读理解源代码。2、编译应用程序运行make产生ad可执行文件计rooterocalhost:-/ireFileEditViewlerminaljlelp[roatfaiacalhostiic]流rm-fi2ctestelf*.^db*.o[raotiaiacalhastarm-linux-gcc-c-aeeprag.aeeprog.carm-linux-gcc-c-a24cXX.a24cXX.carm-linux-gcc-aiZctesteeprog.a34cXX.a[roattaiacalhostiic]#|3、下载调试换到minicom终端窗口,运行:输入./i2ctest-r则读。输入./i2ctest-w则写。现象如下图所示。

root^loca!host:~/ircfileEditViewJemninalTabsHelpWelcometominicom2.3OPTIONS:I18nCompiledonMiar132308,SO:58:14.Part/dev/ttyUSBflPressCTRL-AZfarhelponspecialkeys[root@FriendlyARM/]#runiZctest[roottaFriendlyARM/]#J_roopaE£iendIyARM/]#[roottaFriendlyARM/]I2C-24Cfl8f256bytes)ReaOTrrteProgram,ONLYFORTEST!BaseanReeprog'byStefanoBarbato(http://codesink.arg/eeprog.html)FriendlyARMComputerTech.2如9[line78][nwt@FriendlyARM/]#[root(8FriendlyAR.M/]#./i2c-wOpen/dev/12c/9withSbitinodeWritingexSQ-Sxffinto24CS80G000910052000300G000910052000300G40QQ5006S00670|0080|06900030如b@flQc0SGdS006000T00010204050607000®

def0192630+0506970809easbBeed9e6f111213141516171819lalb1cIdleIf21222324-25262728292a2b2c2d2e2f3132333435363738393a3b3c3d3e3f4142434445464748494a4b4c4d4e耳f5152535455565758595a5b5c5d&e5f616263646566&768696a6b6c6d&e6f71727374-75761178797a7b7c7d7e7f81828384-85868788898a8b8c8d8e8f919293羿95969798999a9b9c9d9e9fal3293舛3536□?□8a9aa命acsdaeafblb2b3b+b5b6b7b8b9bdbbbebdbebfclc2<3c4-c5c6c7c8c9cacbcccdcecfdld2dmd4dsd6d?d8d9dadbdedddedfele2e3e4e5e6e7e8e9eaebecedeeefflf213-f5T6f7f8f9fbfcfdfeff[rooWFriendlyAKM/]#|[root@FriendlyARH/]#./i2c-r□pen/dev/12c/0with8bitmodeReadirg256bytesfromflxfl0000ee0102@3Q40506070809如Ob0cQd0f001010111213141516171819lalblcIdleIf0020202122232425262728292a2b2c2d2e2f0030|3S3132333435363738393a3b3c3d3e3f0040404142434445464748494a4b4c4d4e4f00505Q5152535455565758595a5b5c5d5e5f0060SB616263646566676869砧6b6c6d6色6f0070707172737475767778797a7b7c7d7e7f008080818283848586878889阮8b8c8d8e8f00901909192939495969798999a9b9c9d9e9fseasaSala2a3a4a5ada?a8a9aaabacadaeaf00b0beblb2b3b4b5b6b7b8b9babbbebdbebf00C0cSclc2<3c4c5c6c7c8cacbcccdcecfSSdSdOdld2d3d4d5d6d7dSd9dadbdedddedf00eSeSele2e3e4e5e6e7e8e9eaebecedeeef00fS|fQT1f2T3T4f5f6f7fBf9fafbfcfdfeff[rnot^FriendlyARH/]#五、思考题1、I2C总线的优点是什么?答:a)硬件简单,资源消耗少,只有时钟和数据线。b)时钟同步和仲裁的实现原理也很简单,以开漏/集电极以线路逻辑简单实现。c)协议设计精巧、易用、灵活。数据,地址,指令都可传。d)使用广泛。2、I2C总线的启动信号和结束信号有什么特点、。a)启动信号。在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。b)停止信号。在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。

实验四:串行端口程序设计一、实验目的1、了解在linux环境下串行程序设计的基本方法。2、掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。3、学习使用多线程来完成串口的收发处理。二、实验内容读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。三、预备知识1、有C语言基础。2、掌握在Linux下常用编辑器的使用。3、掌握Makefile的编写和使用。4、掌握Linux下的程序编译与交叉编译过程三、实验原理异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。I第n命字箱I第n命字箱1起始最

挈叩位即E

奇也1-5.图2.2.1串行通信字符格式图2.2.1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信

线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:•奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。•帧格式错:一个字符从起始位到停止位的总位数不对。•溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM连接电缆,其连接方式如下:保群邮"松福染爆%D起收敝据R.□图2.2.2实用保群邮"松福染爆%D起收敝据R.□四、实验步骤1、阅读理解源码使用vi编辑器或其他编辑器阅读理解源代码。2、编译应用程序运行make产生term可执行文件厂root@locaFhostr^/ttysAleEditViewTerminalTabsJHelp[root(aiocalhostttysQ]#Is.Makefileterm.c[roottatocalhost诙矿)arm-linux-gcc-c-ot^nrrt/term.carmi-Unux-gcc-Ipthread-otermterm.o[roottalocalhostttysQ]#|3、下载调试切换到minicom终端窗口,运行term,观察运行结果的正确性。[roat(3FriendlyARM[]#./terff^senddata匚"123456789:^^©ABCDEFGHIJKLTlOPQRSTUVWXYZEVthekeyisqProgramerding.[root^FriendlyARM/]#[root^FriendlyARM/]#|由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试。实验五:QT编程应用一、实验目的熟悉QT编程的完整步骤,理解信号和槽机制;学会使用designer图形界面设计工具。二、实验内容本实验将介绍如何创建一个简单的Qtopia2.2.0程序,并将其集成到Qtopia2.2.0中,我们将以一个简单的计算器作为例子,演示开发一个Qtopia2.2.0应用程序的完整步骤,包括使用designer设计图形程序界面、交叉编译arm版本的程序等等,为了简单,本示例所编写的计算器只提供加法功能。三、实验设备及工具(包括软件调试工具)硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验原理什么是QtQt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司于1995年底出品,并于2008年6月17日被NOKIA公司收购,以增强NOKIA公司在跨平台软件研发方面的实力,更名为QtSoftwareo基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但是Qt具有下列优点:优良的跨平台特性:使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与运行,而不需要修改(或修改极少)源代码。会自动依平台的不同,表现平台特有的图形界面风格。Linux/X11:用于XWindowSystem(如Solaris>AIX、HP-UX、Linux、BSD)。支持KDevelop和EclipseIDE集成。Mac:用于AppleMacOSX。基于Cocoa框架。支持UniversalBinary。支持以Xcode编辑、编译和测试。Windows:用于MicrosoftWindows。支持VisualStudio集成。EmbeddedLinux:用于嵌入式Linux。可以通过编译移除不常使用的组件与功能。通过自己的视窗系统QWS,不需依赖XWindowSystem,直接写入Linux帧缓冲。可以减少存储器消耗。并提供虚拟帧缓冲QVFb,方便在桌面系统上进行嵌入式测试。WindowsCE/Mobile:用于WindowsCE。Symbian:用于SymbianplatformoMeego:用于MeegOo面向对象Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。丰富的API经过多年发展,Qt不但拥有了完善的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等等,其核心库也加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“CodeLess;CreateMore;DeployAnywhere.”。五、实验步骤下面的章节将一步步演示如何构造这个程序,在这开始之前,我们先创建一个qtopia2_apps目录,用于专门存放我们自已编写的qtopia2.2.0程序,在Linux终端中键入以下命令创建该目录:mkdir-p/opt/qtopia2_apps然后在qtopia2_apps目录下创建mycalc作为本示例的项目目录,在终端上输入如下命令:cd/opt/qtopia2_appsmkdirmycalc1、使用designer工具设计图形界面Qt/Qtopia都带有designer工具,可以设计所见即所得的图形界面,我们现在就使用designer工具来设计mycalc程序的主界面,主界面将保存成名为main_form_base.ui的ui文件,输入如下命令启动designer工具,并以ui文件名作为参数:cdmycalcs#/opt/FriendlyARM/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/designermain_form_base.ui在弹出的NewForm界面中,选择“Widget”然后点击”OK“,我们将创建一个基于QWidget的窗体而不是QDialog或其它:这时,将会显示窗口的编辑画面,我们需要修改窗口的大小,使得3.5寸的屏幕也能完整显示我们的程序,并且需要修改窗口标题。1.1在窗体上放置控件修改完窗口的属性值后,接下来我们就要在窗口上放置控件了,往窗口上放置控件的方法是:在工具栏上点击要放置的控件,再在窗口空白处点击一下即可。根据我们最初的设计思路,我们需要在窗口上放置以下控件:1)二个Button(按钮):一个是“=”,用于点击时计算结果,一个是“Close”,用于退出程序。2)三个LineEdit(单行文本框):两个用于输入要执行加法运算的数字,另一个用于显示计算结果。3)一个Label(文本标签):用于显示加号。请参考下图放置上面列出的控件,控件的工具栏图标在下图中我已经以红色方框标记出来了:放置完控件之后,我们将Label文本标签上的文字改为“+”,修改方法是双击Label文本标签,然后在弹出的编辑框上输入“+”即可;用同样的方法修改两个按钮上的文字,将两个按钮上的文字一个修改成“=”,一个修改成”Close”。修改完控件上文字之后,按照上图的位置摆放控件,在摆放之前,需要适当地调整控件的大小,调整控件大小的方法是,先单击要调整的控件,然后在控件的边框上的小黑框上单击拖动即可。1.2修改控件属性我们还需要设置一些控件的属性,主要是修改文本框的实例名称,这样在代码里面可以方便引用它们,修改方法是点击左边的文本框控件,在右边的属性窗口进行修改,请按下图的指示修改三个文本编辑控件的属性,三个文本框的实例名称分别被修改成m_x,m_y和m_result。1.3为按钮添加点击事件的处理最后还要给按钮添加点击事件的处理,我们首先需要新建两个slot函数,一个用于处理“=”按钮的点击事件,一个用于处理Close按钮的点击事件,新建slot的步骤如下:点击”Edit”菜单,选择“Slots”,将弹出如下所示的slot编辑对话框。在上面的对话框中,点击”NewSlot“按钮,然后在Slot编辑框中输入“calcButtonClicked()”。然后再点”NewSlot“按钮,并在Slot编辑框中输入“closeButtonClicked()”,如下图所示,最后点击OK保存并退出该对话框。至此,slot添加完毕,现在将slot函数与按钮的点击事件对应起来:Igy单击工具栏上的ConnectSignal/Slots图标I,然后参照下图所示进行操作,在“=”按钮上按下鼠标左键不放然后拖动到窗口的空白处放开鼠标,操作完成后将会弹出EditConnects对话框:在弹出的EditConnects对话框中,将clicked()事件连接到calcButtonClicked()slot函数。下面用同样的方法操作Close按钮。最后,如下图所示将Close按钮的clicked()事件连接到closeButtonClicked()slot函数。至此,界面设计完毕,可以进入写代码环节了。2、编写代码界面设计完,现在开始为mycalc编写代码,我们需要创建三个源代码文件,一个是头文件main_form.h,一个是源代码文件main_form.cpp,一个是main.cpp,分别在以下章节中创建这些文件:2.1编写程序入口main.cpp首先用vi编辑器创建并打开main.cpp文件:#vimain.cpp在vi编辑器中输入如下源代码内容:#include"main_form.h"#include<qtopia/qpeapplication.h>QTOPIA_ADD_APPLICATION("mycalc",TMainForm)QTOPIA_MAINmain.cpp只有4行源代码,它的实现很简单,宏展开后会是一个main函数,然后创建QPEApplication对象和TMainForm主窗口对象,最后显示主窗口并执行QApplication::exec()进入事件循环。main.cpp所用到的头文件main_form.h和TMainForm类到目前为止还不存在,我们接下来就要新建它们。编写主窗口头文件main_form.h接下来用vi编辑器创建并打开main_form.h文件:vimain_form.h在vi编辑器中输入如下源代码内容:#if!defined(__MAIN_FORM_H__)define__MAIN_FORM_H__#include"main_form_base.h"#include<qsocketnotifier.h>classTMainForm:publicTMainFormBase(Q_OBJECTpublic:TMainForm(QWidget*parent=0,constchar*name=0,WFlagsf=WType_TopLevel):TMainFormBase(parent,name,f)(}virtual~TMainForm()(}publicslots:voidcalcButtonClicked();voidcloseButtonClicked();};#endifmain_form.h文件中包含了main_form_base.h头文件,这个main_form_base.h头文件不需要用户编写,编译时由uic编译器根据main_form_base.ui文件自动生成的。在自动生成的main_form_base.h头文件,是Qt自带的uic编译器由main_form_base.ui转换成的C++程序代码,这部分代码实现了界面的基类TMainFormBase,并定义了相关的slot函数,因此,要使用我们自已用designer设计的程序界面,我们只需将主窗口TMainForm从TMainFormBase类继承即可,由于我们接下来要编写按钮功能的代码,所以我们还需要重载calcButtonClicked()和closeButtonClicked()函数。编写主窗口源文件main_form.cpp接下来用vi编辑器创建并打开main_form.cpp文件:vimain_form.cpp在vi编辑器中输入如下源代码内容:#include"main_form.h"#include<qlineedit.h>voidTMainForm::calcButtonCli

温馨提示

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

评论

0/150

提交评论