Goahead網(wǎng)絡遠程設備控制程序設計_第1頁
Goahead網(wǎng)絡遠程設備控制程序設計_第2頁
Goahead網(wǎng)絡遠程設備控制程序設計_第3頁
Goahead網(wǎng)絡遠程設備控制程序設計_第4頁
Goahead網(wǎng)絡遠程設備控制程序設計_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Goahead網(wǎng)絡遠程設備控制程序設計小組成員: 一.課程設計目的和意義 1.1課程設計目的課程設計的主要目的是通過實際的嵌入式應用系統(tǒng)開發(fā)實例掌握嵌入式系統(tǒng)設計和開發(fā)的技能和專門知識,積累實踐和工程經(jīng)驗。本課題設計嘗試移植嵌入式服務器上廣泛使用的網(wǎng)絡服務器中稱為“GoAhead”的網(wǎng)絡服務器。并且,利用 CGI 程序,嘗試在網(wǎng)絡上控制 HBE-EMPOSIII-SV210 的 LED,7-Segment,TextLCD。 1.2課程設計要求本課題所設計的系統(tǒng)要求實現(xiàn)以下功能。1.將“GoAhead”網(wǎng)絡服務器移植到實驗箱目標板Linux系統(tǒng)上;2.創(chuàng)建作為網(wǎng)絡服務器的索引文件使用的 inde

2、x.html 文件;3.完成編寫利用 Web 的 LED,7-Segment,TextLCD的控制程序。二.課程設計的需求與方法 2.2需求分析2.2.1功能需求分析遠程控制是當前信息技術領域的熱點,使用遠程控制技術,我們可以克服因地域差異而造成的操作不便,讓網(wǎng)絡的效率得到更大的發(fā)揮。隨著技術的發(fā)展與網(wǎng)絡的普及,目前遠程控制技術的應用領域已經(jīng)相當廣泛。我們不僅可以通過遠程控制技術管理遠端電腦,解決遠端電腦的故障,與其他同事通過網(wǎng)絡實現(xiàn)遠程協(xié)作,一起編輯一份文檔或者與其他團隊成員交流信息,還可以在家里或旅途中使用公司內(nèi)部網(wǎng)絡的數(shù)據(jù)與辦公設備,實現(xiàn)遠程辦公。2.2.2性能需求分析(1)準確性與及時

3、性(2)靈活性(3)響應速度2.2.3課題任務目標 (1)將“GoAhead”網(wǎng)絡服務器移植到實驗箱目標板Linux系統(tǒng)上; (2)創(chuàng)建作為網(wǎng)絡服務器的索引文件使用的 index.html 文件; (3)完成編寫利用 Web 的 LED,7-Segment,TextLCD的控制程序。2.2.4輸入輸出的要求(1)鼠標點擊WEB輸入,通過鍵盤輸入兩個16進制的數(shù),通過CGI程序?qū)⑵滢D換成8位二進制數(shù)來控制開發(fā)板中的LED 08的暗滅。(1為亮0為滅)(2)鼠標點擊WEB輸入,通過鍵盤輸入6位16進制的數(shù),在開發(fā)板的七段碼中顯示出來。 (3)鼠標點擊WEB輸入,通過鍵盤在網(wǎng)頁的Line1和Line

4、2中輸入一串字母或數(shù)字,在開發(fā)板的TextLCD中將輸入的這些字符對應的顯示出來。2.2.5系統(tǒng)運行環(huán)境硬件環(huán)境:pc機、HBE-EMPOSIII-SV210 hardware、串口線、網(wǎng)線等軟件環(huán)境:windows、ubuntu等一些應用軟件宿主機開發(fā)環(huán)境:交叉編譯環(huán)境、調(diào)試環(huán)境2.3軟硬件平臺設計2.3.1硬件平臺設計以太網(wǎng)接口 S5PV210(ARM CortexTM-A8 Core)SDRAMNAND FLASHNOR FLASHSD卡接口系統(tǒng)電源 嵌入式網(wǎng)絡控制系統(tǒng)通過串行接口直接傳送到S5PV210微處理器上的Web服務器,之后通過瀏覽器,用戶可以方便的監(jiān)測控制。硬件平臺設計框圖如

