嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc

上传人:文库蛋蛋多 文档编号:2392803 上传时间:2023-02-17 格式:DOC 页数:20 大小:770.50KB
返回 下载 相关 举报
嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc_第1页
第1页 / 共20页
嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc_第2页
第2页 / 共20页
嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc_第3页
第3页 / 共20页
嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc_第4页
第4页 / 共20页
嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc》由会员分享,可在线阅读,更多相关《嵌入式系统综合课程设计说明书基于嵌入式的数码相框设计.doc(20页珍藏版)》请在三一办公上搜索。

1、学校代码: 10128学 号: 嵌入式系统综合设计说明书题 目: 基于嵌入式的数码相框设计学生姓名: 组 别:学 院: 信息工程学院班 级: 计08-3班指导教师: 2011年9 月 20 日摘要2ABSTRACT2一、设计任务与要求31、任务:32、要求:3二、设计方案31、总体设计功能32、设计思路:43、显示图片:44、鼠标控制:45、网路检测更新图片下载:4三、软件设计41、主要模块流程图42、部分程序清单及注释62.1、客户端主程序:62.2、三种图片更换效果83、服务器端程序流程图134、服务器端主程序:14四、调试过程171、实验步骤171.1、进入linux环境,启动两个终端,

2、一个用于服务器程序,一个用于客户端程序。171.2、解压freetype_2.3.11.tar.bz2文件,进入其目录下,输入make命令进行编译连接。171.3、在命令行执行source ./dpf.sh shell文件。171.4、在命令行 sudo chmod 777 /dev/fb0 sudo chmod 777 /dev/input/mice 命令,输入密码即可。1715、启动服务器终端,在命令行使用make命令,输入./server运行程序。171.6、启动客户终端,在命令行使用make命令,输入./client运行程序。172、出现的问题172.1、每当鼠标滑过都会有痕迹留下,看

3、上去很像画笔。172.2、程序编译时出现段错误。172.3、下载文件时出现阻塞现象。173、解决方法173.1、在鼠标绘制前保留一下上一时刻鼠标锁在位置的像素值,鼠标过后在还原,问题解决。1732、出现段错误的地方很多,原因也很多一般是越界了,把内存地址中的其他值给冲掉了,用gdb调试即可找到问题所在。183.3、下载文件时出现阻塞现象的可能原因是套接字read与write不同步,还有可能是文件读完了,获得不到中断信号,退不出循环体,这是只要获得文件的大小即可(获取文件大小用lseek函数)。18五、总结18六、参考文献19摘要数码摄影已经成为如今的主流摄影方式,但并不是每个美丽的瞬间都用相纸

4、冲刷出来(原因:这需要大量的金钱),经过市场调查只有%35左右的相片被冲洗,为了尽可能的减少人们的遗憾,数码相框的产生成为了必然,数码摄影也推动数码相框的发展。本设计主要应用了C/S模式,实现了网络间的数据传递和服务器的并发。客户端(Client)实现了鼠标控制,图片接受,图片的检测更新,图片的显示等功能,服务器(Server)主要实现图片的检测更新及传递数据,图片显示主要是引入了JPEG数据库包(Copyright George Peter Staplin),使我们的设计更为简单易懂。服务器使用了fork()函数实现的服务器并发,使阅读程序的人员能更清楚地理解服务器并发的实现。关键词: 鼠标

5、控制,服务器并发,检测更新ABSTRACTDigital photography has becomed the mainstream of the photography way.Now ,it is not every beautiful moments all washed out by the paper ( Reason: this will need a lot of money). By market investigation only around thirty-five percent of pictures were flush, in order to minimize

6、 the number of people regret, digital photo frames become necessary, digital photography promote the development of the digital photo frame. This design is mainly used for C/S mode, and realize the data transfer between the network and server concurrent. The Client realized the mouse control, pictur

7、es accepts, images of the detection update, pictures of the show, and other functions, Server mainly realizes the detection update and pictures, pictures showed the main transfer data introduce JPEG database bag (Copyright George Peter Staplin), make our design more simple to understandable. Server

8、use fork () of the realization of the function, make reading program server and the personnel can be more clearly to understand the realization of the concurrent server. Key words: The mouse control, Server concurrent, Detection update 一、设计任务与要求1、任务:在linux(ubuntu)系统下利用C语言开发一个具有上传下载、鼠标控制、图片自动更新且图片具有多

