Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件_第1頁(yè)
Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件_第2頁(yè)
Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件_第3頁(yè)
Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件_第4頁(yè)
Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩89頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)小組成員:周凱亮查偉王俊杰趙震璽張慧成Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)小組成員:周凱亮查偉1一.課程設(shè)計(jì)目的和意義

1.1課程設(shè)計(jì)目的

課程設(shè)計(jì)的主要目的是通過(guò)實(shí)際的嵌入式應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例掌握嵌入式系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)的技能和專(zhuān)門(mén)知識(shí),積累實(shí)踐和工程經(jīng)驗(yàn)。

本課題設(shè)計(jì)嘗試移植嵌入式服務(wù)器上廣泛使用的網(wǎng)絡(luò)服務(wù)器中稱(chēng)為“GoAhead”的網(wǎng)絡(luò)服務(wù)器。并且,利用CGI程序,嘗試在網(wǎng)絡(luò)上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。1.2課程設(shè)計(jì)要求本課題所設(shè)計(jì)的系統(tǒng)要求實(shí)現(xiàn)以下功能。 1.將“GoAhead”網(wǎng)絡(luò)服務(wù)器移植到實(shí)驗(yàn)箱目標(biāo)板Linux系統(tǒng)上; 2.創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件; 3.完成編寫(xiě)利用Web的LED,7-Segment,TextLCD的控制程序。一.課程設(shè)計(jì)目的和意義

1.1課程設(shè)計(jì)目的2二.課程設(shè)計(jì)的需求與方法2.2需求分析

2.2.1功能需求分析

遠(yuǎn)程控制是當(dāng)前信息技術(shù)領(lǐng)域的熱點(diǎn),使用遠(yuǎn)程控制技術(shù),我們可以克服因地域差異而造成的操作不便,讓網(wǎng)絡(luò)的效率得到更大的發(fā)揮。隨著技術(shù)的發(fā)展與網(wǎng)絡(luò)的普及,目前遠(yuǎn)程控制技術(shù)的應(yīng)用領(lǐng)域已經(jīng)相當(dāng)廣泛。我們不僅可以通過(guò)遠(yuǎn)程控制技術(shù)管理遠(yuǎn)端電腦,解決遠(yuǎn)端電腦的故障,與其他同事通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程協(xié)作,一起編輯一份文檔或者與其他團(tuán)隊(duì)成員交流信息,還可以在家里或旅途中使用公司內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)與辦公設(shè)備,實(shí)現(xiàn)遠(yuǎn)程辦公。

2.2.2性能需求分析

(1)準(zhǔn)確性與及時(shí)性

(2)靈活性

(3)響應(yīng)速度二.課程設(shè)計(jì)的需求與方法3

2.2.3課題任務(wù)目標(biāo)

(1)將“GoAhead”網(wǎng)絡(luò)服務(wù)器移植到實(shí)驗(yàn)箱目標(biāo)板Linux系統(tǒng)上;

(2)創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件;

(3)完成編寫(xiě)利用Web的LED,7-Segment,TextLCD的控制程序。

2.2.4輸入輸出的要求

(1)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)輸入兩個(gè)16進(jìn)制的數(shù),通過(guò)CGI程序?qū)⑵滢D(zhuǎn)換成8位二進(jìn)制數(shù)來(lái)控制開(kāi)發(fā)板中的LED0~8的暗滅。(1為亮0為滅)

(2)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)輸入6位16進(jìn)制的數(shù),在開(kāi)發(fā)板的七段碼中顯示出來(lái)。

(3)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)在網(wǎng)頁(yè)的Line1和Line2中輸入一串字母或數(shù)字,在開(kāi)發(fā)板的TextLCD中將輸入的這些字符對(duì)應(yīng)的顯示出來(lái)。

2.2.5系統(tǒng)運(yùn)行環(huán)境

硬件環(huán)境:pc機(jī)、HBE-EMPOSIII-SV210hardware、串口線、網(wǎng)線等

軟件環(huán)境:windows、ubuntu等一些應(yīng)用軟件

宿主機(jī)開(kāi)發(fā)環(huán)境:交叉編譯環(huán)境、調(diào)試環(huán)境

2.2.3課題任務(wù)目標(biāo)42.3軟硬件平臺(tái)設(shè)計(jì)2.3.1硬件平臺(tái)設(shè)計(jì)以太網(wǎng)接口S5PV210(ARMCortexTM-A8Core)SDRAMNANDFLASHNORFLASHSD卡接口系統(tǒng)電源

嵌入式網(wǎng)絡(luò)控制系統(tǒng)通過(guò)串行接口直接傳送到S5PV210微處理器上的Web服務(wù)器,之后通過(guò)瀏覽器,用戶(hù)可以方便的監(jiān)測(cè)控制。硬件平臺(tái)設(shè)計(jì)框圖如圖所示:2.3軟硬件平臺(tái)設(shè)計(jì)以太網(wǎng)接口SDRAMNANDF52.3.2軟件平臺(tái)設(shè)計(jì)

嵌入式網(wǎng)絡(luò)控制系統(tǒng)通過(guò)RS-232串行接口直接傳送到SamsungS5PV210微處理器上的WEB服務(wù)器,之后通過(guò)瀏覽器,用戶(hù)可以方便的監(jiān)測(cè)控制。

因此系統(tǒng)軟件部分主要由數(shù)據(jù)采集、數(shù)據(jù)傳輸、服務(wù)器數(shù)據(jù)處理和CGI程序訪問(wèn)等幾大部分。系統(tǒng)工作流程如下圖所示:PCIECGI應(yīng)用程序驅(qū)動(dòng)程序HTML網(wǎng)頁(yè)數(shù)據(jù)采集程序2.3.2軟件平臺(tái)設(shè)計(jì)PCIECGI應(yīng)用程序驅(qū)動(dòng)程序H62.3.3Goahead服務(wù)器的特點(diǎn)以及使用方式

Goahead服務(wù)器是一款主要面向嵌入式系統(tǒng)的Web服務(wù)器。 GoAheadWebserver是跨平臺(tái)的服務(wù)器軟件它的特點(diǎn)是: 1、很小的內(nèi)存消耗 2、支持認(rèn)證功能DigestAccessAuthentication(DAA) 3、支持安全的通信,例如SSL(安全的套接字層) 4、支持動(dòng)態(tài)Web頁(yè)面,如ASP頁(yè)面 5、可以使用傳統(tǒng)的C語(yǔ)言編程定制Web頁(yè)面里的HTML標(biāo)簽 6、支持CGI(公共網(wǎng)關(guān)編程接口) 7、嵌入式的JavaScript腳本翻譯器 8、獨(dú)特的URL分析器2.3.3Goahead服務(wù)器的特點(diǎn)以及使用方式 Goah7三.課程設(shè)計(jì)的步驟與實(shí)現(xiàn)3.1GoAhead網(wǎng)絡(luò)服務(wù)器移植 1.下載Goahead源碼 2.GoAhead源碼復(fù)制及解壓縮 3.為了GoAhead編譯的源碼修改對(duì)“Makefile”進(jìn)行修改

