版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE2-重庆科技学院课程设计成果
院(系):_电气与信息工程学院_班级:计科09-02学生姓名:学号:设计地点(单位)____I315_________________
设计题目:_____广告自动更新系统_________完成日期:2012年7月6指导教师评语:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成绩(五级记分制):________________
教师签名:_________________________
摘要随着社会的发展,嵌入式linux在电子行业的应用越来越广泛,学习嵌入式linux显得非常重要。这次课程设计的主要目的是在QT设计广告显示界面,显示图片。并且实现广告自动更新,下载Ftp服务器的图片后自动加载到QT设计的广告界面。广告界面设计至少包括两个按钮(用于切换图片),实现QT界面上的按钮功能。熟悉linux底层编程。利用QT设计界面,缩短开发时间。关键字:嵌入式linux;基础题;广告自动更新;QT
目录课程设计任务书 -5-题目一基础题 -8-1设计内容及要求 -8-1.1二小题 -8-1.2三小题 -8-1.3四小题 -9-1.3五小题 -10-1.4六小题 -12-1.5七小题 -13-1.6八小题 -15-题目二广告自动更新系统 -17-1.设计内容及要求 -17-1.1广告自动更新系统的基本要求 -17-1.2需实现的主要功能 -17-2.需求分析 -17-2.1QT设计 -17-2.2服务器端和客户端的数据传输方式 -18-2.3服务器端功能设计 -18-2.4客户端功能设计 -19-3.总体设计 -20-3.1总体功能 -20-4.详细设计 -21-4.1功能分析和描述 -21-4.2客户端功能模块 -21-4.3服务器功能模块 -23-5.代码实现 -24-5.1客户端代码 -24-6.功能实现 -28-6.1图片功能的实现 -28-6.2在FTP服务器上添加添加图片 -28-6.3浏览器自动加载服务器上的图片 -29-7.总结 -30-8.致谢 -31-9.参考文献 -32-
课程设计任务书重庆科技学院课程设计任务书设计题目:基础题目学生姓名梁巧课程名称嵌入式linux应用与开发课程设计计科2009-01(嵌入式应用),计科2009-02(嵌入式应用),计科转2011-01(嵌入式应用)地点I315起止时间2012-设计内容及要求GCC编译器的使用,LINUX系统C程序设计编译、调试方法编写程序将数组内容倒置a[]=”123456789”。利用指针将数据A的内容复制到数据B。创建两线程,通过打印输出各自线程号和打印次序,要求从打印结果看出两个线程是并发执行的。创建两线程,A线程通过消息队列发消息,B线程收到后在屏幕打印输出,要求两线程个打印出线程号和消息内容。创建两线程,A线程循环打印数组a[100],B线程循环将数组成员+1,要求利用互斥锁,使每次输出a[0]==a[99].创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后,如“ABBABBABB……”。8、通过Makefile,将project中的两个.c编译成.a,另一个.c调用.a的函数,要求实现静态库的生成和调用,运行结果正确。设计参数进度要求第一周之内完成参考资料1、嵌入式Linux应用程序开发标准教程.人民邮电出版社。华清远见嵌入式培训中心。2010.72、ZLGARMMAGIC2410实验指导、资料。3、嵌入式linux程序设计案例与实验教程.俞辉著,机械工业出版社。2009.3其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:指导教师:易军陈刘奎2012重庆科技学院课程设计任务书设计题目:广告自动更新系统学生姓名梁巧课程名称嵌入式linux应用与开发课程设计计科2009-01(嵌入式应用),计科2009-02(嵌入式应用),计科转2011-01(嵌入式应用)地点I315起止时间2012-设计内容及要求1、在QT设计广告显示界面,显示图片。2、广告自动更新:下载Ftp服务器的图片后自动加载到QT设计的广告界面。3、广告界面设计至少包括两个按钮(用于切换图片),实现QT界面上的按钮功能。选作:显示flash广告设计参数进度要求做完基础题目之后开始做本题目。参考资料1、嵌入式Linux应用程序开发标准教程.人民邮电出版社。华清远见嵌入式培训中心。2010.72、ZLGARMMAGIC2410实验指导、资料。3、嵌入式linux程序设计案例与实验教程.俞辉著,机械工业出版社。2009.3其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:指导教师:易军陈刘奎2012题目一基础题1设计内容及要求1.1二小题编写程序将数组内容倒置a[]=”123456789”程序代码实现如下:chara[]="0123456789";chartmp;inti=0,j=0;for(i=0,j=strlen(a)-1;i<=strlen(a)/2-1;i++,j--){tmp=a[i];a[i]=a[j];a[j]=tmp;}for(i=0;i<strlen(a);i++)printf("%c",a[i]);printf("\n");(3)程序分析:1.定义数组2.数组内容倒置3.输出倒置后数组内容1.2三小题(1)利用指针将数据A的内容复制到数据B。(2)程序代码实现如下:charA[]="abcd";charB[]="1234";inti=0;char*tmp;tmp=A;for(i=0;i<strlen(A);i++)B[i]=*tmp++;for(i=0;i<strlen(A);i++)printf("%c",B[i]);printf("\n");(3)程序分析:1.定义数组2.定义指针3.指针指向数组A4.移动指针拷贝数字到B中5.显示拷贝后的数组1.3四小题(1)创建两线程,通过打印输出各自线程号和打印次序,要求从打印结果看出两个线程是并发执行的。(2)程序代码如下:#defineTHREAD_NUMBER 2#defineREPEAT_NUMBER 5#defineDELAY_TIME_LEVELS 10.0void*thrd_func(void*arg){ intthrd_num=(int)arg; intdelay_time=0; intcount=0; printf("Thread%disstarting\n",thrd_num); for(count=0;count<REPEAT_NUMBER;count++) { delay_time=(int)(rand()*DELAY_TIME_LEVELS/(RAND_MAX))+1; sleep(delay_time); printf("\tThread%d:job%ddelay=%d\n",thrd_num,count,delay_time); } printf("Thread%dfinished\n",thrd_num); pthread_exit(NULL);}intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++)④ { res=pthread_create(&thread[no],NULL,thrd_func,(void*)no); } for(no=0;no<THREAD_NUMBER;no++) { res=pthread_join(thread[no],&thrd_ret); } return0;}(3)程序分析:程序中创建2个线程,为了更加方便地描述线程之间的并行执行,让2个线程重用一个执行函数。每个线程都有5次循环,每次循环之间会随机等待1-10s的时间,意义在于模拟每个任务的到达时间是随机的,更加形象看出线程之间的并行执行。1.创建线程执行函数,程序中2个线程重用一个执行函数。2.让线程延时,延时时间随机产生。3.线程退出。4.创建2个线程。1.3五小题(1)创建两线程,A线程通过消息队列发消息,B线程收到后在屏幕打印输出,要求两线程个打印出线程号和消息内容。(2)程序代码如下:#defineBUFSZ 512#defineTHREAD_NUMBER 2structmessage{ longmsg_type; charmsg_text[BUFSZ];};structmessagemsg;intqid;/*Createqueue*/void*thrd_func0(void*arg){ intthrd_num=(int)arg;intlen=0; printf("Thread%disstarting\n",thrd_num);sprintf(msg.msg_text,"%s","sendthemsg"); msg.msg_type=getpid(); len=strlen(msg.msg_text); /*添加消息到消息队列*/ msgsnd(qid,&msg,len,0);printf("sendthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);}void*thrd_func1(void*arg){ intthrd_num=(int)arg; printf("Thread%disstarting\n",thrd_num); /*读取消息队列*/ msgrcv(qid,&msg,BUFSZ,getpid(),0);printf("recvthemessageis:%s\n",(&msg)->msg_text); pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; key_tkey; intlen;key=ftok(".",'a');⑦ qid=msgget(key,IPC_CREAT|0666);⑧ for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } for(no=0;no<THREAD_NUMBER;no++)⑨ { res=pthread_join(thread[no],&thrd_ret); } (msgctl(qid,IPC_RMID,NULL);⑩ return0;}代码分析如下:该程序实现了使用消息队列进行线程之间的通信,包括消息队列的创建、消息发送和读取、消息队列的撤销和删除等操作。1.定义消息队列消息结构体2.创建线程0,用于消息队列发送消息3.添加消息到消息队列4.退出线程5.创建线程1,用于消息队列读取消息6.读取消息队列7.根据不同的路径和关键表示产生标准的key8.创建消息队列9.等待线程10.从系统内核中移走消息队列1.4六小题(1)创建两线程,A线程循环打印数组a[100],B线程循环将数组成员+1,要求利用互斥锁,使每次输出a[0]==a[99].(2)程序源代码如下:#include<sys/types.h>#include<sys/ipc.h>#include<pthread.h>#include<semaphore.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>sem_tsem;void*thrd_fun1(void*arg){ intthrd_num=(int)arg;while(1){ printf("A\n");sem_post(&sem);sleep(2);} pthread_exit(NULL);}void*thrd_fun2(void*arg){intthrd_num=(int)arg;inti;while(1){sem_wait(&sem); printf("B\n");sleep(1); printf("B\n");sleep(1);}pthread_exit(NULL);}intmain(void){pthread_tthread[2];intno=0,res;void*thrd_ret;sem_init(&sem,0,0);res=pthread_create(&thread[0],NULL,thrd_fun1,(void*)no);if(res!=0){printf("Createthread1failed\n");exit(res);}res=pthread_create(&thread[1],NULL,thrd_fun2,(void*)no);if(res!=0){printf("Createthread1failed\n");exit(res);}for(no=0;no<2;no++){res=pthread_join(thread[no],&thrd_ret);if(!res){printf("Thread%dexit\n",no);}else{printf("Thread%dexitfailed\n",no);}}return0;}(3)程序分析如下:1.定义消息队列消息结构体2.创建线程0,用于消息队列发送消息3.添加消息到消息队列4.A线程循环打印数组a[100]5.B线程循环将数组成员+16.输出a[0]==a[99]1.5七小题(1)创建两线程,A线程每2秒打印一次字母A,B线程每秒打印一次字母B,要求利用同步信号量,使输出字母B总是在A之后。(2)程序代码如下:#defineTHREAD_NUMBER 2sem_tsem[THREAD_NUMBER];void*thrd_func0(void*arg)//A{ arg=arg; while(1){printf("A\n");sem_post(&sem[1]);sleep(2); } pthread_exit(NULL);}void*thrd_func1(void*arg)//B{ arg=arg; while(1){sem_wait(&sem[1]);printf("B\n");sleep(1); } pthread_exit(NULL);}void*(*constfunc[THREAD_NUMBER])(void*)={thrd_func0,thrd_func1};intmain(void){ pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,func[no],(void*)no); } printf("Createthreadsuccess\nWaitingforthreadstofinish...\n"); for(no=0;no<THREAD_NUMBER;no++) { sem_destroy(&sem[no]); } return0;}(3)程序分析如下:程序创建两线程,实现A线程每2秒打印一次字母A,B线程每秒打印一次字母B,利用同步信号量,使输出字母B总是在A之后。1.创建线程0执行函数,用于打印字符’A’2.打印字符’A’3.对信号量1进行V操作4.延时2s5.退出线程6.创建线程1执行函数,用于打印字符’B’7.对信号量1进行P操作8.打印字符’B’9.延时1s10.创建线程1.6八小题(1)通过Makefile将project中的一个.c编译成.a,另一个.c调用.a的函数,要求实现静态库的生成和调用,运行结果正确。(2)编写静态库程序thread.c如下:#include<stdio.h>voidpf1(void){printf("********\n");return;}voidpf2(void){printf("#########\n");return;}该程序定义两个函数,分别打印不同的内容,该程序将被编译成.a静态库编写调用程序call.c如下:externvoidpf1(void);externvoidpf2(void);intmain(void){pf1();pf2();return0;}该程序对静态库进行调用,调用静态库中的两个函数pf1和pf2。编写Makefile如下:CC=gccCPPFLAGS=-cOBJS=thread.oSOURCE=thread.cCALL_SOURCE=call.cLIB=libthread.aEXEC=callAR=arthread:${OBJS} ${CC}-c${SOURCE}-o${OBJS} ${AR}rcsv$(LIB)thread.o ${CC}-o${EXEC}${CALL_SOURCE}-L.-lthread.PHONY:cleanclean: -rm-f${OBJS}${EXEC}${LIB}Makefile文件实现对静态库程序编译成.a静态库,并且编译调用静态库的程序call.c为可执行文件call
题目二广告自动更新系统1.设计内容及要求1.1广告自动更新系统的基本要求1、在QT设计广告显示界面,显示图片。2、广告自动更新:下载Ftp服务器的图片后自动加载到QT设计的广告界面。3、广告界面设计至少包括两个按钮(用于切换图片),实现QT界面上的按钮功能。1.2需实现的主要功能(1)在PC机上搭建FTP环境,建立FTP服务器。(2)服务器必须成功启动。(3)QT编写客户端与服务器建立连接。(4)客户端和服务器可以实现通信。(5)客户端可自动下载FTP服务器上的图片自动加载到浏览器上显示。(6)利用QT设计界面,并下载到ARM板上面。2.需求分析2.1QT设计QT设计编写和调试阶段使用4.7.1编译器,运行测试阶段使用QTforARM编译器。使用QTforPC阶段编译程序的步骤如下(以编译hello.cpp程序为例):(1)进入/x86-qtopia目录,运行set-env脚本,设置环境变量。$.set-env(2)进入hello目录,然后用progen工具生成工程文件。$cdhello$vihello.cpp$progen–tapp.t–o(3)使用tmake工具,生成hello工程的Makefile文件。$tmake-oMakefile(4)修改Makefile文件,在LIBS变量中增加需要用到的库,然后输入make命令编译。LIBS=$(SUBLIBS)-L$(QTDIR)/lib-lqte-lm-lstdc++$make(5)启动虚拟控制台,运行hello程序(主机须启动帧缓冲,必须能够访问/dev/fb0)。$cd/zylinux/x86-qtopia$.set-env$cdhello$./hello–qws如果要将Hello程序发布到ARM板上运行,还需进行以下工作:(6)进入/zylinux/arm-qtopia目录,并将hello工程复制到当前目录下。$cd/zylinux/arm-qtopia$cp–av/zylinux/x86-qtopia/hello(7)运行当前目录下的set-env文件,重新设置环境变量,进入hello目录,使用tmake工具,重新生成Makefile文件。$.set-env$cdhello$tmake-oMakefile(8)按照步骤(4)的方法修改包含库,编译,得到可执行文件hello,将hello文件添加到文件系统中,更新文件系统。(9)插入USB鼠标和USB键盘,启动ARM板。启动Qtopia的终端,运行hello程序。利用同样的编译方法,客户端QT程序进行编译和调试。2.1.1客户端QT界面设计客户端QT需要以下基本组件:(1)一个向前按钮,一个向后按钮以及循环按钮。(2)制作一个图片浏览器,能够显示某个文件中的图片。(3)在图片浏览器中增加下载更新,文件列表更新。(4)添加客户端与服务器相连,实现下载和更新。2.2服务器端和客户端的数据传输方式服务器端和客户端的数据是用TCP套接字来传输的。IP地址表示Internet上的计算机,端口号标识正在计算机运行的进程。端口号与IP地址的组合得出一个网络套接字。客户端使用linuxC函数socket建立到服务器的套接字连接。当套接字连接socket建立后,可以利用linuxC语言中的send函数和recv函数来实现简单的发送和接收消息。2.3服务器端功能设计服务器没有用QT来编写界面,只是实现一个简单的控制程序。服务器主要实现有:(1)创建套接字(2)对套接字、IP地址和端口号进行绑定(3)进行监听(4)等待客户端的连接(5)对客户端自动进行连接并自动下载图片到客户端2.4客户端功能设计客户端使用QT设计界面,客户端实现的功能如下:(1)创建套接字(2)连接服务器(3)实现图片的浏览(4)自动下载服务器图片
3.总体设计3.1总体功能根据对需求所做的分析,广告自动更新系统需要实现的基本功能应包括以下几个方面:(1)在PC机上搭建FTP环境,建立FTP服务器。(2)服务器必须成功启动。(3)QT编写客户端与服务器建立连接。(4)客户端和服务器可以实现通信。(5)客户端可自动下载FTP服务器上的图片自动加载到浏览器上显示。(6)利用QT设计界面,并下载到ARM板上面。使用QT设计的界面简洁,大方,操作简单,方便,容易上手,用户可以快速掌握操作流程。开始界面开始界面图片浏览默认文件夹是否有文件不显示图片无显示文件夹图片有FTP服务器图片有更新自动下载FTP服务器的图片图3.1总体设计流程图
4.详细设计4.1功能分析和描述广告自动更新包括两大功能模块:客户端和服务器端。具体实现的功能创建套接字、连接通信、客户端从服务器自动下载图片加载到图形界面4.2客户端功能模块4.2.1连接服务器连接服务器之前需要解析服务器地址、创建套接字、设置sockaddr_in结构体中相关参数。连接服务器连接服务器设置相关参数创建套接字解析服务器地址图.2图片下载功能连接功能是下载服务器图片前必须进行的步骤,连接成功之后,就可以进行图片下载了。图片下载功能流程图如图2-5所示:是否连接成功是否连接成功无法下载图片否从服务器上下载图片是自动加载到图形界面图4.2.2图片下载功能流程图
4.3服务器功能模块服务器的设计并没有使用QT编写界面,服务器端实现的功能有:创建套接字对套接字和IP地址进行验证等待客户端进行连接对客户端自动传送图片文件图4.3创建套接字对套接字和IP地址进行验证等待客户端进行连接对客户端自动传送图片文件
5.代码实现5.1客户端代码5.1.1QT图片浏览器功能函数的实现向前翻的实现:voidImageViewer::on_actionPrevious_triggered(){ if(currentFile==displayFiles.constBegin()) currentFile=displayFiles.constEnd(); currentFile--; DisplayImage(dirCurrent->absoluteFilePath(*currentFile)); UpdateUI();}向后翻的实现:voidImageViewer::on_actionNext_triggered(){ currentFile++; if(currentFile==displayFiles.constEnd()) currentFile=displayFiles.constBegin(); DisplayImage(dirCurrent->absoluteFilePath(*currentFile)); UpdateUI();}显示时间更新:voidImageViewer::displayTimerUpdate(){currentFile++;//currentFile指向下一张图片if(currentFile==displayFiles.constEnd())//边界检查currentFile=displayFiles.constBegin();//显示currentFile所指的图片DisplayImage(dirCurrent->absoluteFilePath(*currentFile));UpdateUI();//更新图片显示区域automaticTimer->start(displaySpace*1000);//重启定时器}循环播放的实现:voidImageViewer::on_actionAutomaticPlay_triggered(){if(displayLoop==false)//如果不是循环播放模式{displayLoop=true;//设置为循环播放模式automaticTimer->start(displaySpace*1000);//启动定时器//设置actionAutomaticPlay控件的图标为pause.pngactionAutomaticPlay->setIcon(QIcon(":/images/pause.png"));}else{displayLoop=false;automaticTimer->stop();//停止定时器//设置actionAutomaticPlay控件的图标为play.pngactionAutomaticPlay->setIcon(QIcon(":/images/play.png"));}}
5.1.2下载更新voidImageViewer::downloadUpdate(){downloadTimer->stop();if(fileList->topLevelItemCount()==advertisementCount){}else{QStringfileName;//QMessageBox::information(this,tr("topLevelItemCount"),QString("%1").arg(fileList->topLevelItemCount()));for(inti=0;i<fileList->topLevelItemCount();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度汽车运输钢材质量检测合同5篇
- 2024年度股权转让合同股权比例及支付方式
- 三腔二囊管课件
- 2024年度企业重组与并购合同设计要点2篇
- 2024中国石化上海石化分公司毕业生招聘22人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信湖北荆门分公司招聘12人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信吉林通化分公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国建筑股份限公司岗位招聘30人(信息中心)易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国人保财险限公司江西分公司招聘103人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中交二航局市政建设限公司招聘250人易考易错模拟试题(共500题)试卷后附参考答案
- 人教版小学二年级数学上册《搭配(一)》说课稿及教学反思
- 上海版小学英语单词表
- 2024年全国注册土木工程师(水利水电)之专业基础知识考试重点试题(详细参考解析)
- 保山2024年云南保山市市直事业单位遴选管理人员和专业技术人员30人笔试历年典型考题及考点附答案解析
- 【超星尔雅学习通】伦理学概论(北京师范大学)网课章节答案
- 20231210建设工程实际施工人法律问题解析
- 能源调度中心方案
- 《建筑工程制图》题库
- 在线网课知慧《商科专业写作(南工大)》单元测试考核答案
- 工程联系单表格样本
- 静女复习市公开课一等奖省赛课微课金奖课件
评论
0/150
提交评论