5、圖所示:2.3.2 軟件平臺設計嵌入式網(wǎng)絡控制系統(tǒng)通過RS-232串行接口直接傳送到Samsung S5PV210微處理器上的WEB服務器,之后通過瀏覽器,用戶可以方便的監(jiān)測控制。因此系統(tǒng)軟件部分主要由數(shù)據(jù)采集、數(shù)據(jù)傳輸、服務器數(shù)據(jù)處理和CGI程序訪問等幾大部分。系統(tǒng)工作流程如下圖所示: PCIECGI應用程序 驅(qū)動程序HTML網(wǎng)頁數(shù)據(jù)采集程序2.3.3 Goahead服務器的特點以及使用方式Goahead 服務器是一款主要面向嵌入式系統(tǒng)的Web服務器。GoAhead Webserver是跨平臺的服務器軟件它的特點是:1、很小的內(nèi)存消耗2、支持認證功能Digest Access Authent

6、ication (DAA)3、支持安全的通信,例如SSL(安全的套接字層)4、支持動態(tài)Web頁面,如ASP頁面5、可以使用傳統(tǒng)的C語言編程定制Web頁面里的HTML標簽6、支持CGI(公共網(wǎng)關編程接口)7、嵌入式的JavaScript腳本翻譯器8、獨特的URL分析器三.課程設計的步驟與實現(xiàn)3.1GoAhead 網(wǎng)絡服務器移植1.下載Goahead源碼2.GoAhead 源碼復制及解壓縮3.為了 GoAhead 編譯的源碼修改對“Makefile”進行修改 main.c 和 misc.c 文件4.GoAhead 編譯生成了“webs”網(wǎng)絡服務器執(zhí)行文件和“l(fā)ibwebs.a”庫5.創(chuàng)建作為網(wǎng)絡服

7、務器的索引文件使用的 index.html 文件6.創(chuàng)建在目標板上連接網(wǎng)絡服務器時出現(xiàn)的網(wǎng)頁目錄(/web),創(chuàng)建包含 cgi 的目錄(/web/cgi-bin)。7.向目標板下載 GoAhead 執(zhí)行文件及 main.html8.在目標板上運行 GoAhead9.通過主機 PC 的網(wǎng)頁瀏覽器連接網(wǎng)絡服務器3.2通過HTML中的CGI接口完成對開發(fā)板的鏈接開始編譯HTML文件(如:first.html)編譯.c文件(如:first.c)通過gcc.將c文件生成CGI文件將HTML.cgi文件用TFTP指令下載到開發(fā)板并運行結束CGI(公用網(wǎng)關接口)規(guī)定了Web服務器調(diào)用其他可執(zhí)行程序(CGI程

8、序)的接口協(xié)議標準。Web服務器通過調(diào)用CGI程序?qū)崿F(xiàn)和Web瀏覽器的交互,也就是CGI程序接受Web瀏覽器發(fā)送給Web服務器的信息,進行處理,將響應結果再回送給Web服務器及Web瀏覽器。CGI程序一般完成Web網(wǎng)頁中表單(Form)數(shù)據(jù)的處理、數(shù)據(jù)庫查詢和實現(xiàn)與傳統(tǒng)應用系統(tǒng)的集成等工作。CGI接口標準包括:1標準輸入可通過標準輸入(stdin)從Web服務器得到輸 入信息2環(huán)境變量Web服務器和CGI接口設置了自己的一些環(huán) 境變量,用來向CGI程序傳遞一些重要的參數(shù)3標準輸出通過標準輸出(stdout)將輸出信息傳送給Web服務器(html形式),就在命令行狀態(tài)調(diào)試CGI程序,并且得到它們