main.c和misc.c文件 4.GoAhead編譯生成了“webs”網(wǎng)絡(luò)服務(wù)器執(zhí)行文件和“l(fā)ibwebs.a”庫(kù) 5.創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件 6.創(chuàng)建在目標(biāo)板上連接網(wǎng)絡(luò)服務(wù)器時(shí)出現(xiàn)的網(wǎng)頁(yè)目錄(/web),創(chuàng)建包含cgi的目錄(/web/cgi-bin)。 7.向目標(biāo)板下載GoAhead執(zhí)行文件及main.html 8.在目標(biāo)板上運(yùn)行GoAhead 9.通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器

三.課程設(shè)計(jì)的步驟與實(shí)現(xiàn)3.1GoAhead網(wǎng)絡(luò)服務(wù)器移植83.2通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接開(kāi)始編譯HTML文件(如:first.html)編譯.c文件(如:first.c)通過(guò)gcc.將c文件生成CGI文件將HTML.cgi文件用TFTP指令下載到開(kāi)發(fā)板并運(yùn)行結(jié)束 CGI(公用網(wǎng)關(guān)接口)規(guī)定了Web服務(wù)器調(diào)用其他可執(zhí)行程序(CGI程序)的接口協(xié)議標(biāo)準(zhǔn)。Web服務(wù)器通過(guò)調(diào)用CGI程序?qū)崿F(xiàn)和Web瀏覽器的交互,也就是CGI程序接受Web瀏覽器發(fā)送給Web服務(wù)器的信息,進(jìn)行處理,將響應(yīng)結(jié)果再回送給Web服務(wù)器及Web瀏覽器。CGI程序一般完成Web網(wǎng)頁(yè)中表單(Form)數(shù)據(jù)的處理、數(shù)據(jù)庫(kù)查詢(xún)和實(shí)現(xiàn)與傳統(tǒng)應(yīng)用系統(tǒng)的集成等工作。CGI接口標(biāo)準(zhǔn)包括:1標(biāo)準(zhǔn)輸入

可通過(guò)標(biāo)準(zhǔn)輸入(stdin)從Web服務(wù)器得到輸

入信息2環(huán)境變量 Web服務(wù)器和CGI接口設(shè)置了自己的一些環(huán)

境變量,用來(lái)向CGI程序傳遞一些重要的參數(shù)3標(biāo)準(zhǔn)輸出

通過(guò)標(biāo)準(zhǔn)輸出(stdout)將輸出信息傳送給Web服務(wù)器(html形式),就在命令行狀態(tài)調(diào)試CGI程序,并且得到它們的輸出。3.2通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接開(kāi)始編譯H9虛擬機(jī)及超級(jí)終端截圖:虛擬機(jī)及超級(jí)終端截圖:10Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件11Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件12通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接

實(shí)驗(yàn)截圖:通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接13Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件143.3嵌入式Web服務(wù)器的實(shí)現(xiàn)

3.3.1利用Web的LED控制程序

LED控制程序創(chuàng)建創(chuàng)建8bitled.html;8bitled.c文件LED控制程序編譯8bitled.html和8bitled.cgi復(fù)制到/tftpboot目錄中向目標(biāo)板下載LED控制程序通過(guò)tftp下載8bitled.html和8bitled.cgi,并復(fù)制到/web和/web/cgi-bin接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器

并向地址欄中輸入“65/8bitled.html”并連接,則8bitled.html網(wǎng)頁(yè)運(yùn)行。

向地址欄中輸入“http://65/8bitled.html

向文本框中輸入兩位十六進(jìn)制數(shù)并單擊input按鈕。在這里,輸入“1a”后,單擊“input”按鈕。3.3嵌入式Web服務(wù)器的實(shí)現(xiàn)LED控制程序創(chuàng)建創(chuàng)建8b15

LED控制頁(yè)面運(yùn)行確認(rèn)及測(cè)試

實(shí)驗(yàn)截圖:

16Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件17Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件18Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件193.3.27-Segment設(shè)備驅(qū)動(dòng)程序7Segment控制程序創(chuàng)建vi7segment.htmlvi7segment.c7Segment控制程序編譯將7segment.html和7segment.cgi文件復(fù)制到/tftpboot目錄中。向目標(biāo)板下載7Segment控制程序通過(guò)tftp下載7segment.html和7segment.cgi文件,向/web和/web/cgi-bin目錄中復(fù)制文件。接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器。

如果運(yùn)行網(wǎng)頁(yè)瀏覽器并向地址欄中輸入“65/7segment.html”并連接,則7segment.html網(wǎng)頁(yè)運(yùn)行。

向地址欄中輸入“65/7segment.html”。

向文本框中輸入六位十進(jìn)制數(shù)并單擊input按鈕。在這里,輸入”123456”后單擊“input”按鈕。3.3.27-Segment設(shè)備驅(qū)動(dòng)程序7Segment20

7segment控制頁(yè)面運(yùn)行確認(rèn)及測(cè)試

實(shí)驗(yàn)截圖:Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件21Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件223.3.3利用Web的textlcd控制程序

Textlcd控制程序創(chuàng)建創(chuàng)建textlcd.html創(chuàng)建textlcd.c編譯textlcd控制程序?qū)extlcd.html和textlcd.cgi文件復(fù)制到/tftpboot目錄中。向目標(biāo)板下載textlcd控制程序下載textlcd.html和textlcd.cgi文件,向/web和/web/cgi-bin目錄中復(fù)制文件。接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器。

如果運(yùn)行網(wǎng)頁(yè)瀏覽器并向地址欄中輸入“65/textlcd.html”并連接,則textlcd.html網(wǎng)頁(yè)運(yùn)行。

向地址輸入欄輸入“65/textlcd.html”。

輸入文本框的Line1和Line2文字并單擊“input”按鈕。

如果畫(huà)面上出現(xiàn)“LCDDone”消息窗,則可以清楚/web/cgi-bin中的textlcd.cgi程序順利運(yùn)行。3.3.3利用Web的textlcd控制程序Text23

textlcd控制頁(yè)面運(yùn)行確認(rèn)

實(shí)驗(yàn)截圖:Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件24Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件25Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件26textlcd控制頁(yè)面運(yùn)行確認(rèn)