9、样式动态功能特效的数码相框。2、要求:对鼠标,和图片做效果处理,实现服务器的并发操作。二、设计方案1、总体设计功能 实现对鼠标的控制功能,图片检测更新,图片的轮换显示(实现幻灯片的效果),网络间图片的传递,多客户端服务器的并发。2、设计思路:在客户端要实现三大主要功能:显示图片、鼠标控制、网络检测更新图片下载。3、显示图片:在程序中用FrameBuffer设备(/dev/fb0)映射到进程的地址空间,再用mmap进行地址映射,取mmap中的值进行解压、缩放、色值还原,打印图片(调用gpeglib库,用jpeg算法解压)。4、鼠标控制:在程序中用FrameBuffer设备(/dev/fb0),鼠

10、标控制设备(/dev/input/mice),用10*17的数组 cursor绘制鼠标,再用mmap映射答应道屏幕上;5、网路检测更新图片下载:使用网络套接字TCP协议接受服务器发送的图片,使用链表把所有的图片都串起来,监控图片更新。客户端要实现上述三种功能的同步,因此我选用了进程实现的这个功能,因为每个进程之间是独立的,但还要用鼠标控制图片的切换速度(正常每五秒切换一张,点击鼠标后立刻切换到下一张),为此我又用信号量来解决此问题。在服务器端主要实现图片的更新和上传。三、软件设计1、主要模块流程图开始模块初始化读取jpeg文件夹内的图片是否有图片?建立链表将图片链接按链表读取图像数据绘制鼠标对

11、图像进行解码显示图片交换图片结束client等待下载图片是否成功客户端程序流程图2、部分程序清单及注释2.1、客户端主程序:#includehead.hint main(void)int res, i, n;fb_info fb;pid_t pid;pid_t *p;struct sigaction act;act.sa_handler = sig_usr1;act.sa_flags = 0;sigemptyset(&act.sa_mask);sigaction(SIGUSR1, &act, NULL);/信号res = init_fb(&fb);if(res = -1)err_sys(ini

12、t_fb error);p = smalloc(sizeof(pid_t) * 2);if(p = NULL)err_sys(smalloc error);for(i = 0; i 3; i+)pid = fork();if(pid = 0)break;pi = pid;if(i = 0)pic_display();/图片显示函数else if(i = 1)int fd; int x = fb.w / 2;int y = fb.h / 2;char buf8;mice_event_t m;fd = open(/dev/input/mice, O_RDONLY);if(fd = -1)err_s

13、ys(open error);mice_save(fb, x, y);mice_draw(fb, x, y);while(1)n = read(fd, buf, 8);mice_parse(buf, &m);mice_restore(fb, x, y);x += m.x;y += m.y;/*确定鼠标移动范围*/if(x (fb.w-12)x = fb.w-12;if(y (fb.h-24)y = fb.h-24;mice_save(fb, x, y);mice_draw(fb, x, y);if(m.button = 1 | m.button = 2 | m.button = 3)kill(

14、p0, SIGUSR1);else if(i = 2)client();/图片下载检测更新函数elsefor(i = 0; i 2; i+)wait(NULL);fb_destroy(&fb);return 0;2.2、三种图片更换效果int yuan(u32_t * buf32, fb_info fb_inf)/点到圆int i,j,r;for(r=0;r=160;r+)for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) if(i-50)*(i-50)+(j-50)*(j-50)r*r)point_t p;p.x = i; p.y = j;fb_pixel

15、(fb_inf, p, buf32i + j*fb_inf.w); for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) if(i-800)*(i-800)+(j-200)*(j-200)r*r)point_t p;p.x = i;p.y = j;fb_pixel(fb_inf, p,buf32i+j*fb_inf.w); for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) if(i-256)*(i-256)+(j-576)*(j-576)r*r)point_t p;p.x = i;p.y = j; fb_pixel(fb_

16、inf, p, buf32i + j*fb_inf.w); for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) if(i-768)*(i-768)+(j-576)*(j-576)r*r)point_t p;p.x = i;p.y = j;fb_pixel(fb_inf, p, buf32i + j * fb_inf.w); for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) if(i-512)*(i-512)+(j-384)*(j-384)r*r)point_t p;p.x = i;p.y = j;fb_pixel(fb_

17、inf, p, buf32i + j * fb_inf.w); usleep(100);for (i=0;ifb_inf.w;i+)for(j=0;jfb_inf.h;j+) point_t p;p.x = i;p.y = j;fb_pixel(fb_inf, p, buf32i + j * fb_inf.w);usleep(100);return 0;int baiye(u32_t * buf32, fb_info fb_inf)/百叶窗int i, j;int n,y;int num = fb_inf.h/N;int num2 = num/N_2;printf(fb_inf.h = %dn

18、fb_inf.w = %dn, fb_inf.h,fb_inf.w);for(y = 0; y N_2; y+)#if 1for(n = 0; n N; n+)for(i = n*num+y*num2-n*3/(n+1); i (n)*num+num2+y*num2; +i)for (j = 0; j fb_inf.w; +j)point_t p;p.x = j;p.y = i;fb_pixel(fb_inf, p, buf32j + i * fb_inf.w);usleep(10);usleep(10);#elsefor(i = n*num; i = (n+1)*num; +i)for (j