9、的輸出。虛擬機及超級終端截圖:通過HTML中的CGI接口完成對開發(fā)板的鏈接實驗截圖:3.3嵌入式Web服務器的實現(xiàn)3.3.1利用 Web 的 LED 控制程序LED 控制程序創(chuàng)建創(chuàng)建 8bitled.html ;8bitled.c文件LED 控制程序編譯8bitled.html 和 8bitled.cgi 復制到 /tftpboot 目錄中向目標板下載 LED 控制程序通過 tftp 下載 8bitled.html 和 8bitled.cgi ,并復制到 /web 和 /web/cgi-bin 接下來,通過主機 PC 的網(wǎng)頁瀏覽器連接網(wǎng)絡服務器并向地址欄中輸入“65/ 8bitled.html

10、”并連接,則 8bitled.html 網(wǎng)頁運行。向地址欄中輸入“http:/65/8bitled.html 向文本框中輸入兩位十六進制數(shù)并單擊 input 按鈕。在這里,輸入“1a”后,單擊“input”按鈕。LED 控制頁面運行確認及測試實驗截圖:3.3.2 7-Segment 設備驅(qū)動程序7Segment控制程序創(chuàng)建vi 7segment.htmlvi 7segment.c7Segment 控制程序編譯將 7segment.html 和 7segment.cgi 文件復制到 /tftpboot 目錄中。向目標板下載 7Segment 控制程序通過 tftp 下載 7segment.htm

11、l 和 7segment.cgi 文件,向 /web 和 /web/cgi-bin 目錄中復制文件。接下來,通過主機 PC 的網(wǎng)頁瀏覽器連接網(wǎng)絡服務器。 如果運行網(wǎng)頁瀏覽器并向地址欄中輸入“65/ 7segment.html”并連接,則 7segment.html 網(wǎng)頁運行。 向地址欄中輸入“65/7segment.html”。向文本框中輸入六位十進制數(shù)并單擊 input 按鈕。在這里,輸入 ”123456”后單擊“input”按鈕。 7segment控制頁面運行確認及測試實驗截圖:3.3.3利用 Web 的 textlcd 控制程序Textlcd控制程序創(chuàng)建創(chuàng)建 textlcd.html創(chuàng)建

12、 textlcd.c 編譯 textlcd 控制程序?qū)?textlcd.html 和 textlcd.cgi 文件復制到 /tftpboot 目錄中。向目標板下載 textlcd 控制程序下載 textlcd.html 和 textlcd.cgi 文件,向/web 和 /web/cgi-bin 目錄中復制文件。接下來,通過主機 PC 的網(wǎng)頁瀏覽器連接網(wǎng)絡服務器。如果運行網(wǎng)頁瀏覽器并向地址欄中輸入“65/ textlcd.html”并連接,則 textlcd.html 網(wǎng)頁運行。向地址輸入欄輸入“65/textlcd.html”。輸入文本框的 Line1 和 Line2 文字并單擊“input”

13、按鈕。如果畫面上出現(xiàn)“LCD Done”消息窗,則可以清楚 /web/cgi-bin 中的 textlcd.cgi 程序順利運行。textlcd控制頁面運行確認實驗截圖:textlcd控制頁面運行確認實驗截圖:趙震璽周凱亮*查偉王俊杰四 總結4.1實驗認知與發(fā)現(xiàn)的問題本次課程設計是嵌入式開發(fā)與應用,雖然只有短短的兩個星期,但在這兩個星期里我們學到了很多。首先,我們對計嵌入式開發(fā)有了進一步的掌握?;菊莆樟薌oahead網(wǎng)絡遠程設備控制并在網(wǎng)絡上控制 HBE-EMPOSIII-SV210 的 LED,7-Segment,TextLCD。但在完成這些題目的同時,我們也發(fā)現(xiàn)了自己的很多問題:第一,比