實(shí)驗(yàn)截圖:趙震璽周凱亮*查偉王俊杰textlcd控制頁(yè)面運(yùn)行確認(rèn)趙震璽周凱亮*查偉王俊杰27四

總結(jié)4.1實(shí)驗(yàn)認(rèn)知與發(fā)現(xiàn)的問(wèn)題

本次課程設(shè)計(jì)是嵌入式開(kāi)發(fā)與應(yīng)用,雖然只有短短的兩個(gè)星期,但在這兩個(gè)星期里我們學(xué)到了很多。首先,我們對(duì)計(jì)嵌入式開(kāi)發(fā)有了進(jìn)一步的掌握?;菊莆樟薌oahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制并在網(wǎng)絡(luò)上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。但在完成這些題目的同時(shí),我們也發(fā)現(xiàn)了自己的很多問(wèn)題:

第一,比如很多的專(zhuān)業(yè)術(shù)語(yǔ)都沒(méi)有聽(tīng)說(shuō)過(guò),只好在同學(xué)的幫助和網(wǎng)絡(luò)的幫助下,勉勉強(qiáng)強(qiáng)完成了任務(wù),我們也知道了自己的很多不足,在往后的時(shí)間中還要繼續(xù)研究。

第二,在我們使用tftp傳送文件的時(shí)候忘記修改虛擬機(jī)IP地址導(dǎo)致沒(méi)有傳送文件成功。

第三,在我們將文件傳送成功的時(shí)候,網(wǎng)頁(yè)文件已經(jīng)能在goahead中顯示出來(lái),但是輸入數(shù)據(jù)的時(shí)候,開(kāi)發(fā)板并沒(méi)有顯示出來(lái),后面才發(fā)現(xiàn)是傳送文件時(shí),忘記用chomd命令給CGI文件加上權(quán)限,我們通過(guò)分析及時(shí)的解決了這個(gè)問(wèn)題。第四,我們?cè)谕瓿蓪?shí)驗(yàn)后的第二天再次開(kāi)啟虛擬機(jī)并不能將這些網(wǎng)頁(yè)文件打開(kāi),原來(lái)是每次啟動(dòng)虛擬機(jī)它的IP地址都是原地址,要將它改成00并通過(guò)超級(jí)終端運(yùn)行網(wǎng)頁(yè)文件。

第五,在運(yùn)行網(wǎng)頁(yè)文件的時(shí)候,首先要查看進(jìn)程,要將進(jìn)程中bin目錄下的webs進(jìn)程殺除再運(yùn)行網(wǎng)頁(yè)文件才能將它打開(kāi)。

最后,通過(guò)本次實(shí)驗(yàn)我們知道了團(tuán)隊(duì)力量的重要性,有的題目單靠單人的力量是很難完成的,但是經(jīng)過(guò)大家的合作,相比一個(gè)人來(lái)說(shuō)完成的容易了點(diǎn)。四 總結(jié)4.1實(shí)驗(yàn)認(rèn)知與發(fā)現(xiàn)的問(wèn)題284.2實(shí)驗(yàn)效果分析

本次實(shí)驗(yàn)雖然能將開(kāi)發(fā)板中的LED,7-Segment,TextLCD成功顯示出來(lái)。但是本次實(shí)驗(yàn)的效果仍有幾點(diǎn)不足。

第一:通過(guò)goahead網(wǎng)頁(yè)服務(wù)器編寫(xiě)LED,7-Segment,TextLCD的網(wǎng)頁(yè)較為簡(jiǎn)單。

第二:控制開(kāi)發(fā)板中7-Segment的顯示時(shí)間沒(méi)有進(jìn)行精確的控制。4.3課程設(shè)計(jì)心得體會(huì)

本次課程設(shè)計(jì)也獲得一個(gè)經(jīng)驗(yàn):在寫(xiě)一個(gè)程序的時(shí)候,一定要事先把程序原理方框圖化出來(lái)。以前總覺(jué)得這樣做沒(méi)必要,很浪費(fèi)時(shí)間。但是,這次課程設(shè)計(jì)完全改變了我以前的那種錯(cuò)誤的認(rèn)識(shí)。這次課程設(shè)計(jì)中碰到的那些需要很多代碼才能完成的任務(wù),畫(huà)程序方框圖是很有必要的,因?yàn)橥ㄟ^(guò)程序方框圖,在做設(shè)計(jì)的過(guò)程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個(gè)很清楚的思路,而且在程序測(cè)試的過(guò)程中也有利于查錯(cuò)。

經(jīng)過(guò)本次試驗(yàn)我們這次做的實(shí)驗(yàn)還算是比較成功的,因?yàn)槲覀兺瑫r(shí)也在不知不覺(jué)中提高了動(dòng)手能力和獨(dú)立分析思考問(wèn)題、解決問(wèn)題的能力。

這兩個(gè)星期的嵌入式應(yīng)用的課程設(shè)計(jì),使我們更加系統(tǒng)的認(rèn)識(shí)和了解Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制的工作原理,更深層次的認(rèn)識(shí)了嵌入式開(kāi)發(fā),相信在今后的學(xué)習(xí)以及相關(guān)工作上會(huì)有很大幫助。致謝

感謝孫老師和范老師在課設(shè)中給予的指導(dǎo)和鼓勵(lì)。感謝學(xué)校提供機(jī)會(huì),能夠讓我們?cè)趯?shí)踐中培養(yǎng)動(dòng)手能力,將理論與實(shí)際結(jié)合再一起。4.2實(shí)驗(yàn)效果分析29五.代碼附錄參考資料5.17segment實(shí)驗(yàn)代碼附錄

