嵌入式系統(tǒng)綜合課程設計說明書-基于嵌入式的數(shù)碼相框設計_第1頁
嵌入式系統(tǒng)綜合課程設計說明書-基于嵌入式的數(shù)碼相框設計_第2頁
嵌入式系統(tǒng)綜合課程設計說明書-基于嵌入式的數(shù)碼相框設計_第3頁
嵌入式系統(tǒng)綜合課程設計說明書-基于嵌入式的數(shù)碼相框設計_第4頁
嵌入式系統(tǒng)綜合課程設計說明書-基于嵌入式的數(shù)碼相框設計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學校代碼: 10128學 號: 嵌入式系統(tǒng)綜合設計說明書題 目: 基于嵌入式的數(shù)碼相框設計學生姓名: 組 別:學 院: 信息工程學院班 級: 計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環(huán)境,啟動兩個終端,

2、一個用于服務器程序,一個用于客戶端程序。171.2、解壓freetype_2.3.11.tar.bz2文件,進入其目錄下,輸入make命令進行編譯連接。171.3、在命令行執(zhí)行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、出現(xiàn)的問題172.1、每當鼠標滑過都會有痕跡留下,看

3、上去很像畫筆。172.2、程序編譯時出現(xiàn)段錯誤。172.3、下載文件時出現(xiàn)阻塞現(xiàn)象。173、解決方法173.1、在鼠標繪制前保留一下上一時刻鼠標鎖在位置的像素值,鼠標過后在還原,問題解決。1732、出現(xiàn)段錯誤的地方很多,原因也很多一般是越界了,把內存地址中的其他值給沖掉了,用gdb調試即可找到問題所在。183.3、下載文件時出現(xiàn)阻塞現(xiàn)象的可能原因是套接字read與write不同步,還有可能是文件讀完了,獲得不到中斷信號,退不出循環(huán)體,這是只要獲得文件的大小即可(獲取文件大小用lseek函數(shù))。18五、總結18六、參考文獻19摘要數(shù)碼攝影已經成為如今的主流攝影方式,但并不是每個美麗的瞬間都用相紙

4、沖刷出來(原因:這需要大量的金錢),經過市場調查只有%35左右的相片被沖洗,為了盡可能的減少人們的遺憾,數(shù)碼相框的產生成為了必然,數(shù)碼攝影也推動數(shù)碼相框的發(fā)展。本設計主要應用了C/S模式,實現(xiàn)了網絡間的數(shù)據傳遞和服務器的并發(fā)??蛻舳耍–lient)實現(xiàn)了鼠標控制,圖片接受,圖片的檢測更新,圖片的顯示等功能,服務器(Server)主要實現(xiàn)圖片的檢測更新及傳遞數(shù)據,圖片顯示主要是引入了JPEG數(shù)據庫包(Copyright George Peter Staplin),使我們的設計更為簡單易懂。服務器使用了fork()函數(shù)實現(xiàn)的服務器并發(fā),使閱讀程序的人員能更清楚地理解服務器并發(fā)的實現(xiàn)。關鍵詞: 鼠標

5、控制,服務器并發(fā),檢測更新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)系統(tǒng)下利用C語言開發(fā)一個具有上傳下載、鼠標控制、圖片自動更新且圖片具有多

9、樣式動態(tài)功能特效的數(shù)碼相框。2、要求:對鼠標,和圖片做效果處理,實現(xiàn)服務器的并發(fā)操作。二、設計方案1、總體設計功能 實現(xiàn)對鼠標的控制功能,圖片檢測更新,圖片的輪換顯示(實現(xiàn)幻燈片的效果),網絡間圖片的傳遞,多客戶端服務器的并發(fā)。2、設計思路:在客戶端要實現(xiàn)三大主要功能:顯示圖片、鼠標控制、網絡檢測更新圖片下載。3、顯示圖片:在程序中用FrameBuffer設備(/dev/fb0)映射到進程的地址空間,再用mmap進行地址映射,取mmap中的值進行解壓、縮放、色值還原,打印圖片(調用gpeglib庫,用jpeg算法解壓)。4、鼠標控制:在程序中用FrameBuffer設備(/dev/fb0),鼠

10、標控制設備(/dev/input/mice),用10*17的數(shù)組 cursor繪制鼠標,再用mmap映射答應道屏幕上;5、網路檢測更新圖片下載:使用網絡套接字TCP協(xié)議接受服務器發(fā)送的圖片,使用鏈表把所有的圖片都串起來,監(jiān)控圖片更新??蛻舳艘獙崿F(xiàn)上述三種功能的同步,因此我選用了進程實現(xiàn)的這個功能,因為每個進程之間是獨立的,但還要用鼠標控制圖片的切換速度(正常每五秒切換一張,點擊鼠標后立刻切換到下一張),為此我又用信號量來解決此問題。在服務器端主要實現(xiàn)圖片的更新和上傳。三、軟件設計1、主要模塊流程圖開始模塊初始化讀取jpeg文件夾內的圖片是否有圖片?建立鏈表將圖片鏈接按鏈表讀取圖像數(shù)據繪制鼠標對

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();/圖片顯示函數(shù)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();/圖片下載檢測更新函數(shù)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);/更新上傳函數(shù)elseclose(cfd);wait(NULL);fly =0;return 0;#includehead.hpic_link *creat_pic_node( char *pi

20、c_name)/鏈表節(jié)點的建立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) /節(jié)點的插入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環(huán)境,啟動兩個終端,一個用于服務器程序,一個用于客戶端程序。1.2、解壓freetype_2.3.11.tar.bz2文件,進入其目錄下,輸入make命令進行編譯連接。1.3、在命令行執(zhí)行source ./dpf.sh shell文件。1.4、在命令行 sudo chmod 777 /dev/fb0 sudo chmod 777 /dev/input/mice 命令,輸入密碼即可。15、啟動服務器終端,在命令行使用make命令,輸入./server運行程序。1.6、啟動客戶終端,在命令行使用make命令,輸入./client運行程序。2、出現(xiàn)的問題2.1、每當鼠標滑過都會有痕跡留下,看上去很像畫筆。2.2、程序編譯時出現(xiàn)段錯誤。2.3、下載文件時出現(xiàn)阻塞現(xiàn)象。3、解決方法3.1、在鼠標繪制前保留一下上一時刻鼠標鎖在位置的像素值,鼠標過后在還原,問題解決。32、出現(xiàn)段錯誤的地方很多,原因也很多一般是越界了,把內存地址中的其他值給沖掉了,用gdb調試即可找到問題所在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論