14、如很多的專業(yè)術語都沒有聽說過,只好在同學的幫助和網(wǎng)絡的幫助下,勉勉強強完成了任務,我們也知道了自己的很多不足,在往后的時間中還要繼續(xù)研究。第二,在我們使用tftp傳送文件的時候忘記修改虛擬機IP地址導致沒有傳送文件成功。第三,在我們將文件傳送成功的時候,網(wǎng)頁文件已經(jīng)能在goahead中顯示出來,但是輸入數(shù)據(jù)的時候,開發(fā)板并沒有顯示出來,后面才發(fā)現(xiàn)是傳送文件時,忘記用chomd命令給CGI文件加上權限,我們通過分析及時的解決了這個問題。第四,我們在完成實驗后的第二天再次開啟虛擬機并不能將這些網(wǎng)頁文件打開,原來是每次啟動虛擬機它的IP地址都是原地址,要將它改成00并通過超級終端運行網(wǎng)頁文件。第五,

15、在運行網(wǎng)頁文件的時候,首先要查看進程,要將進程中bin目錄下的webs進程殺除再運行網(wǎng)頁文件才能將它打開。最后,通過本次實驗我們知道了團隊力量的重要性,有的題目單靠單人的力量是很難完成的,但是經(jīng)過大家的合作,相比一個人來說完成的容易了點。4.2實驗效果分析本次實驗雖然能將開發(fā)板中的LED,7-Segment,TextLCD成功顯示出來。但是本次實驗的效果仍有幾點不足。第一:通過goahead網(wǎng)頁服務器編寫LED,7-Segment,TextLCD的網(wǎng)頁較為簡單。第二:控制開發(fā)板中7-Segment的顯示時間沒有進行精確的控制。4.3課程設計心得體會本次課程設計也獲得一個經(jīng)驗:在寫一個程序的時候

16、,一定要事先把程序原理方框圖化出來。以前總覺得這樣做沒必要,很浪費時間。但是,這次課程設計完全改變了我以前的那種錯誤的認識。這次課程設計中碰到的那些需要很多代碼才能完成的任務,畫程序方框圖是很有必要的,因為通過程序方框圖,在做設計的過程中,我們每一步要做什么,每一步要完成什么任務都有一個很清楚的思路,而且在程序測試的過程中也有利于查錯。經(jīng)過本次試驗我們這次做的實驗還算是比較成功的,因為我們同時也在不知不覺中提高了動手能力和獨立分析思考問題、解決問題的能力。這兩個星期的嵌入式應用的課程設計,使我們更加系統(tǒng)的認識和了解Goahead網(wǎng)絡遠程設備控制的工作原理,更深層次的認識了嵌入式開發(fā),相信在今后

17、的學習以及相關工作上會有很大幫助。致謝感謝孫老師和范老師在課設中給予的指導和鼓勵。感謝學校提供機會,能夠讓我們在實踐中培養(yǎng)動手能力,將理論與實際結合再一起。五.代碼附錄參考資料5.1 7segment實驗代碼附錄 /* *7-Segment CGI Program */#include #include #include #include #include #include #include #include #include #define FPGA_BASEADDRESS0 x88000000#define SEG_GRID_OFFSET 0 x30#defineSEG_DATA_OFFS

18、ET 0 x32typedef struct char name128;char val128;entry;void getword(char *word, char *line, char stop)int x =0, y = 0;for(x=0;(linex) & (linex != stop); x+) wordx = linex;wordx = 0;if(linex) +x;while(liney+ = linex+);int sizeofword(char *word)int i=0;for(i=0;i10;i+) if(wordi = 0) break;return i;unsig

19、ned int Getsegcode(char x)unsigned int code;switch (x) case 0 : code = 0 xfc; break;case 1 : code = 0 x60; break;case 2 : code = 0 xda; break;case 3 : code = 0 xf2; break;case 4 : code = 0 x66; break;case 5 : code = 0 xb6; break;case 6 : code = 0 xbe; break; case 7 : code = 0 xe4; break;case 8 : cod