/*********************************************************************** 7-SegmentCGIProgram**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineSEG_GRID_OFFSET 0x30#define SEG_DATA_OFFSET 0x32typedefstruct{ charname[128]; charval[128];}entry;五.代碼附錄參考資料5.17segment實(shí)驗(yàn)代碼附錄/30voidgetword(char*word,char*line,charstop){ intx=0,y=0; for(x=0;((line[x])&&(line[x]!=stop));x++)word[x]=line[x]; word[x]='\0'; if(line[x])++x; while(line[y++]=line[x++]);}intsizeofword(char*word){ inti=0; for(i=0;i<10;i++){ if(word[i]=='\0')break; } returni;}unsignedintGetsegcode(charx){ unsignedintcode;switch(x){ case'0':code=0xfc;break; case'1':code=0x60;break; case'2':code=0xda;break; case'3':code=0xf2;break; case'4':code=0x66;break; case'5':code=0xb6;break; case'6':code=0xbe;break;

case'7':code=0xe4;break;

voidgetword(char*word,char31case'8':code=0xfe;break; case'9':code=0xf6;break; case'a': case'A':code=0xfa;break; case'b': case'B':code=0x3e;break; case'c': case'C':code=0x1a;break; case'd': case'D':code=0x7a;break; case'e': case'E':code=0x9e;break; case'f': case'F':code=0x8e;break; default:code=0;break; } returncode;}intmain(){ char*cl; intk; unsignedintlow=0,high=0; entryentries; unsignedshortdigit[6]={0x20,0x10,0x08,0x04,0x02,0x01}; unsignedshortdata[6]; inti,j,m; intfd; unsignedshort*addr_fpga; unsignedshort*addr_grid,*addr_data; printf("Content-type:text/html\n\n"); printf("<html>\n<head><title>7-Segmentcgiprogram</title></head>\n");case'8':code=0xfe;break;32printf("<body>\n"); if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ printf("memopenfail\n"); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fd,FPGA_BASEADDRESS); addr_grid=addr_fpga+SEG_GRID_OFFSET/sizeof(unsignedshort); addr_data=addr_fpga+SEG_DATA_OFFSET/sizeof(unsignedshort); if(addr_grid<0|addr_data<0){ close(fd); printf("mmaperror\n"); exit(1); } cl=(char*)getenv("QUERY_STRING"); getword(,cl,'='); getword(entries.val,cl,'&'); k=sizeofword(entries.val); for(i=0;i<k;i++) data[(k-i)-1]=Getsegcode(entries.val[i]); for(j=0;j<200;j++){ for(i=0;i<k;i++){ *addr_grid=digit[i]; *addr_data=data[i]; for(m=0;m<65536;m++); } }

*addr_grid=~digit[0]; *addr_data=0; munmap(addr_grid,4096); munmap(addr_data,4096); close(fd);printf("<body>\n"); *addr_grid33if(k!=0) printf("<br><center>7-SegmentDone<br></center>"); elseprintf("<br><center>Youenteredthewrongvalue!<br></center>"); printf("<hr>"); printf("</body>\n</html>"); return0;}

5.17segment

HTML源碼附錄

<html><head><title>7segmentcgiprogram</title></head><body> <formmethod=getaction="cgi-bin/7segment.cgi"> <p><p><p>向7-Segment中輸入要顯示的十進(jìn)制數(shù)。

<inputtype="text"name="value"maxlength="6"size="6">if(k!=0) printf("<br><cente345.2LED實(shí)驗(yàn)代碼附錄

<inputtype="submit"name="button"value="input"> /*********************************************************************8-BitLEDCGIProgram

**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineLED_OFFSET 0x20typedefstruct{ charname[128]; charval[128];}entry;voidgetword(char*word,char*line,charstop){ intx=0,y=0; for(x=0;((line[x])&&(line[x]!=stop));x++)word[x]=line[x]; word[x]='\0'; if(line[x])++x; while(line[y++]=line[x++]);}5.2LED實(shí)驗(yàn)代碼附錄<inputtype="sub35intmain(){ intfd;unsignedshort*addr_fpga,*addr_led; char*cl; unsignedshortval; entryentries; printf("Content-type:text/html\n\n"); printf("<html>\n<head><title>8bitLEDcgiprogram</title></head>\n"); printf("<body>\n"); cl=(char*)getenv("QUERY_STRING"); getword(,cl,'='); getword(entries.val,cl,'&'); val=(unsignedshort)strtol(entries.val,NULL,16); if(val==0){ if(!((entries.val[0]=='0'&&entries.val[1]=='\0')||(entries.val[0]=='0'&&entries.val[1]=='0'))){ printf("<p>Youenteredthewrongvalue!"); exit(1);} } if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ printf("memopenfail,%d\n",fd); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fd,FPGA_BASEADDRESS); addr_led=addr_fpga+LED_OFFSET/sizeof(unsignedshort); *addr_led=val|0x100; munmap(addr_fpga,4096); close(fd); printf("<br><center>Youentered<b>'0x%x'</b></center>",val); printf("<hr>"); printf("</body>\n</html>"); return0;}intmain() if((fd=open("/dev/m36<html><head><title>8bitledcgiprogram</title></head><body><formmethod=getaction="cgi-bin/8bitled.cgi"><p><p><p>輸入兩位十六進(jìn)制值:  <inputtype="text"name="value"maxlength="2"size="2"><inputtype="submit"name="button"value="input"></form>5.2LED

HTML源碼附錄

5.2LEDHTML源碼附錄375.3LCD實(shí)驗(yàn)代碼附錄

/****************************************************************** TextLCDCGIProgram*****************************************************************/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<sys/mman.h>#include<fcntl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineTEXTLCD_OFFSET 0x10voidsetcommand(unsignedshortcommand);voidwritebyte(charch);voidinitialize_textlcd();voidwriteTextLcd(introw,char*str,intlength);intfunction_set(introws,intnfonts);intdisplay_control(intdisplay_enable,intcursor_enable,intnblink);intcusrsor_shit(intset_screen,intset_rightshit);intentry_mode_set(intincrease,intnshift);intreturn_home();intclear_display();intset_ddram_address(intpos);voidsplitword(char*out,char*in,charstop);voidunescape_url(char*url);charx2c(char*x);unsignedshort*pTextlcd;typedefstruct{ charname[128]; charval[128];}entry[2];5.3LCD實(shí)驗(yàn)代碼附錄/****************38intget_get(entryentries){ charqs[128]; inti; //bzero(qs,sizeof(qs)); sprintf(qs,"%s\0",getenv("QUERY_STRING")); for(i=0;*qs&&i<2;i++){ splitword(entries[i].val,qs,'&'); unescape_url(entries[i].val); splitword(entries[i].name,entries[i].val,'='); } returni;}voidsplitword(char*out,char*in,charstop){ inti,j; while(*in=='')in++; for(i=0;in[i]&&(in[i]!=stop);i++)out[i]=in[i]; out[i]='\0'; if(in[i])++i; while(in[i]=='')i++; for(j=0;in[j];)in[j++]=in[i++];}voidunescape_url(char*url){ inti,j;for(i=0,j=0;url[j];++i,++j){ if((url[i]=url[j])=='%'){ url[i]=x2c(&url[j+1]); j+=2; }elseif(url[i]=='+'){ url[i]=''; } }intget_get(entryentries)for(39 url[i]='\0';}charx2c(char*x){ charc;

