2015-2016嵌入式系统设计与开发实验指导书_第1页
2015-2016嵌入式系统设计与开发实验指导书_第2页
2015-2016嵌入式系统设计与开发实验指导书_第3页
2015-2016嵌入式系统设计与开发实验指导书_第4页
2015-2016嵌入式系统设计与开发实验指导书_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统设计与开发实验课程指导书适用专业计科、软件修订李社蕾、郭海智审定郭亮三亚学院理工学院2015年8月目录一、课程基本信息3二、实验教学的总体目的和要求3三、实验教学内容3实验项目一多文件MAKEFILE编写实验5实验项目二主机开发环境搭建8实验项目三嵌入式开发环境搭建12实验项目四文件读写及上锁17实验项目五嵌入式LINUX串口应用编程25实验项目六管道通信实验34实验项目七多线程实验40实验项目八使用QT编写“HELLO,WORLD”程序47四、考核方式59五、推荐实验教材和教学参考书60嵌入式系统设计与开发实验课程指导书一、课程基本信息课程编码课程名称嵌入式系统设计与开发英文名称EMBEDDEDSYSTEMDESIGNANDDEVELOPMENT实验总学时16适用专业计算机科学与技术、软件工程课程类别专业选修课先修课程C语言程序设计、嵌入式原理与接口技术等二、实验教学的总体目的和要求加深对嵌入式系统硬件结构,硬件驱动层软件的开发,嵌入式系统的操作系统的理解,掌握嵌入式系统的开发调试软件的使用,培养学生嵌入式系统的应用开发的能力。增强学学生动手能力和创新能力。三、实验教学内容实验项目与学时一览表项目序号实验项目名称实验项目类别实验要求实验学时1多文件MAKEFILE编写实验必做实验通过对包含多文件的MAKEFILE的编写,熟练VI编辑器的使用,熟悉各种形式的MAKEFILE,并进一步加深对MAKEFILE中用户自定义变量、自动变量以及预定义变量的理解22主机开发环境搭建必做实验了解虚拟机与LINUX操作系统的基础知识,熟悉虚拟机的安装与设置,掌握在VMWARE上安装REDHATLINUX90,掌握在LINUX环境下交叉编译器的使用,超级终端的使用以及NFS配置23嵌入式开发环境搭建必做实验掌握嵌入式开发流程,通过移植LINUX内核,熟悉嵌入式开发环境的搭建和LINUX内核的编译配置。通过创建文件系统,熟练掌握使用BUSYBOX创建文件系统和如何创建文件系统映像文件24文件读写及上锁必做实验通过编写文件读写及上锁的程序,进一步熟悉LINUX中文件I/O相关的应用开发,并且熟练掌握OPEN、READ、WRITE、FCNTL等函数的使用25嵌入式LINUX串口应用编程必做实验通过编写多路复用式串口读写,进一步理解多路复用函数的用法,同时更加熟练地掌握LINUX设备文件的读写方法26管道通信实验必做实验通过编写有名管道多路通信实验,进一步掌握管道的创建、读写等操作,同时复习使用SELECT函数实现管道的通信27多线程实验必做实验“生产者消费者”问题是一个著名的同时性编程问题的集合。通过学习经典的“生产者消费者”问题的实验,读者可以进一步熟悉LINUX中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题28使用QT编写“HELLO,WORLD”程序必做实验通过编写一个跳动的“HELLO,WORLD”字符串,进一步熟悉嵌入式QT的开发过程2合计16实验项目一多文件MAKEFILE编写实验学时2实验要求(选做/必做)必做实验地点实验室6B105一、实验目的1、通过对编写及调试程序简单程序,熟练掌握VI编辑器的使用,2、熟练掌握GCC编译器GDB调试器及MAKE工程编译器的使用。二、实验条件实验中心拥有针对该课程的实验室一间(6B105),可同时容纳10个组进行实验。安装LINUX虚拟平台的电脑10台,ARM9实验开发平台10套。三、实验性质设计性四、实验内容1、在LINUX字符环境下,练习使用基本的文件操作命令CPRMMVLSMKDIRCLEARPWDCHMOD等命令;2、在同一目录下用VI编辑MAKEFILE,然后用MAKE验证所编写的MAKEFILE是否正确。五、实验设备安装LINUX虚拟平台的计算机,ARM教学实验平台。六、实验步骤1)编辑HELLOC打开LINUX虚拟机,CD/HOME进入/HOME目录,MKDIRHELLO目录HELLOVIHELLOC打开VI编辑器,编辑HELLOC输入“I”进入编辑状态编写一个1210的程序按“ESC”,输入“”保存退出2)利用GCC编译生成可执行文件HELLOGCCHELLOCOHELLO/HELLO;输出结果3利用GDB调试GCCGHELLOCOHELLOGDBHELLOL查看源代码B3设置断点C继续运行4编写MAKEFILE(在/HOME/MAKETEST)在/HOME/MAKETEST目录下,输入附录中5个文件,VIMAKEFILE打开VI编辑器,编辑MAKEFILEMAKE生成可执行文件MAIN/MAIN;输出结果七、思考题1、什么是MAKEFILE为什么编写MAKEFIE附录MAKEFILE所需代码/MAINC/INCLUDE“MYTOOL1H“INCLUDE“MYTOOL2H“INTMAINMYTOOL1_PRINT“HELLOMYTOOL1“MYTOOL2_PRINT“HELLOMYTOOL2“RETURN0/MYTOOL1C/INCLUDE“MYTOOL1H“INCLUDEVOIDMYTOOL1_PRINTCHARPRINT_STRPRINTF“THISISMYTOOL1PRINTS“,PRINT_STR/MYTOOL1H/IFNDEF_MYTOOL_1_HDEFINE_MYTOOL_1_HVOIDMYTOOL1_PRINTCHARPRINT_STRENDIF/MYTOOL2C/INCLUDE“MYTOOL2H“INCLUDEVOIDMYTOOL2_PRINTCHARPRINT_STRPRINTF“THISISMYTOOL2PRINTS“,PRINT_STR/MYTOOL2H/IFNDEF_MYTOOL_2_HDEFINE_MYTOOL_2_HVOIDMYTOOL2_PRINTCHARPRINT_STRENDIF参考MAKEFILEMAINMAINOMYTOOL1OMYTOOL2OGCCOMAINMAINOMYTOOL1OMYTOOL2OMAINOMAINCMYTOOL1HMYTOOL2HGCCCMAINCMYTOOL1OMYTOOL1CMYTOOL1HGCCCMYTOOL1CMYTOOL2OMYTOOL2CMYTOOL2HGCCCMYTOOL2CCLEANRMFOMAIN实验项目二主机开发环境搭建学时2实验要求(选做/必做)必做实验地点实验室6B105一、实验目的1、了解虚拟机与LINUX操作系统的基础知识;2、熟悉虚拟机的安装与设置;3、掌握在VMWARE上安装REDHATLINUX90;4、掌握在LINUX环境下交叉编译器的使用,超级终端的使用以及NFS配置。二、实验条件实验中心拥有针对该课程的实验室一间(6B105),可同时容纳10个组进行实验。安装LINUX虚拟平台的电脑10台,ARM9实验开发平台10套。三、实验性质设计性四、实验内容1、开发环境LINUXMINICOM2、LINUX定制或全部安装。下载安装交叉编译器3、设置WINDOWS下超级终端。4、配置网络主要是配置NFS,需关闭IPTABLES。五、实验设备安装LINUX虚拟平台的计算机,ARM教学实验平台。六、实验步骤1、安装交叉编译器点击“VM”,“SETTING”打开对话框,选择OPTION,SHAREDFOLDERS右上方,选择“ALWAYSENABLED,然后点击“ADD”打开对话框选择共享目录,然后点NEXT,FINISHED,完成。打开共享目录CD/MNT/HGFS;即可看到共享目录。将共享目录中的交叉编译压缩包拷贝到,LINUX目录下CPARMLINUXGCC432TGZ/HOME/;(以ARMLINUXGCC432TGZ为例)2、安装交叉编译器例ARMLINUXGCC432TGZ1)TARXZFVARMLINUXGCC432TGZC/2)VI/ETC/PROFILE在PROFILE中添加环境变量EXPORTPATH/USR/LOCAL/ARM/432/BINPATH3)最后,是刚才添加的环境变量生效SOURCE/ETC/PROFILE3、编写HELLOC程序,并进行交叉编译生成嵌入式LINUX的可执行文件HELLO。ARMLINUXGCCHELLOCOHELLO4、打开超级终端5、配置NFS(1)关闭防火墙/ETC/INITD/IPTABLESSTOP(2)启动PORTMAP服务SERVICEPORTMAPRESTART(3)启动NFS服务SERVICENFSRESTART(4)将宿主机(PC机)和目标机(实验箱)配置在同一网段(5)两边PING通(6)客户端挂载NFS服务器中的1921681108/HOME/HELLO目录MOUNT1921681108/HOME/HELLO/MNT6、复制程序并运行CPHELLO/TMPCD/TMP/HELLO;输出结果注如果NFS配置不通,则通过超级终端发送发送步骤如下1、将要发送文件放入WINDOWS系统的共享文件夹2、打开超级终端3、点击发送,打开“发送文件”对话框4、点击“浏览”找到要发送的文件,点击发送即可。)七、思考题1、什么是交叉编译为什么要交叉编译实验项目三嵌入式开发环境搭建学时2实验要求(选做/必做)必做实验地点实验室6B105一、实验目的1、了解VIVIBOOTLOADER;2、学习烧写NANDFLASH;3、掌握交叉编译环境的使用;4、掌握LINUX内核的配置和裁剪。二、实验条件实验中心拥有针对该课程的实验室一间(6B105),可同时容纳10个组进行实验。安装LINUX虚拟平台的电脑10台,ARM9实验开发平台10套。三、实验性质设计性四、实验内容1、安装VIVI,将其烧写到NANDFLASH;2、掌握交叉编译环境的使用;3、配置LINUX内核,编译并下载内核到NANDFLASH;4、烧写根文件系统。五、实验设备安装LINUX虚拟平台的计算机,ARM教学实验平台。六、实验步骤1、VIVI烧写1)通过简易仿真器将并口和实验箱的JTAG口连接起来,简易仿真器选择JP5口(同JTAG板平行的接口)通过20芯连接线对NANDFLASH进行烧写;2)将启动模式选择开关SEB1拨为1100,开启实验箱。3)“D嵌入式文件LINUX软件开发光盘44V20TOOLS”目录下的JTAG文件夹复制到WINDOWSXP下的目录,并根据文件夹中简易JTAG下载器使用说明DOC文档的要求安装该设备;4)将D嵌入式文件LINUX软件开发光盘44V20LINUX24IMAGE目录下的VIVI_24拷贝到SJF2410的同一目录下;5)进入WINDOWSXP命令窗口,进入SJF2410所在目录执行以下命令6)选择0SMCPROG7输入烧写块为08)等待烧写结束,输入数字“2”;9)完成后将实验系统断电,取下JTAG连接线,将实验箱的串口1与PC机串口相连,打开超级终端,重启试验系统,串口会出现如下提示“PRESSRETURNTOSTARTTHELINUXNOW,ANYOTHERKEYFORVIVI”2、编译LINUX内核1)进入内核原代码的目录”/USR/S3C2410/KERNEL”源代码在D嵌入式文件LINUX软件开发光盘44V20LINUX26后输入以下命令,MAKEMENUCONFIGXCONFIG2进入MENUCONFIG配置界面后,上下移动光标,根据实际需要配置自己的选项,选择LOADEDANALERNATECONFIGURATIONFILE,回车后,在弹出的对话框中输入配置文件路径ARCH/ARM/DEFCONFIG/SMDK2410;之后推出编辑界面,选择保存设置。1)在内核源代码的目录下,输入一下命令开始编译内核MAKEDEP;MAKEZIMAGE2)内核编译生成的二进制文件为ARCH/ARM/BOOT/ZIMAGE3、烧写KERNEL映像至实验箱的NANDFLASH。下面烧写ZIMAGE至NANDFLASH上,并在实验箱上试运行。1)确保启动模式开关SWB1的状态为1ON2ON3OFF4OFF;2)将实验箱上的串行口1与PC机上的串口相连;3)配置PC机上串口中断程序,将波特率设置为115200,无硬件流控,无校验位4)开启实验箱,上次实验已经烧写了VIVI开始运行,按空格键出现ZYETARM_24提示符;5)ZYETARM_24提示符输入以下命令将内核烧写到NANDFLASH上;ZYETARM_24LOADFLASHKERMELX输入完毕后,启动终端的XMODEM协议传送发货光盘的LINUX26/IMAGE/ZIMAGE至实验箱6)在ZYETARM_24提示符下输入以下命令将LINUX文件系统烧写到NANDFLASH上;ZYETARM_24LOADFLASHROOTX输入完毕后,启动终端的XMODEM协议传送的LINUX26/INAGE/ROOTCRAMFS至实验箱。7)烧写完毕后,复位实验箱,出现VIVI后直接回车启动LINUX,此时可以通过串口终端操作一个我们自己配置的嵌入式LINUX操作系统。七、思考题1)运行LINUX,并在提示环境下输入LINUX常见命令,指出实验箱上运行的LINUX命令和PC机上运行的LINUX的异同点。实验项目四文件读写及上锁学时2实验要求(选做/必做)必做实验地点实验室6B105一、实验目的1、通过编写文件读写及上锁的程序,2、熟悉LINUX中文件I/O相关的应用开发;3、熟练掌握OPEN、READ、WRITE、FCNTL等函数的使用。二、实验条件实验中心拥有针对该课程的实验室一间(6B105),可同时容纳10个组进行实验。安装LINUX虚拟平台的电脑10台,ARM9实验开发平台10套。三、实验性质设计性四、实验内容1、在LINUX中FIFO是一种进程间的管道通信机制,LINUX支持完整的FIFO通信机制。通过使用文件操作,仿真FIFO(先进先出)结构及生产者消费者运行模型。2、本实验中需要打开两个虚拟终端,分别运行生产者程序(PRODUCER)和消费者程序(CUSTOMER),此时两个进程同时对同一个文件进行读写操作。因为这个文件是临界资源,所以可以使用文件锁机制来保证两个进程对文件的访问都是原子操作。3、先启动生产者进程,它负责创建仿真FIFO结构的文件(其实是一个普通文件)并投入生产,就是按照给定的时间间隔,向FIFO文件写入自动生成的字符(在程序中用宏定义选择使用数字还是使用英文字符),生产周期及要生产的资源数通过参数传递给进程(默认生产周期为1S,要生产的资源总数为10个字符,显然默认生产总时间为10S)。4、后启动的消费者进程按照给定的数目进行消费,首先从文件中读取相应数目的字符并在屏幕上显示,然后从文件中删除刚才消费过的数据。为了仿真FIFO结构,此时需要使用两次复制来实现文件内容的偏移。每次消费的资源数通过参数传递给进程,默认值为10个字符。五、实验设备安装LINUX虚拟平台的计算机,ARM教学实验平台。六、实验步骤1、编写代码。(LOCK_SETC见附件)本实验中的生产者程序的源代码如下所示,LOCK_SET函数见附录/PRODUCERC/INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDE“LOCK_SETC“/LOCK_SETC见附件DEFINEMAXLEN10/缓冲区大小最大值/DEFINEALPHABET1/表示使用英文字符/DEFINEALPHABET_STARTA/头一个字符,可以用A/DEFINECOUNT_OF_ALPHABET26/字母字符的个数/DEFINEDIGIT2/表示使用数字字符/DEFINEDIGIT_START0/头一个字符/DEFINECOUNT_OF_DIGIT10/数字字符的个数/DEFINESIGN_TYPEALPHABET/本实例选用英文字符/CONSTCHARFIFO_FILE“/MYFIFO“/仿真FIFO文件名/CHARBUFFMAXLEN/缓冲区/功能生产一个字符并写入到仿真FIFO文件中/INTPRODUCTVOIDINTFDUNSIGNEDINTSIGN_TYPE,SIGN_START,SIGN_COUNT,SIZESTATICUNSIGNEDINTCOUNTER0/打开仿真FIFO文件/IFFDOPENFIFO_FILE,O_CREAT|O_RDWR|O_APPEND,06441/第一个参数表示生产周期/SSCANFARGV1,“D“,IFARGC2/第二个参数表示需要生产的资源数/SSCANFARGV2,“D“,WHILETIME_LIFEIFPRODUCTINCLUDEINCLUDEINCLUDEINCLUDE“LOCK_SETC“/LOCK_SETC见附件DEFINEMAX_FILE_SIZE10010241024/100M/CONSTCHARFIFO_FILE“/MYFIFO“/仿真FIFO文件名/CONSTCHARTMP_FILE“/TMP“/临时文件名/资源消费函数/INTCUSTOMINGCONSTCHARMYFIFO,INTNEEDINTFDCHARBUFFINTCOUNTER0IFFDOPENMYFIFO,O_RDONLY1/第一个参数指定需要消费的资源数目,默认值为10/SSCANFARGV1,“D“,IFCUSTOMER_CAPACITY0CUSTOMCUSTOMER_CAPACITYEXITEXIT_SUCCESS2、先在宿主机上编译该程序,如下所示MAKECLEANMAKE3、在确保没有编译错误后,交叉编译该程序,此时需要修改MAKEFILE中的变量。CCARMLINUXGCC/修改MAKEFILE中的编译器/MAKECLEANMAKE4、将生成的可执行程序下载到目标板上运行。七、实验报告1、列出调试通过程序的清单,分析运行结果。2、给出必要的程序设计思路和方法(或列出流程图)。3、总结上机调试过程中所遇到的问题和解决方法及感想。八、思考题1、FCNTL函数,除了加锁、解锁之外含有什么功能,请详细描述。附录/LOCK_SETC/INTLOCK_SETINTFD,INTTYPESTRUCTFLOCKOLD_LOCK,LOCKLOCKL_WHENCESEEK_SETLOCKL_START0LOCKL_LEN0LOCKL_TYPETYPELOCKL_PID1/判断文件是否可以上锁/FCNTLFD,F_GETLK,IFLOCKL_TYPEF_UNLCK/判断文件不能上锁的原因/IFLOCKL_TYPEF_RDLCK/该文件已有读取锁/PRINTF“READLOCKALREADYSETBYDN“,LOCKL_PIDELSEIFLOCKL_TYPEF_WRLCK/该文件已有写入锁/PRINTF“WRITELOCKALREADYSETBYDN“,LOCKL_PID/L_TYPE可能已被F_GETLK修改过/LOCKL_TYPETYPE/根据不同的TYPE值进行阻塞式上锁或解锁/IFFCNTLFD,F_SETLKW,CHARBUFFBUFFER_SIZEFD_SETINSET,TMP_INSETSTRUCTTIMEVALTVUNSIGNEDLOOP1INTRES,REAL_READ,I/将从串口读取的数据写入到这个文件中/IFRECV_FDOPENRECV_FILE_NAME,O_CREAT|O_WRONLY,0644FDS1FDS0FDS1TVTV_SECTIME_DELAYTVTV_USEC0PRINTF“INPUTSOMEWORDSENTERQUITTOEXITN“WHILELOOPRESSELECTMAXFD1,SWITCHRESCASE1/错误/PERROR“SELECT“LOOP0BREAKCASE0/超时/PERROR“SELECTTIMEOUT“LOOP0BREAKDEFAULTFORI0IINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDE“UART_APIH“/打开串口函数/INTOPEN_PORTINTCOM_PORTINTFDIFCOM_TYPEGNR_COMCHARDEV“/DEV/TTYS0“,“/DEV/TTYS1“,“/DEV/TTYS2“ELSECHARDEV“/DEV/TTYUSB0“,“/DEV/TTYUSB1“,“/DEV/TTYUSB2“ENDIFIFCOM_PORTMAX_COM_NUMRETURN1FDOPENDEVCOM_PORT1,O_RDWR|O_NOCTTY|O_NDELAYIFFDINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEDEFINEFIFO1“IN1“DEFINEFIFO2“IN2“DEFINEMAX_BUFFER_SIZE1024/缓冲区大小/DEFINEIN_FILES3/多路复用输入文件数目/DEFINETIME_DELAY60/超时值秒数/DEFINEMAXA,BABABINTMAINVOIDINTFDSIN_FILESCHARBUFMAX_BUFFER_SIZEINTI,RES,REAL_READ,MAXFDSTRUCTTIMEVALTVFD_SETINSET,TMP_INSETFDS00/创建两个有名管道/IFACCESSFIFO1,F_OK1IFMKFIFOFIFO1,0666IN1”和“CATIN2”,接着在该管道中输入相关内容,并观察实验结果。七、实验报告1、列出调试通过程序的清单,分析运行结果。2、给出必要的程序设计思路和方法(或列出流程图)。3、总结上机调试过程中所遇到的问题和解决方法及感想。八、思考题1、请读者用POLL函数实现具有以上功能的代码。附件参考代码INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINTPID1,PID2MAININTFD2CHAROUTPIPE100,INPIPE100PIPEFDWHILEPID1FORK1IFPID10LOCKFFD1,1,0SPRINTFOUTPIPE,”CHILD1PROCESSISSENDINGMESSAGE”WRITEFD1,OUTPIPE,50SLEEP5LOCKFFD1,0,0EXIT0ELSEWHILEPID2FORK1IFPID20LOCKFFD1,1,0SPRINTFOUTPIPE,”CHILD2PROCESSISSENDINGMESSAGE”/把串放入数组OUTPIPE中/WRITEFD1,OUTPIPE,50/向管道写长为50字节的串/SLEEP5/自我阻塞5秒/LOCKFFD1,0,0EXIT0ELSEWAIT0/同步/READFD0,INPIPE,50/从管道中读长为50字节的串/PRINTF“SN”,INPIPEWAIT0READFD0,INPIPE,50PRINTF“SN”,INPIPEEXIT0实验项目七多线程实验学时2实验要求(选做/必做)必做实验地点实验室6B105一、实验目的1、通过学习经典的“生产者消费者”问题的实验,熟悉LINUX中的多线程编程;2、掌握用信号量处理线程间的同步和互斥问题。二、实验条件实验中心拥有针对该课程的实验室一间(6B105),可同时容纳10个组进行实验。安装LINUX虚拟平台的电脑10台,ARM9实验开发平台10套。三、实验性质设计性四、实验内容“生产者消费者”问题描述如下。有一个有限缓冲区和两个线程生产者和消费者。他们分别不停地把产品放入缓冲区和从缓冲区中拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。它们之间的关系如图94所示。图94生产者消费者问题描述这里要求使用有名管道来模拟有限缓冲区,并且使用信号量来解决“生产者消费者”问题中的同步和互斥问题。1、用有名管道来模拟有限缓冲区,用信号量来解决生产者消费者问题之间的同步和互斥问题。解决方案(1)信号量的考虑这里使用3个信号量,其中两个信号量AVAIL和FULL分别用于解决生产者和消费者线程之间的同步问题,MUTEX是用于这两个线程时间的互斥问题。其中AVAIL初始化为N(有界缓冲区的空单元数),MUTEX初始化为1,FULL初始化为0(2)流程图如下。建立有名管道开始打开有名管道初始化三个信号量创建消费者和生产着两个线程消费者线程生产者线程P操作AVAIL_P操作MUDEX写管道V操作FULLV操作MUDEXP操作FULL_P操作MUDEX读管道V操作AVAILV操作MUDEX结束对流程图的分析这里假设初始化AVAIL为5,也就是空缓存单元的起始个数是5。主函数创建两个线程后,两个线程并行执行。刚开始的时候,在生产者线程函数里,由于要对缓冲区写入数据(放入产品),因此通过P操作使AVAIL减1,也使MUTEX减1,此时MUTEX为0。在生产者运行的同时,消费者也在运行,不过由于FULL的初始值设为0,消费者对FULL的P操作被阻塞,此时消费者线程是被阻塞的。生产者将数据写入缓冲区后,对FULL进行V操作,FULL置为1,此时消费者对FULL的P操作可以执行了,但对MUTEX进行P操作时又被阻塞,因为生产者还对MUTEX进行V操作(MUTEX保证了当前只有一个线程对缓冲区进行操作)。在生产者完成对MUTEX的V操作后,消费者才能继续执行,P操作MUTEX,读取缓冲区中的数据(此时生产者就被MUTEX阻塞了),消费者读取数据后,V操作AVAIL,使空缓冲区个数加1,V操作MUTEX,解除生产者的阻塞状态。如此循环。五、实验设备安装LINUX虚拟平台的计算机,ARM教学实验平台。六、实验步骤1、编写代码/PRODUCERCUSTOMERC/INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEDEFINEBUFFER_SIZE5/AVAILINITALVALUEDEFINETIME_SIZE30INTPIPE_FD2INTI0,J0CHARTTIME_TTIMERSEM_TMUTEX,FULL,AVAILVOIDPRODUCERVOIDARGINTREAL_WRITEWHILEIINCLUDECLASSQVBOXLAYOUTCLASSQHBOXLAYOUTCLASSQGRIDLAYOUTCLASSHELLOPUBLICQWIDGETQ_OBJECTPUBLICHELLOQWIDGETPARENT0,CONSTCHARNAME0,WFLAGSFL0HELLO/以下是手动添加的代码/SIGNALSVOIDCLICKEDPROTECTEDVOIDMOUSERELEASEEVENTQMOUSEEVENTVOIDPAINTEVENTQPAINTEVENTPRIVATESLOTSVOIDANIMATEPRIVATEQSTRINGTINTBENDIF/HELLO_H/以下是HELLOCPP源代码/INCLUDE“HELLOH“INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDE/CONSTRUCTSAHELLOWHICHISACHILDOFPARENT,WITHTHENAMENAMEANDWIDGETFLAGSSETTOF/HELLOHELLOQWIDGETPARENT,CONSTCHARNAME,WFLAGSFLQWIDGETPARENT,NAME,FLIFNAMESETNAME“HELLO“RESIZE240,320SETMINIMUMSIZEQSIZE240,320SETMAXIMUMSIZEQSIZE240,320SETSIZEINCREMENTQSIZE240,320SETBASESIZEQSIZE240,320QPALETTEPALQCOLORGROUPCGCGSETCOLORQCOLORGROUPFOREGROUND,BLACKCGSETCOLORQCOLORGROUPBUTTON,QCOLOR192,192,192CGSETCOLORQCOLORGROUPLIGHT,WHITECGSETCOLORQCOLORGROUPMIDLIGHT,QCOLOR223,223,223CGSETCOLORQCOLORGROUPDARK,QCOLOR96,96,96CGSETCOLORQCOLORGROUPMID,QCOLOR128,128,128CGSETCOLORQCOLORGROUPTEXT,BLACKCGSETCOLORQCOLORGROUPBRIGHTTEXT,WHITECGSETCOLORQCOLORGROUPBUTTONTEXT,BLACKCGSETCOLORQCOLORGROUPBASE,WHITECGSETCOLORQCOLORGROUPBACKGROUND,WHITECGSETCOLORQCOLORGROUPSHADOW,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHT,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHTEDTEXT,WHITEPALSETACTIVECGCGSETCOLORQCOLORGROUPFOREGROUND,BLACKCGSETCOLORQCOLORGROUPBUTTON,QCOLOR192,192,192CGSETCOLORQCOLORGROUPLIGHT,WHITECGSETCOLORQCOLORGROUPMIDLIGHT,QCOLOR220,220,220CGSETCOLORQCOLORGROUPDARK,QCOLOR96,96,96CGSETCOLORQCOLORGROUPMID,QCOLOR128,128,128CGSETCOLORQCOLORGROUPTEXT,BLACKCGSETCOLORQCOLORGROUPBRIGHTTEXT,WHITECGSETCOLORQCOLORGROUPBUTTONTEXT,BLACKCGSETCOLORQCOLORGROUPBASE,WHITECGSETCOLORQCOLORGROUPBACKGROUND,WHITECGSETCOLORQCOLORGROUPSHADOW,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHT,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHTEDTEXT,WHITEPALSETINACTIVECGCGSETCOLORQCOLORGROUPFOREGROUND,QCOLOR128,128,128CGSETCOLORQCOLORGROUPBUTTON,QCOLOR192,192,192CGSETCOLORQCOLORGROUPLIGHT,WHITECGSETCOLORQCOLORGROUPMIDLIGHT,QCOLOR220,220,220CGSETCOLORQCOLORGROUPDARK,QCOLOR96,96,96CGSETCOLORQCOLORGROUPMID,QCOLOR128,128,128CGSETCOLORQCOLORGROUPTEXT,BLACKCGSETCOLORQCOLORGROUPBRIGHTTEXT,WHITECGSETCOLORQCOLORGROUPBUTTONTEXT,QCOLOR128,128,128CGSETCOLORQCOLORGROUPBASE,WHITECGSETCOLORQCOLORGROUPBACKGROUND,WHITECGSETCOLORQCOLORGROUPSHADOW,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHT,BLACKCGSETCOLORQCOLORGROUPHIGHLIGHTEDTEXT,WHITEPALSETDISABLEDCGSETPALETTEPALQFONTFFONTFSETFAMILY“ADOBEHELVETICA“FSETPOINTSIZE29FSETBOLDTRUESETFONTFSETCAPTIONTR“/以下是手动添加的代码/T“HELLO,WORLD“B0QTIMERTIMERNEWQTIMERTHISCONNECTTIMER,SIGNALTIMEOUT,SLOTANIMATETIMERSTART40/DESTROYSTHEOBJECTANDFREESANYALLOCATEDRESOURCES/HELLOHELLO/以下至结尾是手动添加的代码/VOIDHELLOANIMATEBB1REPAINTFALSE/HANDLESMOUSEBUTTONRELEASEEVENTSFORTHEHELLOWIDGETWEEMITTHECLICKEDSIGNALWHENTHEMOUSEISRELEASEDINSIDETHEWIDGET/VOIDHELLOMOUSERELEASEEVENTQMOUSEEVENTEIFRECTCONTAINSEPOSEMITCLICKED/HANDLESPAINTEVENTSFORTHEHELLOWIDGETFLICKERFREEUPDATETHETEXTISFIRSTDRAWNINTHEPIXMAPANDTHEPIXMAPISTHENBLTEDTOTHESCREEN/VOIDHELLOPAINTEVENTQPAINTEVENTSTATICINTSIN_TBL160,38,71,92,100,92,71,38,0,38,71,92,100,92,71,38IFTISEMPTYETURN/1COMPUTESOMESIZES,POSITIONSETC/QFONTMETRICSFMFONTMETRICSINTWFMWIDTHT20INTHFMHEIGHT2INTPMXWIDTH/2W/2INTPMYHEIGHT/2H/2/2CREATETHEPIXMAPANDFILLITWITHTHEWIDGETSBACKGROUND/QPIXMAPPMW,HPMFILLTHIS,PMX,PMY/3PAINTTHEPIXMAPCOOLWAVEEFFECT/QPAINTERPINTX10INTYH/2FMDESCENTINTI0PBEGINPSETFONTFONTWHILETIISNULLNTI16BISETPENQCOLOR15I1616,255,255,QCOLORHSVWTEXTX,YSIN_TBLI16H/800,TMIDI,1,1FMWIDTHTIPEND/4COPYTHEPIXMAPTOTHEHELLOWIDGET/BITBLTTHIS,PMX,PMY,4、编写主函数MAIN。一个QT/EMBEDED应用程序应该包含一个主函数,主函数所在的文件名是MAINCPP。主函数是应用程序执行的入口点。以下是“HELLO,WORLD”例子的主函数文件MAINC

温馨提示

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

评论

0/150

提交评论