20、e = 0 xfe; break;case 9 : code = 0 xf6; break;case a :case A : code = 0 xfa; break;case b :case B : code = 0 x3e; break;case c :case C : code = 0 x1a; break;case d :case D : code = 0 x7a; break;case e : case E : code = 0 x9e; break;case f : case F : code = 0 x8e; break;default : code = 0; break;retu

21、rn code;int main()char *cl;int k;unsigned int low = 0,high = 0;entry entries;unsigned short digit6 = 0 x20, 0 x10, 0 x08, 0 x04, 0 x02, 0 x01;unsigned short data6;int i,j,m;int fd;unsigned short *addr_fpga;unsigned short *addr_grid, *addr_data;printf(Content-type: text/htmlnn);printf(n7-Segment cgi

22、programn);printf(n);if(fd=open(/dev/mem,O_RDWR|O_SYNC) 0) printf(mem open failn);exit(1);addr_fpga= (unsigned short *)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, FPGA_BASEADDRESS);addr_grid=addr_fpga+SEG_GRID_OFFSET/sizeof(unsigned short);addr_data=addr_fpga+SEG_DATA_OFFSET/sizeof(unsigne

23、d short);if(addr_grid 0 | addr_data 0) close(fd);printf(mmap errorn);exit(1);cl = (char *)getenv(QUERY_STRING);getword(,cl,=);getword(entries.val,cl,&);k = sizeofword(entries.val);for(i=0; ik; i+)data(k-i)-1 = Getsegcode(entries.vali);for(j=0;j200;j+) for(i=0; ik; i+) *addr_grid = digiti;*addr_data

24、= datai;for(m=0;m65536;m+);*addr_grid = digit0;*addr_data = 0;munmap(addr_grid, 4096);munmap(addr_data, 4096);close(fd);if( k != 0)printf(7-Segment Done); else printf(You entered the wrong value!);printf();printf(n);return 0;5.1 7segment HTML源碼附錄 7segment cgi program向 7-Segment 中輸入要顯示的十進制數(shù)。 5.2 LED實

25、驗代碼附錄 /*8-Bit LED CGI Program */#include #include #include #include #include #include #include #include #include #define FPGA_BASEADDRESS0 x88000000#define LED_OFFSET0 x20typedef struct char name128;char val128;entry;void getword(char *word, char *line, char stop)int x =0, y = 0;for(x=0;(linex) & (l

26、inex != stop); x+) wordx = linex;wordx = 0;if(linex) +x;while(liney+ = linex+);int main()int fd; unsigned short *addr_fpga, *addr_led;char *cl;unsigned short val;entry entries;printf(Content-type : text/htmlnn);printf(n8bit LED cgi programn);printf(n);cl = (char *)getenv(QUERY_STRING);getword(,cl,=)

27、;getword(entries.val,cl,&);val = (unsigned short)strtol(entries.val,NULL,16);if(val = 0) if(!(entries.val0 = 0& entries.val1 = 0)| (entries.val0 = 0& entries.val1 = 0) printf(You entered the wrong value!);exit(1);if(fd=open(/dev/mem,O_RDWR|O_SYNC) 0) printf(mem open fail, %dn, fd);exit(1);addr_fpga=

28、 (unsigned short *)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, FPGA_BASEADDRESS);addr_led = addr_fpga + LED_OFFSET/sizeof(unsigned short);*addr_led = val|0 x100;munmap(addr_fpga, 4096);close(fd);printf(You entered 0 x%x,val);printf();printf(n);return 0; 8bit led cgi program輸入兩位十六進制值 : 5.2