c=(x[0]>='A'?((x[0]&0xdf)-'A')+10:(x[0]-'0')); c*=16; c+=(x[1]>='A'?((x[1]&0xdf)-'A')+10:(x[1]-'0')); returnc;}intmain(intargc,char**argv){ chardata[2][128]; intfd; entryentries; char*cl; unsignedshort*addr_fpga; printf("Content-type:text/html\n\n"); cl=(char*)getenv("QUERY_STRING"); get_get(entries); if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ perror("memopenfail\n"); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,

fd,FPGA_BASEADDRESS); pTextlcd=addr_fpga+TEXTLCD_OFFSET/sizeof(unsignedshort); if(pTextlcd<0){ close(fd);printf("mmaperror\n");exit(1); }

initialize_textlcd(); strcpy(data[0],entries[0].val); url[i]='\0';40 strcpy(data[1],entries[1].val); writeTextLcd(1,data[0],strlen(data[0])); writeTextLcd(2,data[1],strlen(data[1])); munmap(pTextlcd,4096); close(fd); printf("<br><center>LCDDone!</center><br>"); return0;}voidsetcommand(unsignedshortcommand){ command&=0x00FF; *pTextlcd=command|0x0000; usleep(1000); *pTextlcd=command|0x0100; usleep(1000); *pTextlcd=command|0x0000; usleep(1000);

}voidwritebyte(charch){ unsignedshortdata; data=ch&0x00FF; *pTextlcd=data&0x400; usleep(1000); *pTextlcd=data|0x500; usleep(1000); *pTextlcd=data|0x400; usleep(1000);}

strcpy(data[1],entries[1].va41voidinitialize_textlcd(){ function_set(2,0);//FunctionSet:8bit,display2lines,5x7mod display_control(1,0,0);//Displayon,Cursoroff clear_display();//Displayclear entry_mode_set(1,0);//EntryModeSet:shiftrightcursor return_home();//gohome}//sendFunctionSetcommandtothetextlcd//rows=2:=>2rows,rows=1=>1rows//nfonts=1:=>5x10dot,nfonts=0:5x7dotintfunction_set(introws,intnfonts){ unsignedshortcommand=0x30;if(rows==2)command|=0x08; elseif(rows==1)command&=0xf7; elsereturn-1;

command=nfonts?(command|0x04):command; setcommand(command);

return1;}intdisplay_control(intdisplay_enable,intcursor_enable,intnblink){ unsignedshortcommand=0x08; command=display_enable?(command|0x04):command; command=cursor_enable?(command|0x02):command; command=nblink?(command|0x01):command; setcommand(command); return1;}voidinitialize_textlcd()if(ro42intcusrsor_shit(intset_screen,intset_rightshit){ unsignedshortcommand=0x10; command=set_screen?(command|0x08):command; command=set_rightshit?(command|0x04):command; setcommand(command); return1;}intentry_mode_set(intincrease,intnshift){ unsignedshortcommand=0x04; command=increase?(command|0x2):command; command=nshift?(command|0x1):command; setcommand(command); return1;}intreturn_home(){ unsignedshortcommand=0x02; setcommand(command); return1;}intclear_display(){ unsignedshortcommand=0x01; setcommand(command); return1;}

intset_ddram_address(intpos){ unsignedshortcommand=0x80; command+=pos; setcommand(command); return1;}intcusrsor_shit(intset_scree43voidwriteTextLcd(introw,char*str,intlength){ inti;

if(row==1)set_ddram_address(0x0); elseif(row==2)set_ddram_address(0x40);

for(i=0;i<length;i++)writebyte(str[i]);}

<html><head><title>TextLCDCGIProgram</title></head><body> <formmethod=getaction="cgi-bin/textlcd.cgi"> <p><p><p>向LCD中輸入要顯示的字符。<br><br>Line1 <inputtype="text"name="form2"maxlength="16"size="20"><br>Line2

#include<stdio.h>intmain(){printf("Content-type:text/html\n\n");printf("<html>\n<head><title>TheFirstCGIprogram</title></head>\n");printf("<body>\n<center>ItisaCGIprogramtest</center>\n<body>\n</html>");return0;}<html><head><title>TESTCGIPROGRAM!</title></head><body><center><ahref="cgi-bin/first.cgi">ThefirstCGIPROGRAM!</a></center></body></html>5.3LCD實(shí)驗(yàn)代碼附錄voidwriteTextLcd(introw,cha44<html><head><title>TheFirstwebstest!</title></head><bodybgcolor="white"text="black"link="blue"vlink="purple"alink="red"><tablealign="center"cellpadding="0"cellspacing="0"width="100%"height="100"bgcolor="#006699"><tr><td><palign="center"><fontcolor=whiteface="ArialBlack"><spanstyle="font-size:22pt;"><b>歡迎使用goaheadweb服務(wù)器<br></b></span></font></p><tr><td><palign="center"><fontcolor=whiteface="ArialBlack"><spanstyle="font-size:12pt;"><b>組員:周凱亮查偉王俊杰趙震璽張慧成<br></b></span></font></p></td></tr></table></body><bodybgcolor="white"text="black"link="blue"vlink="purple"alink="red"><divalign="left"><tablecellpadding="0"cellspacing="0"width="700"><tr><tdwidth="50"height="20"><p> </p></td><tdwidth="700"height="20"><p> </p></td></tr><tr><tdwidth="50"><p> </p></td><tdwidth="700"><ul><divalign="left"><br><li><fontsize="3"color="#000000">

課程設(shè)計(jì)目的:本課題設(shè)計(jì)嘗試移植嵌入式服務(wù)器上廣泛使用的網(wǎng)絡(luò)服務(wù)器中稱(chēng)為“GoAhead”的網(wǎng)絡(luò)服務(wù)器。

并且,利用CGI程序,嘗試在網(wǎng)絡(luò)上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。</font></li></ul><ul><li><fontsize="3"color="#000000">5.4TextledHTML源碼5.4TextledHTML源碼45Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件465.5參考文獻(xiàn) 1.《嵌入式開(kāi)發(fā)與應(yīng)用》課程設(shè)計(jì)指導(dǎo)書(shū) 2.《嵌入式開(kāi)發(fā)與應(yīng)用》實(shí)驗(yàn)指導(dǎo)書(shū) 3.田澤主編,《嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用教程(第2版)》,北京航空航天大學(xué)出版社,2010 4.朱華生等主編,《嵌入式系統(tǒng)原理與應(yīng)用:基于ARM微處理器和Linux操作系統(tǒng)》,清華大學(xué)出版社,2012 5.孫紀(jì)坤等主編,《嵌入式Linux系統(tǒng)開(kāi)發(fā)技術(shù)詳解:基于ARM》,人民郵電出版社,2008 6.譚浩強(qiáng)主編,《C語(yǔ)言程序設(shè)計(jì)》,清華大學(xué)出版社,2010

5.5參考文獻(xiàn)47Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)小組成員:周凱亮查偉王俊杰趙震璽張慧成Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)小組成員:周凱亮查偉48一.課程設(shè)計(jì)目的和意義

1.1課程設(shè)計(jì)目的

課程設(shè)計(jì)的主要目的是通過(guò)實(shí)際的嵌入式應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例掌握嵌入式系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)的技能和專(zhuān)門(mén)知識(shí),積累實(shí)踐和工程經(jīng)驗(yàn)。

