嵌入式課程設(shè)計報告_第1頁
嵌入式課程設(shè)計報告_第2頁
嵌入式課程設(shè)計報告_第3頁
嵌入式課程設(shè)計報告_第4頁
嵌入式課程設(shè)計報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

福建工程學院《嵌入式系統(tǒng)》課程設(shè)計報告書題目:基于S3C2440設(shè)備驅(qū)動及其界面設(shè)計班級:姓名:學號:指導老師:陳靖,張平均,李光煬目錄一、設(shè)計課題3二、設(shè)計目的3三、設(shè)計任務(wù)及要求3四、設(shè)計內(nèi)容4五、操作界面的生成6六、操作界面調(diào)試8七、設(shè)計總結(jié)9八、設(shè)計參考書10九、附件〔程序〕11一、設(shè)計課題基于S3C2440的設(shè)備驅(qū)動及其界面設(shè)計二、設(shè)計目的:1.進一步穩(wěn)固嵌入式系統(tǒng)的根本知識;2.掌握嵌入式應(yīng)用系統(tǒng)的根本結(jié)構(gòu);3.掌握嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用;4.掌握嵌入式系統(tǒng)根本驅(qū)動、應(yīng)用程序的設(shè)計調(diào)試和編譯移植方法;5.學會查閱有關(guān)專業(yè)資料及設(shè)計手冊;6.MiniGUI界面編程。三、設(shè)計任務(wù)及要求:1.掌握嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用;2.掌握嵌入式系統(tǒng)根本驅(qū)動、應(yīng)用程序的設(shè)計調(diào)試和編譯移植方法;3、MiniGUI在PC上的安裝、移植4、Linux根本輸入輸出驅(qū)動程序設(shè)計編譯與移植5、基于MiniGUI的根本輸入輸出應(yīng)用編程編譯與移植6、編寫設(shè)計說明書〔方案確實定、設(shè)計環(huán)節(jié)的考慮及必要說明等〕及設(shè)備的使用說明;7、繪制有關(guān)圖紙.四、設(shè)計內(nèi)容:1、根底知識準備1〕講解設(shè)計任務(wù);2〕熟悉ubuntu的使用;3〕熟悉TQ2440試驗系統(tǒng)的使用;4〕掌握嵌入式系統(tǒng)開發(fā)環(huán)境建立和使用;5〕掌握嵌入式系統(tǒng)根本驅(qū)動、應(yīng)用程序的設(shè)計調(diào)試和編譯移植方法.2、界面設(shè)計環(huán)境構(gòu)建:MiniGUI在PC上的安裝、移植2.1、MiniGUI在pc機上安裝和運行建立工作目錄:mkdir/minigui-freecd/minigui-freemkdir/src復(fù)制源文件包到工作目錄:cp/mnt/hgfs/D/src/*/minigui-free解壓文件到/minigui-free:tarzxvflibminigui-.tar.gztarzxvfminigui-res-.tar.gztarzxvfmg-samples-.tar.gz2.2、MiniGUI庫安裝〔2〕將libcross.sh考到minigui的lib庫的解壓文件夾中〔3〕將rescross.sh考到minigui的res資源解壓文件夾中〔4〕將samplecorss.sh考到sample例子解壓文件夾中〔5〕依次運行l(wèi)ibcross.sh,rescross.sh,samplecorss.sh〔6〕到nfsroot的,目錄下,將libreduce.sh考到這個目錄下,運行l(wèi)ibreduce.sh2.3、安裝qvfb〔2〕./configure〔3〕make〔4〕makeinstall2.4、配置MiniGUI.cfgvi/etc/MiniGUI.cfg修改如下局部為[system]#GALengineanddefaultoptionsgal_engine=fbcondefaultmode=800x480-16bpp#IALengineial_engine=fbconmdev=/dev/mousemtype=IMPS2[fbcon]defaultmode=800x480-16bpp[qvfb]defaultmode=800x480-16bppdisplay=01.5運行MiniGUI例子程序〔1〕翻開qvfb:qvfb&〔2〕運行helloword:五、操作界面的生成1、操作界面面執(zhí)行文件的生成1〕.在/minigui-free/mg-samples-/src/修改源文件treeview.c2〕.再次運行samplecorss.sh,生成執(zhí)行文件treeview2、利用nfs進行掛載1).將本地PC機的網(wǎng)絡(luò)方式設(shè)置成為橋接2).查看/etc/exports下可以掛載的目錄3).啟動效勞/etc/init.d/nfs-kernel-serverrestart4).查看本機和ARM上的IP地址,設(shè)置在同一網(wǎng)段,然后ping,使其能夠互通。5).在超級終端上,進行操作Mount-onolock,rsize=1024,wsize=1024本機IP://mnt將虛擬機和ARM進行掛載,可以查看到虛擬機根目錄下的文件。3、在超級終端上將需要的文件從虛擬機上復(fù)制到ARM機上1).重新燒寫文件系統(tǒng)鏡像文件2).掛載成功后,將/mnt/minigui-free/nfsroot/lib/*復(fù)制到/usr/lib/3).將/mnt/minigui-free/nfsroot/usr/local/lib/*復(fù)制到/usr/local/lib/4).將/mnt/etc/MiniGUI.cfg復(fù)制到/etc/5).將/mnt/minigui-free/mg-samples-/src/*復(fù)制到/usr/minigui/4、在超級終端上運行執(zhí)行文件1).進入/usr/minigui/運行treeview文件2〕.可以再操作界面上現(xiàn)實我們所設(shè)計的界面六、操作界面調(diào)試1、點擊LED1\LED2\LED3\LED4,分別控制四盞led燈的亮暗,調(diào)試界面如下:2、輸入頻率值,點擊START鍵控制四盞led燈閃爍,調(diào)試界面如下:七、設(shè)計總結(jié)1、設(shè)計過程中遇到的問題錯誤1:InitGUI:Cannotinitializecolorsofwindowelement!InitGUIfailurewhenusing/usr/local/etc/MiniGUI.cfgascfgfile.解決方法:正確配置MiniGUI.cfg文件錯誤2:Permissiondenied解決方法:權(quán)限不夠,使用root用戶登錄。錯誤3:編譯出錯未找到j(luò)peg,png等解決方法:安裝zlib,png,jpeg庫。錯誤4:出現(xiàn)符號未找到等編譯錯誤解決方法:makeclean后在make錯誤5:在minigui創(chuàng)立和移植的過程中,出現(xiàn)lib庫編譯不成功的現(xiàn)象,這是由于minigui是基于qt3的,因此需要添加qt3所在路徑至配置文件。錯誤:6在開發(fā)板上添加鼠標設(shè)備后,提示視頻采集失敗,這是因為/etc下的配置文件MiniGUI.cfg中對外設(shè)控制范圍的控制過大,銀將其修改為與界面統(tǒng)一大小800*480.錯誤:7在執(zhí)行l(wèi)ed燈控制程序之前應(yīng)該首先停止開發(fā)板上原有的流水燈進程led-player。錯誤:8運行執(zhí)行程序treeview后界面上出現(xiàn)兩個光標,此時應(yīng)該在/etc/init.d下的rcS文件中停用qt3的光標。2、心得體會本學期為期兩周的嵌入式課程設(shè)計在不知不覺中結(jié)束了,雖說這次課程設(shè)計時間不是很長,但是感覺自己收獲頗豐,不僅學習到了一些新知識,回憶了以前的一些快要遺忘的知識點,而且使自己的學習目標更加明確,學習方法更加完善,也體會到軟件開發(fā)的趣味,更加清楚地認識到了自己在軟件開發(fā)及學習上的一些缺乏之處。兩周的課程設(shè)計,在計算機這個博大深奧的領(lǐng)域我感覺自己還有好多東西要學,還有好多的東西不懂!嵌入式軟件開發(fā)應(yīng)用廣泛而且前景很好,目前正處于人才緊缺的關(guān)口,嵌入式技術(shù)在未來能夠得到更加廣泛的應(yīng)用。學好嵌入式,C語言很重要,所以感覺自己有必要在學習、積累一下這方面的知識。很多東西的學習不是一帆風順也是比擬耗時的,嵌入式也不例外,要想學好還必須下大力氣,還必須堅持。這次的課程設(shè)計讓我明確了一點:嵌入式開發(fā)對于提升我們的系統(tǒng)知識有很大的幫助,尤其是操作系統(tǒng)的知識。嵌入式系統(tǒng)開發(fā)對于我們的知識面要求非常的廣,且要有一定的深度。這次的課程設(shè)計因為是一個有針對性的訓練,所以記的會非常牢固。跟平時上課不太一樣,平時上完理論課很少有時間上機進行時間或者隔幾天才上機練習,等到上機時一些東西可能遺忘了,比擬消耗時間。在課上,有老師在前面演示我們感覺看得懂或感覺沒問題,可輪到我們獨立完成的時候,因為實際操作的少,其中的問題就來了!我很感謝學校特別是學院老師有實訓這樣的安排,把我們這一學期學的東西系統(tǒng)的集中的進行訓練,讓我們深刻明確的體驗了一下軟件開發(fā)的流程!還要感謝給我們實訓的楚老師,感覺楚老師能力很強,也很有耐心,即使老師講了很多遍的問題,我們不會,老師還是會走進我們給我們耐心的指導,還給我們講一些學習計算機的方法,一些軟件開發(fā)需要注意的細節(jié),讓我們知道自己在哪方面缺乏,需要加強,也讓我們了解到哪些需要認真的學習,那些是重點,不是沒有方向的亂學一通,什么也學不好!經(jīng)過這次的實訓,我真真確確的感受到了計算機在我們生活中工作中的運用,這些軟件、程序能讓我們提高工作的效率,更直觀更便捷的切入主題。當然,在學習的過程中并不是一帆風順的,在這之中,因為要操作的東西很多,有時錯一步,后面的結(jié)果就無法顯示,而自己的計算機水平還有待提高,根本檢查不出來是哪里出了錯!這時候,老師都會耐心的過來幫助我!在平時我們就需要好好的查閱書籍或者上網(wǎng)搜集相關(guān)資料去解決問題。短短兩周的課程設(shè)計很快結(jié)束了,我發(fā)現(xiàn)我對計算機這個專業(yè)、對嵌入式技術(shù)、對Linux都有了新的認識。通過這次的實訓,我了解到,要真真正正的掌握計算機程序還不是一件簡單容易的事兒,但真正掌握后,它帶給我們的將是無窮的便捷與科技,我喜歡高端便捷的生活。我希望我能做計算機這個萬能機器人的主人而不是奴隸,我會努力加油的!感謝學校,感謝老師給我的幫助,讓我的思想、技能又上了一個臺階!感謝!加油!八、設(shè)計參考書1、《嵌入式系統(tǒng)接口設(shè)計與Linux驅(qū)動程序開發(fā)》2、《ARM9嵌入式LINUX系統(tǒng)構(gòu)建與應(yīng)用》4、MiniGUI編程手冊5、Linux應(yīng)用程序編程九、附件〔程序〕#include<stdio.h>#include<minigui/common.h>/*包括MiniGUI常用的宏以及數(shù)據(jù)類型的定義*/#include<minigui/minigui.h>/*包含了全局的和通用的接口函數(shù)以及某些雜項函數(shù)的定義*/#include<minigui/gdi.h>/*包含了MiniGUI繪圖函數(shù)的接口定義*/#include<minigui/control.h>/*包含了libminigui中所有內(nèi)建控件的接口定義*/#include<string.h>#include<stdlib.h>#include<unistd.h>/*包含了許多UNIX系統(tǒng)效勞的函數(shù)原型*/#include<sys/ioctl.h>/*提供對I/O控制的函數(shù)*/#defineID_LED1101/*定義各個控件與定時器的ID號*/#defineID_LED2102#defineID_LED3103#defineID_LED4104#defineID_TEXT1105#defineID_TEXT2106#defineID_START107#defineID_STOP108#defineID_COMBOBOX109#defineID_TIMER110staticinta,b,c,d=0;/*定義LED燈的初始值*/staticintfd_led;/*定義文件描述符*/HWNDhMainWnd;/*定義主窗口句柄*/staticvoiddraw_circular(HWNDhdig,intx,inty,intr,intwhich)/*自定義一個畫圓函數(shù),x、y、r、which分別表示圓心坐標、半徑、顏色*/{HDChdc;/*定義設(shè)備上下文句柄*/ intcolor; color=((which==0)?PIXEL_green:PIXEL_red); hdc=BeginPaint(hdig);/*獲得設(shè)備上下文句柄*/ SetBrushColor(hdc,color);/*設(shè)置畫刷顏色*/ FillCircle(hdc,x,y,r);/*調(diào)用園填充函數(shù)*/ EndPaint(hdig,hdc);/*釋放設(shè)備上下文句柄*/}staticDLGTEMPLATEDlgInitProgress=/*定義對話框模板.用static類型數(shù)據(jù),使該數(shù)據(jù)的定義只在所在文件中有效,以免因為名字空間污染造成潛在的編譯或連接錯誤*/{WS_BORDER|WS_CAPTION,/*對話框風格,WS_BORDER創(chuàng)立有邊框的窗口,WS_CAPTION創(chuàng)立含標題欄的主窗口*/WS_EX_NONE,/*對話框擴展風格,WS_EX_NONE表示無擴展風格*/0,0,800,480,/*對話框位置,左上角坐標(0,0),800、480分別為寬和高*/"MY_LED_CONTROL",/*對話框標題*/0,/*對話框圖標*/0,/*對話框菜單*/9,/*對話框中控件個數(shù)。這個必須要匹配*/NULL,/*pointertocontrolarray*/0/*附加值*/};staticCTRLDATACtrlInitData[]=/*控件數(shù)組*/{ { "static",/*控件類型*/ WS_VISIBLE|SS_SIMPLE,/*控件風格,WS_VISIBLE創(chuàng)立初始可見的窗口,SS_SIMPLE顯示單行文本*/ 100,270,150,40,/*控件位置*/ ID_TEXT1,/*控件ID*/ "Pleaseinputfrequency",/*控件內(nèi)容*/ 0,/*附加值*/ WS_EX_NONE/*控件擴展風格*/ }, { "static", WS_VISIBLE|SS_SIMPLE, 605,270,150,40, ID_TEXT2, "HZ", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP,/*WS_TABSTOP支持Tab鍵*/ 135,160,80,60, ID_LED1, "LED1", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP, 285,160,80,60, ID_LED2, "LED2", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP, 435,160,80,60, ID_LED3, "LED3", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP, 585,160,80,60, ID_LED4, "LED4", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP, 285,360,80,60, ID_START, "START", 0, WS_EX_NONE }, { "button", WS_VISIBLE|WS_TABSTOP, 435,360,80,60, ID_STOP, "STOP", 0, WS_EX_NONE }, {CTRL_COMBOBOX,WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP,/*CBS_AUTOSPIN創(chuàng)立旋鈕數(shù)字框,CBS_AUTOLOOP框中的數(shù)字將自動循環(huán)顯示*/ 435,270,80,40, ID_COMBOBOX, "0",/*旋鈕數(shù)字框初始值*/ 0, WS_EX_NONE }};staticintDialogBoxProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam)/*對話框過程函數(shù),用來接收和處理所有發(fā)送到該窗口的消息*/{intnumber;/*用來存從旋鈕數(shù)字框獲得的數(shù)值*/staticintt=0;intnum;/*存放定時時間*/switch(message) {caseMSG_INITDIALOG:/*用戶在定義自己的對話框回調(diào)函數(shù)時,需要處理MSG_INITDIALOG消息,該消息是在MiniGUI根據(jù)對話框模板建立對話框以及控件之后,發(fā)送到對話框回調(diào)函數(shù)的。*/ SendDlgItemMessage(hWnd,ID_COMBOBOX,CB_SETSPINRANGE,0,10000);/*設(shè)置旋鈕數(shù)字框的最大小值*/ return1; caseMSG_PAINT:/*重繪消息*/ draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWnd,475,90,30,1); draw_circular(hWnd,625,90,30,1); printf("*************************initdraw_circular******************************\n"); caseMSG_TIMER:t++;/*定時器消息,這里完成LED燈的閃爍*/ if(t%2!=0) { ioctl(fd_led,0,0); ioctl(fd_led,0,1); ioctl(fd_led,0,2); ioctl(fd_led,0,3); printf("*************************timered******************************\n"); draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWnd,475,90,30,1); draw_circular(hWnd,625,90,30,1); break; } else { ioctl(fd_led,1,0); ioctl(fd_led,1,1); ioctl(fd_led,1,2); ioctl(fd_led,1,3); printf("*************************timegreen******************************\n"); draw_circular(hWnd,175,90,30,0); draw_circular(hWnd,325,90,30,0); draw_circular(hWnd,475,90,30,0); draw_circular(hWnd,625,90,30,0); break; } caseMSG_COMMAND: /*擊鍵消息*/ switch(wParam) { caseID_LED1:a++;/*控制LED燈亮暗*/ if(a%2!=0) {ioctl(fd_led,0,0); draw_circular(hWnd,175,90,30,1); } else {/ioctl(fd_led,1,0); draw_circular(hWnd,175,90,30,0); } printf("******************led1********************************\n"); break; caseID_LED2:b++; if(b%2!=0) {ioctl(fd_led,0,1); draw_circular(hWnd,325,90,30,1); } else {ioctl(fd_led,1,1); draw_circular(hWnd,325,90,30,0); } printf("*******************led2********************************\n"); break; caseID_LED3:c++; if(c%2!=0) {ioctl(fd_led,0,2); draw_circular(hWnd,475,90,30,1); } else {ioctl(fd_led,1,2); draw_circular(hWnd,475,90,30,0); } printf("*******************led3********************************\n"); break; caseID_LED4:d++; if(d%2!=0) {ioctl(fd_led,0,3); draw_circular(hWnd,625,90,30,1); printf("*******************led33********************************\n"); } else {ioctl(fd_led,1,3); draw_circular(hWnd,625,90,30,0 ); } printf("*******************led4********************************\n"); break; caseID_START:printf("*******************start1*********************\n");number=SendMessage(GetDlgItem(hWnd,ID_COMBOBOX),CB_GETSPINVALUE,0,0);/*獲取旋鈕數(shù)字框的數(shù)值*/ printf("**********%d*******************\n",number); printf("*******************start2*********************\n"); if(number!=0) { printf("*******************start3*********************\n"); num=(int)(1000*(1.0/number));/*將頻率轉(zhuǎn)換為時間*/ printf("*******************start4*********************\n"); } else { printf("*******************start5*********************\n"); num=1000; } printf("*******************start6*********************\n"); printf("*******************start7*********************\n"); printf("*******************start8*********************\n"); SetTimer(hWnd,ID_TIMER,num);/*創(chuàng)立定時器,時間為num*10ms*/printf("*************************SetTimerOK******************************\n"); SendMessage(hWnd,BM_CLICK,0,0);/*發(fā)送點擊信息*/printf("*************************SendMessageOK******************************\n"); //for(i=0;i++;i<10000)/*當初用for循環(huán)時無法進入循環(huán),也許是因為消息本身有循環(huán)機制,用for循環(huán)太多也許沖突,所以后來用了定時器*/ //{//printf("********%d**********\n,i");// ioctl(fd_led,1,0);// ioctl(fd_led,1,1);// ioctl(fd_led,1,2);// ioctl(fd_led,1,3); //draw_circular(hWnd,175,90,30,0); //draw_circular(hWnd,325,90,30,0); //draw_circular(hWnd,475,90,30,0); //draw_circular(hWnd,625,90,30,0); printf("*******************start9*********************\n"); //usleep(number); //usleep(num);// ioctl(fd_led,0,0);// ioctl(fd_led,0,1);// ioctl(fd_led,0,2);// ioctl(fd_led,0,3); //draw_circular(hWnd,175,90,30,1); //draw_circular(hWnd,325,90,30,1); //draw_circular(hWnd,475,90,30,1); //draw_circular(hWnd,625,90,30,1); // printf("*******************start10*********************\n"); //usleep(number); //usleep(num);//} printf("*******************start********************************\n"); break; caseID_STOP: KillTimer(hWnd,ID_TIMER);/*關(guān)閉定時器。下面的表示燈滅*/ ioctl(fd_led,0,0); ioctl(fd_led,0,1); ioctl(fd_led,0,2); ioctl(fd_led,0,3); draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWnd,475,90,30,1); draw_circular(hWnd,625,90,30,1); printf("**************stop******************\n"); break; } }return(DefaultDialogProc(hWnd,message,wParam,lParam));/*對話框的缺省消息處理由DefaultDialogProc函數(shù)完成*/}staticvoidInitDialogBox(HWNDhWnd){ DlgInitProgress.controls=CtrlInitData;/*將對話框模板結(jié)構(gòu)和控件結(jié)構(gòu)數(shù)組關(guān)聯(lián)起來*/ DialogBoxIndirectParam(&DlgInitProgress,hWnd,DialogBoxProc,0L);/*創(chuàng)立對話框*/printf("*************createdialog**********************\n");}/*****************************************************************主窗口的過程函數(shù)staticintLedWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam){HDChdc;switch(message) {caseMSG_PAINT:hdc=BeginPaint(hWnd);TextOut(hdc,60,60,"Myledscontrol!");EndPaint(hWnd,hdc);return0;caseMSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); return0; } returnDefaultMainWinProc(hWnd,message,wParam,lParam);}*********************************************************************/intMiniGUIMain(intargc,constchar*argv[]) { //MSGMsg; //MAINWINCREATECreateInfo;/*描述主窗口的屬性*/#ifdef_MGRM_PROCESSES JoinLayer(NAME_DEF_LAYER,"led",0,0);/*選擇PROCESSES模式*/#endif printf("****************intomain*********************\n"); fd_led=open("/dev/GPIO-Control",0);/*翻開驅(qū)動設(shè)備*/ if(fd_led<0){perror("opendeviceled");exit(1);} ioctl(fd_led,0,0);/*初始燈滅*/ ioctl(fd_led,0,1);

溫馨提示

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

最新文檔

評論

0/150

提交評論