29、 LED HTML源碼附錄 5.3 LCD實驗代碼附錄 /* *TextLCD CGI Program */#include #include #include #include #include #include #include #define FPGA_BASEADDRESS0 x88000000#define TEXTLCD_OFFSET 0 x10void setcommand(unsigned short command);void writebyte(char ch);void initialize_textlcd();void writeTextLcd(int row, cha

30、r *str,int length);int function_set(int rows, int nfonts);int display_control(int display_enable, int cursor_enable, int nblink);int cusrsor_shit(int set_screen, int set_rightshit);int entry_mode_set(int increase, int nshift);int return_home();int clear_display();int set_ddram_address(int pos);void

31、splitword(char *out, char *in, char stop);void unescape_url(char *url);char x2c(char *x);unsigned short *pTextlcd;typedef struct char name128;char val128;entry2;int get_get(entry entries)char qs128;int i;/bzero(qs,sizeof(qs);sprintf(qs,%s0,getenv(QUERY_STRING);for(i=0;*qs & i = A ? (x0 & 0 xdf) - A)

32、 + 10 : (x0 - 0);c *= 16;c += (x1 = A ? (x1 & 0 xdf) - A) + 10 : (x1 - 0);return c;int main(int argc, char *argv)char data2128;int fd;entry entries;char *cl;unsigned short *addr_fpga;printf(Content-type: text/htmlnn);cl = (char *)getenv(QUERY_STRING);get_get(entries);if (fd=open(/dev/mem,O_RDWR|O_SY

33、NC) 0) perror(mem open failn);exit(1);addr_fpga= (unsigned short *)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, FPGA_BASEADDRESS);pTextlcd=addr_fpga+TEXTLCD_OFFSET/sizeof(unsigned short);if(pTextlcd 0) close(fd); printf(mmap errorn); exit(1);initialize_textlcd();strcpy(data0, entries0.val)

34、;strcpy(data1, entries1.val);writeTextLcd(1,data0,strlen(data0);writeTextLcd(2,data1,strlen(data1);munmap(pTextlcd,4096);close(fd);printf(LCD Done!);return 0;void setcommand(unsigned short command) command &= 0 x00FF;*pTextlcd = command | 0 x0000;usleep(1000);*pTextlcd = command | 0 x0100;usleep(100

35、0);*pTextlcd = command | 0 x0000;usleep(1000);void writebyte(char ch)unsigned short data;data = ch & 0 x00FF;*pTextlcd = data&0 x400;usleep(1000);*pTextlcd = data|0 x500;usleep(1000);*pTextlcd = data|0 x400;usleep(1000);void initialize_textlcd()function_set(2,0); /Function Set:8bit,display 2lines,5x

36、7 moddisplay_control(1,0,0); / Display on, Cursor offclear_display(); / Display clearentry_mode_set(1,0); / Entry Mode Set : shift right cursorreturn_home(); / go home/send Function Set command to the text lcd/ rows = 2 : = 2 rows, rows = 1 = 1 rows/ nfonts = 1 : = 5x10 dot, nfonts = 0 : 5x7 dotint

37、function_set(int rows, int nfonts)unsigned short command = 0 x30;if(rows = 2) command |= 0 x08;else if(rows = 1) command &= 0 xf7;else return -1;command = nfonts ? (command | 0 x04) : command;setcommand(command);return 1;int display_control(int display_enable, int cursor_enable, int nblink)unsigned

38、short command = 0 x08;command = display_enable ? (command | 0 x04) : command;command = cursor_enable ? (command | 0 x02) : command;command = nblink ? (command | 0 x01) : command;setcommand(command);return 1;int cusrsor_shit(int set_screen, int set_rightshit)unsigned short command = 0 x10;command = set_screen ? (command | 0 x08) : command;command = set_rightshit ? (command | 0 x04) : command;setcommand(command);return 1;int entry_mode_set(int increase, int nshift)unsigned short command = 0 x04;command = increase ? (command | 0 x2) : command;command = nshift ? ( command | 0 x1) :

溫馨提示

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

評論

0/150

提交評論