本課題設(shè)計(jì)嘗試移植嵌入式服務(wù)器上廣泛使用的網(wǎng)絡(luò)服務(wù)器中稱(chēng)為“GoAhead”的網(wǎng)絡(luò)服務(wù)器。并且,利用CGI程序,嘗試在網(wǎng)絡(luò)上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。1.2課程設(shè)計(jì)要求本課題所設(shè)計(jì)的系統(tǒng)要求實(shí)現(xiàn)以下功能。 1.將“GoAhead”網(wǎng)絡(luò)服務(wù)器移植到實(shí)驗(yàn)箱目標(biāo)板Linux系統(tǒng)上; 2.創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件; 3.完成編寫(xiě)利用Web的LED,7-Segment,TextLCD的控制程序。一.課程設(shè)計(jì)目的和意義

1.1課程設(shè)計(jì)目的49二.課程設(shè)計(jì)的需求與方法2.2需求分析

2.2.1功能需求分析

遠(yuǎn)程控制是當(dāng)前信息技術(shù)領(lǐng)域的熱點(diǎn),使用遠(yuǎn)程控制技術(shù),我們可以克服因地域差異而造成的操作不便,讓網(wǎng)絡(luò)的效率得到更大的發(fā)揮。隨著技術(shù)的發(fā)展與網(wǎng)絡(luò)的普及,目前遠(yuǎn)程控制技術(shù)的應(yīng)用領(lǐng)域已經(jīng)相當(dāng)廣泛。我們不僅可以通過(guò)遠(yuǎn)程控制技術(shù)管理遠(yuǎn)端電腦,解決遠(yuǎn)端電腦的故障,與其他同事通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程協(xié)作,一起編輯一份文檔或者與其他團(tuán)隊(duì)成員交流信息,還可以在家里或旅途中使用公司內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)與辦公設(shè)備,實(shí)現(xiàn)遠(yuǎn)程辦公。

2.2.2性能需求分析

(1)準(zhǔn)確性與及時(shí)性

(2)靈活性

(3)響應(yīng)速度二.課程設(shè)計(jì)的需求與方法50

2.2.3課題任務(wù)目標(biāo)

(1)將“GoAhead”網(wǎng)絡(luò)服務(wù)器移植到實(shí)驗(yàn)箱目標(biāo)板Linux系統(tǒng)上;

(2)創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件;

(3)完成編寫(xiě)利用Web的LED,7-Segment,TextLCD的控制程序。

2.2.4輸入輸出的要求

(1)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)輸入兩個(gè)16進(jìn)制的數(shù),通過(guò)CGI程序?qū)⑵滢D(zhuǎn)換成8位二進(jìn)制數(shù)來(lái)控制開(kāi)發(fā)板中的LED0~8的暗滅。(1為亮0為滅)

(2)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)輸入6位16進(jìn)制的數(shù),在開(kāi)發(fā)板的七段碼中顯示出來(lái)。

(3)鼠標(biāo)點(diǎn)擊WEB輸入,通過(guò)鍵盤(pán)在網(wǎng)頁(yè)的Line1和Line2中輸入一串字母或數(shù)字,在開(kāi)發(fā)板的TextLCD中將輸入的這些字符對(duì)應(yīng)的顯示出來(lái)。

2.2.5系統(tǒng)運(yùn)行環(huán)境

硬件環(huán)境:pc機(jī)、HBE-EMPOSIII-SV210hardware、串口線、網(wǎng)線等

軟件環(huán)境:windows、ubuntu等一些應(yīng)用軟件

宿主機(jī)開(kāi)發(fā)環(huán)境:交叉編譯環(huán)境、調(diào)試環(huán)境

2.2.3課題任務(wù)目標(biāo)512.3軟硬件平臺(tái)設(shè)計(jì)2.3.1硬件平臺(tái)設(shè)計(jì)以太網(wǎng)接口S5PV210(ARMCortexTM-A8Core)SDRAMNANDFLASHNORFLASHSD卡接口系統(tǒng)電源

嵌入式網(wǎng)絡(luò)控制系統(tǒng)通過(guò)串行接口直接傳送到S5PV210微處理器上的Web服務(wù)器,之后通過(guò)瀏覽器,用戶(hù)可以方便的監(jiān)測(cè)控制。硬件平臺(tái)設(shè)計(jì)框圖如圖所示:2.3軟硬件平臺(tái)設(shè)計(jì)以太網(wǎng)接口SDRAMNANDF522.3.2軟件平臺(tái)設(shè)計(jì)

嵌入式網(wǎng)絡(luò)控制系統(tǒng)通過(guò)RS-232串行接口直接傳送到SamsungS5PV210微處理器上的WEB服務(wù)器,之后通過(guò)瀏覽器,用戶(hù)可以方便的監(jiān)測(cè)控制。

因此系統(tǒng)軟件部分主要由數(shù)據(jù)采集、數(shù)據(jù)傳輸、服務(wù)器數(shù)據(jù)處理和CGI程序訪問(wèn)等幾大部分。系統(tǒng)工作流程如下圖所示:PCIECGI應(yīng)用程序驅(qū)動(dòng)程序HTML網(wǎng)頁(yè)數(shù)據(jù)采集程序2.3.2軟件平臺(tái)設(shè)計(jì)PCIECGI應(yīng)用程序驅(qū)動(dòng)程序H532.3.3Goahead服務(wù)器的特點(diǎn)以及使用方式

Goahead服務(wù)器是一款主要面向嵌入式系統(tǒng)的Web服務(wù)器。 GoAheadWebserver是跨平臺(tái)的服務(wù)器軟件它的特點(diǎn)是: 1、很小的內(nèi)存消耗 2、支持認(rèn)證功能DigestAccessAuthentication(DAA) 3、支持安全的通信,例如SSL(安全的套接字層) 4、支持動(dòng)態(tài)Web頁(yè)面,如ASP頁(yè)面 5、可以使用傳統(tǒng)的C語(yǔ)言編程定制Web頁(yè)面里的HTML標(biāo)簽 6、支持CGI(公共網(wǎng)關(guān)編程接口) 7、嵌入式的JavaScript腳本翻譯器 8、獨(dú)特的URL分析器2.3.3Goahead服務(wù)器的特點(diǎn)以及使用方式 Goah54三.課程設(shè)計(jì)的步驟與實(shí)現(xiàn)3.1GoAhead網(wǎng)絡(luò)服務(wù)器移植 1.下載Goahead源碼 2.GoAhead源碼復(fù)制及解壓縮 3.為了GoAhead編譯的源碼修改對(duì)“Makefile”進(jìn)行修改