19、 = 0; j 0)for(i = 0; i fb_inf.h; i+=a)for (j =0; j fb_inf.w; j+=a)point_t p;p.x = j;p.y = i;for(k=0;k100;k+)fb_pixel(fb_inf, p, buf32j + i * fb_inf.w);a-;for(k=0;k10;k+);/for(n=0;n 0)exit(0);change(cfd);/更新上传函数elseclose(cfd);wait(NULL);fly =0;return 0;#includehead.hpic_link *creat_pic_node( char *pi

20、c_name)/链表节点的建立pic_link *p;int len;len = strlen(pic_name);printf(-%sn,pic_name);p = (pic_link *)malloc(sizeof(pic_link);p-pic_name = (char *)malloc(sizeof(char)*(len+1);strcpy(p-pic_name,pic_name);p-pic_flag = 1;p-next = NULL;return p;void insert_pic(pic_link *p) /节点的插入printf(p -name=%sn,p-pic_name)

21、;if(head = NULL)p-next = head;head = p;q = p;elseq-next = p;q = p;四、调试过程1、实验步骤1.1、进入linux环境,启动两个终端,一个用于服务器程序,一个用于客户端程序。1.2、解压freetype_2.3.11.tar.bz2文件,进入其目录下,输入make命令进行编译连接。1.3、在命令行执行source ./dpf.sh shell文件。1.4、在命令行 sudo chmod 777 /dev/fb0 sudo chmod 777 /dev/input/mice 命令,输入密码即可。15、启动服务器终端,在命令行使用ma

22、ke命令,输入./server运行程序。1.6、启动客户终端,在命令行使用make命令,输入./client运行程序。2、出现的问题2.1、每当鼠标滑过都会有痕迹留下,看上去很像画笔。2.2、程序编译时出现段错误。2.3、下载文件时出现阻塞现象。3、解决方法3.1、在鼠标绘制前保留一下上一时刻鼠标锁在位置的像素值,鼠标过后在还原,问题解决。32、出现段错误的地方很多,原因也很多一般是越界了,把内存地址中的其他值给冲掉了,用gdb调试即可找到问题所在。3.3、下载文件时出现阻塞现象的可能原因是套接字read与write不同步,还有可能是文件读完了,获得不到中断信号,退不出循环体,这是只要获得文件

23、的大小即可(获取文件大小用lseek函数)。五、总结通过本次实习我更深入的了解到程序模块化的重要性,他可以使人有更清晰的思路去处理所实现的个个功能。对linux系统编程有了自己的见解,感觉到Makefile,与shell脚本在以后项目中的重要性。在以后的工作学习中要注重自己编程思想的建立、重要程序代码的积累和一些重要函数的使用。不动手永远不知道自己能力的大小,解决问题靠的并不是纸上谈兵,所以我们要勤于动手,解决自己所遇到的问题,当你把一个很难解决得问题自己解决时,会发现人得潜力是无极限的,只要你肯努力。这个项目完成,收获的是喜悦、编程的经验,自己的动手能力,编码的风格等等。六、参考文献 1、A

24、dvanced Programming in the UNIX Environment (Second Edition )USA W.Richard Stevens Stephen A.Rago 20062、章毓晋. 图像处理分析M. 北京: 清华大学出版社, 1999, 2.3、 沈庭芳, 方子文. 数字图像处理及模式识别M. 北京: 北京理工大学出版社, 1998.4、 G. K. Wallace. The JPEG Still Picture Compression Standard. IEEE Trans. Consumer Electronics, 1992, 38(1), 18-34.5、谷爱昱. 基于ARM的静态图像显示系统的研究与实现. 广东工业大学硕士论文, 2007年4月.

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号