main.c和misc.c文件 4.GoAhead編譯生成了“webs”網(wǎng)絡(luò)服務(wù)器執(zhí)行文件和“l(fā)ibwebs.a”庫(kù) 5.創(chuàng)建作為網(wǎng)絡(luò)服務(wù)器的索引文件使用的index.html文件 6.創(chuàng)建在目標(biāo)板上連接網(wǎng)絡(luò)服務(wù)器時(shí)出現(xiàn)的網(wǎng)頁(yè)目錄(/web),創(chuàng)建包含cgi的目錄(/web/cgi-bin)。 7.向目標(biāo)板下載GoAhead執(zhí)行文件及main.html 8.在目標(biāo)板上運(yùn)行GoAhead 9.通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器

三.課程設(shè)計(jì)的步驟與實(shí)現(xiàn)3.1GoAhead網(wǎng)絡(luò)服務(wù)器移植553.2通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接開(kāi)始編譯HTML文件(如:first.html)編譯.c文件(如:first.c)通過(guò)gcc.將c文件生成CGI文件將HTML.cgi文件用TFTP指令下載到開(kāi)發(fā)板并運(yùn)行結(jié)束 CGI(公用網(wǎng)關(guān)接口)規(guī)定了Web服務(wù)器調(diào)用其他可執(zhí)行程序(CGI程序)的接口協(xié)議標(biāo)準(zhǔn)。Web服務(wù)器通過(guò)調(diào)用CGI程序?qū)崿F(xiàn)和Web瀏覽器的交互,也就是CGI程序接受Web瀏覽器發(fā)送給Web服務(wù)器的信息,進(jìn)行處理,將響應(yīng)結(jié)果再回送給Web服務(wù)器及Web瀏覽器。CGI程序一般完成Web網(wǎng)頁(yè)中表單(Form)數(shù)據(jù)的處理、數(shù)據(jù)庫(kù)查詢(xún)和實(shí)現(xiàn)與傳統(tǒng)應(yīng)用系統(tǒng)的集成等工作。CGI接口標(biāo)準(zhǔn)包括:1標(biāo)準(zhǔn)輸入

可通過(guò)標(biāo)準(zhǔn)輸入(stdin)從Web服務(wù)器得到輸

入信息2環(huán)境變量 Web服務(wù)器和CGI接口設(shè)置了自己的一些環(huán)

境變量,用來(lái)向CGI程序傳遞一些重要的參數(shù)3標(biāo)準(zhǔn)輸出

通過(guò)標(biāo)準(zhǔn)輸出(stdout)將輸出信息傳送給Web服務(wù)器(html形式),就在命令行狀態(tài)調(diào)試CGI程序,并且得到它們的輸出。3.2通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接開(kāi)始編譯H56虛擬機(jī)及超級(jí)終端截圖:虛擬機(jī)及超級(jí)終端截圖:57Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件58Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件59通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接

實(shí)驗(yàn)截圖:通過(guò)HTML中的CGI接口完成對(duì)開(kāi)發(fā)板的鏈接60Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件613.3嵌入式Web服務(wù)器的實(shí)現(xiàn)

3.3.1利用Web的LED控制程序

LED控制程序創(chuàng)建創(chuàng)建8bitled.html;8bitled.c文件LED控制程序編譯8bitled.html和8bitled.cgi復(fù)制到/tftpboot目錄中向目標(biāo)板下載LED控制程序通過(guò)tftp下載8bitled.html和8bitled.cgi,并復(fù)制到/web和/web/cgi-bin接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器

并向地址欄中輸入“65/8bitled.html”并連接,則8bitled.html網(wǎng)頁(yè)運(yùn)行。

向地址欄中輸入“http://65/8bitled.html

向文本框中輸入兩位十六進(jìn)制數(shù)并單擊input按鈕。在這里,輸入“1a”后,單擊“input”按鈕。3.3嵌入式Web服務(wù)器的實(shí)現(xiàn)LED控制程序創(chuàng)建創(chuàng)建8b62

LED控制頁(yè)面運(yùn)行確認(rèn)及測(cè)試

實(shí)驗(yàn)截圖:

63Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件64Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件65Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件663.3.27-Segment設(shè)備驅(qū)動(dòng)程序7Segment控制程序創(chuàng)建vi7segment.htmlvi7segment.c7Segment控制程序編譯將7segment.html和7segment.cgi文件復(fù)制到/tftpboot目錄中。向目標(biāo)板下載7Segment控制程序通過(guò)tftp下載7segment.html和7segment.cgi文件,向/web和/web/cgi-bin目錄中復(fù)制文件。接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器。

如果運(yùn)行網(wǎng)頁(yè)瀏覽器并向地址欄中輸入“65/7segment.html”并連接,則7segment.html網(wǎng)頁(yè)運(yùn)行。

向地址欄中輸入“65/7segment.html”。

向文本框中輸入六位十進(jìn)制數(shù)并單擊input按鈕。在這里,輸入”123456”后單擊“input”按鈕。3.3.27-Segment設(shè)備驅(qū)動(dòng)程序7Segment67

7segment控制頁(yè)面運(yùn)行確認(rèn)及測(cè)試

實(shí)驗(yàn)截圖:Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件68Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件693.3.3利用Web的textlcd控制程序

Textlcd控制程序創(chuàng)建創(chuàng)建textlcd.html創(chuàng)建textlcd.c編譯textlcd控制程序?qū)extlcd.html和textlcd.cgi文件復(fù)制到/tftpboot目錄中。向目標(biāo)板下載textlcd控制程序下載textlcd.html和textlcd.cgi文件,向/web和/web/cgi-bin目錄中復(fù)制文件。接下來(lái),通過(guò)主機(jī)PC的網(wǎng)頁(yè)瀏覽器連接網(wǎng)絡(luò)服務(wù)器。

如果運(yùn)行網(wǎng)頁(yè)瀏覽器并向地址欄中輸入“65/textlcd.html”并連接,則textlcd.html網(wǎng)頁(yè)運(yùn)行。

向地址輸入欄輸入“65/textlcd.html”。

輸入文本框的Line1和Line2文字并單擊“input”按鈕。

如果畫(huà)面上出現(xiàn)“LCDDone”消息窗,則可以清楚/web/cgi-bin中的textlcd.cgi程序順利運(yùn)行。3.3.3利用Web的textlcd控制程序Text70

textlcd控制頁(yè)面運(yùn)行確認(rèn)

實(shí)驗(yàn)截圖:Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件71Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件72Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)課件73textlcd控制頁(yè)面運(yùn)行確認(rèn)

實(shí)驗(yàn)截圖:趙震璽周凱亮*查偉王俊杰textlcd控制頁(yè)面運(yùn)行確認(rèn)趙震璽周凱亮*查偉王俊杰74四

總結(jié)4.1實(shí)驗(yàn)認(rèn)知與發(fā)現(xiàn)的問(wèn)題

本次課程設(shè)計(jì)是嵌入式開(kāi)發(fā)與應(yīng)用,雖然只有短短的兩個(gè)星期,但在這兩個(gè)星期里我們學(xué)到了很多。首先,我們對(duì)計(jì)嵌入式開(kāi)發(fā)有了進(jìn)一步的掌握?;菊莆樟薌oahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制并在網(wǎng)絡(luò)上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。但在完成這些題目的同時(shí),我們也發(fā)現(xiàn)了自己的很多問(wèn)題:

第一,比如很多的專(zhuān)業(yè)術(shù)語(yǔ)都沒(méi)有聽(tīng)說(shuō)過(guò),只好在同學(xué)的幫助和網(wǎng)絡(luò)的幫助下,勉勉強(qiáng)強(qiáng)完成了任務(wù),我們也知道了自己的很多不足,在往后的時(shí)間中還要繼續(xù)研究。

第二,在我們使用tftp傳送文件的時(shí)候忘記修改虛擬機(jī)IP地址導(dǎo)致沒(méi)有傳送文件成功。

第三,在我們將文件傳送成功的時(shí)候,網(wǎng)頁(yè)文件已經(jīng)能在goahead中顯示出來(lái),但是輸入數(shù)據(jù)的時(shí)候,開(kāi)發(fā)板并沒(méi)有顯示出來(lái),后面才發(fā)現(xiàn)是傳送文件時(shí),忘記用chomd命令給CGI文件加上權(quán)限,我們通過(guò)分析及時(shí)的解決了這個(gè)問(wèn)題。第四,我們?cè)谕瓿蓪?shí)驗(yàn)后的第二天再次開(kāi)啟虛擬機(jī)并不能將這些網(wǎng)頁(yè)文件打開(kāi),原來(lái)是每次啟動(dòng)虛擬機(jī)它的IP地址都是原地址,要將它改成00并通過(guò)超級(jí)終端運(yùn)行網(wǎng)頁(yè)文件。

第五,在運(yùn)行網(wǎng)頁(yè)文件的時(shí)候,首先要查看進(jìn)程,要將進(jìn)程中bin目錄下的webs進(jìn)程殺除再運(yùn)行網(wǎng)頁(yè)文件才能將它打開(kāi)。

最后,通過(guò)本次實(shí)驗(yàn)我們知道了團(tuán)隊(duì)力量的重要性,有的題目單靠單人的力量是很難完成的,但是經(jīng)過(guò)大家的合作,相比一個(gè)人來(lái)說(shuō)完成的容易了點(diǎn)。四 總結(jié)4.1實(shí)驗(yàn)認(rèn)知與發(fā)現(xiàn)的問(wèn)題754.2實(shí)驗(yàn)效果分析

本次實(shí)驗(yàn)雖然能將開(kāi)發(fā)板中的LED,7-Segment,TextLCD成功顯示出來(lái)。但是本次實(shí)驗(yàn)的效果仍有幾點(diǎn)不足。

第一:通過(guò)goahead網(wǎng)頁(yè)服務(wù)器編寫(xiě)LED,7-Segment,TextLCD的網(wǎng)頁(yè)較為簡(jiǎn)單。

第二:控制開(kāi)發(fā)板中7-Segment的顯示時(shí)間沒(méi)有進(jìn)行精確的控制。4.3課程設(shè)計(jì)心得體會(huì)

本次課程設(shè)計(jì)也獲得一個(gè)經(jīng)驗(yàn):在寫(xiě)一個(gè)程序的時(shí)候,一定要事先把程序原理方框圖化出來(lái)。以前總覺(jué)得這樣做沒(méi)必要,很浪費(fèi)時(shí)間。但是,這次課程設(shè)計(jì)完全改變了我以前的那種錯(cuò)誤的認(rèn)識(shí)。這次課程設(shè)計(jì)中碰到的那些需要很多代碼才能完成的任務(wù),畫(huà)程序方框圖是很有必要的,因?yàn)橥ㄟ^(guò)程序方框圖,在做設(shè)計(jì)的過(guò)程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個(gè)很清楚的思路,而且在程序測(cè)試的過(guò)程中也有利于查錯(cuò)。

經(jīng)過(guò)本次試驗(yàn)我們這次做的實(shí)驗(yàn)還算是比較成功的,因?yàn)槲覀兺瑫r(shí)也在不知不覺(jué)中提高了動(dòng)手能力和獨(dú)立分析思考問(wèn)題、解決問(wèn)題的能力。

這兩個(gè)星期的嵌入式應(yīng)用的課程設(shè)計(jì),使我們更加系統(tǒng)的認(rèn)識(shí)和了解Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制的工作原理,更深層次的認(rèn)識(shí)了嵌入式開(kāi)發(fā),相信在今后的學(xué)習(xí)以及相關(guān)工作上會(huì)有很大幫助。致謝

感謝孫老師和范老師在課設(shè)中給予的指導(dǎo)和鼓勵(lì)。感謝學(xué)校提供機(jī)會(huì),能夠讓我們?cè)趯?shí)踐中培養(yǎng)動(dòng)手能力,將理論與實(shí)際結(jié)合再一起。4.2實(shí)驗(yàn)效果分析76五.代碼附錄參考資料5.17segment實(shí)驗(yàn)代碼附錄

/*********************************************************************** 7-SegmentCGIProgram**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineSEG_GRID_OFFSET 0x30#define SEG_DATA_OFFSET 0x32typedefstruct{ charname[128]; charval[128];}entry;五.代碼附錄參考資料5.17segment實(shí)驗(yàn)代碼附錄/77voidgetword(char*word,char*line,charstop){ intx=0,y=0; for(x=0;((line[x])&&(line[x]!=stop));

溫馨提示

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

評(píng)論

0/150

提交評(píng)論