freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于web的嵌入式智能家居控制系統(tǒng)課程設(shè)計(jì)報(bào)告-文庫(kù)吧

2025-10-05 05:27 本頁(yè)面


【正文】 戶手冊(cè)中的網(wǎng)頁(yè)管道控制 LED 例子 [1],其網(wǎng)頁(yè)控制輸 入表格是用radio 的: input type=radio value=ping name=type,這種一組可以包含多個(gè)不同值的輸入方式對(duì)設(shè)計(jì)是很有利的,因此,直接選用 radio 作為網(wǎng)頁(yè)提交數(shù)據(jù)的表格類型。 2) 服務(wù)器反饋信息顯示:一般情況下,網(wǎng)頁(yè)數(shù)據(jù)更新需要用到其它語(yǔ)言編寫(xiě)網(wǎng)頁(yè)腳本,現(xiàn)有的知識(shí)水平無(wú)法直接解決這個(gè)問(wèn)題。退而求其次,決定使用 C語(yǔ)言文件操作函數(shù)來(lái)對(duì)網(wǎng)頁(yè)源碼進(jìn)行修改。為了方便實(shí)現(xiàn)這個(gè)操作,在網(wǎng)頁(yè)設(shè)計(jì)時(shí),做了如下約定: ① 網(wǎng)頁(yè)需要更新顯示的內(nèi)容用圖片顯示; . . ② 網(wǎng)頁(yè)所調(diào)用的圖片采用統(tǒng)一命名,同一 類圖片文件名僅相差一個(gè)字符; ③ 網(wǎng)頁(yè)要具備自動(dòng)刷新功能; 這樣做的好處是,用 C 語(yǔ)言文件操作函數(shù)修改一個(gè)字符,就能更改整個(gè)狀態(tài)顯示。 CGI 簡(jiǎn)介 1. 定義 [4]: CGI(Common Gateway Interface)是 HTTP 服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談 ”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上。 2. 功能: 絕大多數(shù)的 CGI 程序被用來(lái)解釋處理杰自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。 CGI 程序使網(wǎng)頁(yè)具有交互功能。 3. 運(yùn)行環(huán)境: CGI 程序在 UNIX 操作 系統(tǒng)上 CERN 或 NCSA 格式的服務(wù)器上運(yùn)行。在其它操作系統(tǒng)(如: windows NT 及 windows95 等)的服務(wù)器上也廣泛地使用 CGI 程序,同時(shí)它也適用于各種類型機(jī)器。 4. CGI 處理步驟: ⑴ 通過(guò) Inter 把用戶請(qǐng)求送到服務(wù)器。 ⑵ 服務(wù)器接收用戶請(qǐng)求并交給 CGI 程序處理。 ⑶ CGI 程序把處理結(jié)果傳送給服務(wù)器。 ⑷ 服務(wù)器把結(jié)果送回到用戶。 總結(jié)下, cgi 程序就是網(wǎng)頁(yè)和 PC 機(jī)交談的工具,它沒(méi)有特定的語(yǔ)言規(guī)范,只是一種中間程序,我們可以用 shell 語(yǔ)言編寫(xiě),也可以用 C 語(yǔ)言編寫(xiě)編程生成 cgi文件。網(wǎng)頁(yè)在 執(zhí)行 ACTION=**.cgi 的時(shí)候會(huì)調(diào)用 **.cgi 程序。本文設(shè)計(jì)最初參考網(wǎng)頁(yè)控制 led 例程,故仍然采取命名 ,以表對(duì)原作的感謝。一下是網(wǎng)頁(yè)部分源碼 [1]: form method=get action= name=LEDTEST div align=left table border=0 width=280 align=center . . tr td width=131 p align=center類型 /td td width=135 p align=center速率 /td /tr tr td width=131 p align=center input type=radio value=ping checked name=type跑馬燈 /td td width=135 p align=centerinput type=radio name=speed value=slow checked慢速 /td /tr tr td width=131 p align=center input type=radio name=type value=counter計(jì)數(shù)器 /td ..... ...... 這段源碼的第一句 form method=get action= name=LEDTEST表示:當(dāng)用戶按下提交按鈕時(shí),網(wǎng)頁(yè)會(huì)以 GET 的方式向服務(wù)器傳輸提交的數(shù)據(jù),提交的數(shù)據(jù)保存在網(wǎng)頁(yè)環(huán)境變量 QUERY_STRING 中,然后調(diào)用 程序,在CGI 程序中用指令讀出 QUERY_STRING 中的內(nèi)容 :用 C 語(yǔ)言很簡(jiǎn)單,令指針變量data=getenv(QUERY_STRING)即可。 網(wǎng)頁(yè)提交數(shù)據(jù)的兩種方式: GET/POST 從效果上講 GET 和 POST 都是用來(lái)提交網(wǎng)頁(yè)數(shù)據(jù)的,而我們也只是討論到它們傳輸數(shù)據(jù)格式不同而已。在對(duì)數(shù)據(jù)處理時(shí),用 GET 方式比 POST 方式來(lái)的簡(jiǎn)單,. . 因?yàn)?POST 必須用單表單,這處理起來(lái)相對(duì)麻煩 [5]。 在傳輸數(shù)據(jù)量方面, GET 最多只能傳輸 1024 字節(jié),而且數(shù)據(jù)是以明文形式跟在url 后面的,很顯然,這也會(huì)導(dǎo)致數(shù)據(jù)安全問(wèn)題,因?yàn)槟愕馁~戶名和密碼可以在歷史記錄中被看到,造成泄漏 [5]。 POST 沒(méi)有數(shù)據(jù)長(zhǎng)度上的限制,理論上可以無(wú)限大,只是受服務(wù)器處理能力限制。如果數(shù)據(jù)是以 POST 提交的話,則需要先讀取 CONTENT_LENGTH 環(huán)境變量 , 取得輸入數(shù)據(jù)的長(zhǎng)度后 , 再由標(biāo)準(zhǔn)輸入設(shè)備取得這個(gè)長(zhǎng)度的數(shù)據(jù) [5]。 兩種方式提交的數(shù)據(jù)都有自己的編碼格式,在網(wǎng)上可以查到相關(guān)資料,本次設(shè)計(jì)提交的數(shù)據(jù)比較簡(jiǎn)單,暫時(shí)也不用考慮安全問(wèn)題,因此采用了 GET 的傳輸格式 [5]。 CGI 程序的編寫(xiě) 為了避免更多錯(cuò)誤,提高編程效率,在用 CGI 處理 GET 提交的數(shù)據(jù)之前,我用fprint 函數(shù)對(duì)指針 data 獲取到的變量輸出到文本文件上,以此確定 GET數(shù)據(jù)的真實(shí)格式,同樣的方法也適用 POST,因?yàn)榫W(wǎng)上的 資料只提供了編碼方式,卻沒(méi)有具體 的實(shí) 際數(shù) 據(jù)給 出。 用 fprint 函數(shù) 輸出 后, 得到了 字符 串:type1=ping3amp。type2=ping3amp。type3=ping2amp。type4=ping3....這樣一來(lái)就很好處理了: char *data。 //指針變量,用于儲(chǔ)存環(huán)境變量 QUERY_STRING 的字符串 FILE *fp。 //文件指針 int type[8]={}。 //用來(lái)保存 type 的組別 int ping[8]={}。 //用來(lái)保存 type 組相應(yīng)的值 char i,j,k。 data=getenv(QUERY_STRING)。 //獲取環(huán)境變量的字符串 for(i=0,j=4,k=10。i8。i++,j+=12,k+=12) //截取組別和相對(duì)應(yīng)的值 { type[i]=(int)*(data+j)48。 // 獲取組別,轉(zhuǎn)化為整型變量 ping[i]=(int)*(data+k)48。 //獲取值,轉(zhuǎn)化為整型變量 } 注:指針變量 data 保存的是字符串,數(shù)值 1 和字符“ 1”的 ASCII 值相差 48,. . 因此將字符串里的字符強(qiáng)制轉(zhuǎn)化為整形后,減去 48 就為實(shí)際數(shù)值。 經(jīng)過(guò)上面程序處理后,數(shù)組 type 和 ping 元素是一一對(duì)應(yīng)的。這樣處理能夠簡(jiǎn)化解碼步驟,方便后續(xù)程序處理。 解碼步驟完成后,接下來(lái)就是要將數(shù)據(jù)保存在文本文檔中,供系統(tǒng)讀?。? if((fp=fopen(,w+))==NULL) //打開(kāi)一個(gè) 文件,若不存在則新建。 exit(0)。 //文件操作失敗則退出 for(i=0。i8。i++) //把組名按順序輸出到 中 { fprintf(fp,%d,type[i])。 } for(i=0。i8。i++) { fprintf(fp,%d,ping[i])。 //把各組對(duì)應(yīng)的值按順序輸出到 中。 } fclose(fp)。 //關(guān)閉文件 以上 cgi 程序?qū)崿F(xiàn)了對(duì)網(wǎng)頁(yè)提交的數(shù)據(jù)解碼和保存。 但在實(shí)際操作時(shí),調(diào)用 cgi 程序后,需要載入新的頁(yè)面或者刷新網(wǎng)頁(yè),所以要求cgi 程序能夠向服務(wù)器返回一段網(wǎng)頁(yè)源代碼。 按照我目前掌握的 C 語(yǔ)言水平,向?yàn)g覽器返回源代碼只能通過(guò) printf()函數(shù),但是如果要求返回的是一個(gè)完整的頁(yè)面的話就需要成百上千條 printf()語(yǔ)句,而且,網(wǎng)頁(yè)源代碼中的特殊符號(hào)和格式控制符會(huì)干擾 C 語(yǔ)言編譯,處理起來(lái)相當(dāng)麻煩。當(dāng)了解到 shell 語(yǔ)言能夠很方便的將一個(gè)文件返回時(shí),就采用程序調(diào)用的方式解決上面的問(wèn)題: 1) 建立一個(gè)文本類型的文件( ),文件的命名也是采用參考例程原來(lái)的命名。將網(wǎng)頁(yè)源代碼保存在這個(gè)文件里。 2) 用 shell 語(yǔ)言編寫(xiě)一個(gè) cgi 程序: !/bin/sh echo Contenttype: text/html。 charset=gb2312 //一定要先返回的標(biāo)簽 echo . . /bin/cat //將文本文檔 里的 數(shù)據(jù)輸出 exit 0 并將其命名為 。 3) 在 里調(diào)用 是由 C 語(yǔ)言編寫(xiě)的, linux C 語(yǔ)言中程序調(diào)用十分方便,僅用一個(gè)system()函數(shù) 就可以實(shí)現(xiàn): system(/home/plg/)。調(diào)用時(shí)需要將被調(diào)用程序的路徑一起作為參 數(shù)輸入。 至此為止, CGI 程序編寫(xiě)任務(wù)就完成了。 驅(qū)動(dòng)程序的編寫(xiě) 傳感器信息采集驅(qū)動(dòng) 這套智能家居系統(tǒng)信息交互是通過(guò)嵌入式芯片的 GPIO 口電平信號(hào)實(shí)現(xiàn)的。傳感器最終傳給 IO 口的是高或者低 電平信號(hào),驅(qū)動(dòng)程序的任務(wù)就是讀取連接著傳感器的 IO 口電平信號(hào),根據(jù)信號(hào)信息更新網(wǎng)頁(yè)信息。 GPIO 口的電平讀取原理和按鍵讀取原理是一樣的。因此不必再自己編寫(xiě)底層驅(qū)動(dòng),傳感器信息采集驅(qū)動(dòng)只需要調(diào)用按鍵驅(qū)動(dòng)讀取 GPIO 口即可。下面是一個(gè)按鍵例程 [1]: int buttons_fd。 //保存設(shè)備編號(hào) char buttons[8] = {39。039。, 39。039。, 39。039。, 39。039。, 39。039。, 39。039。, 39。039。, 39。039。}。 //用于保存按鍵當(dāng)前狀態(tài) buttons_fd = open(/dev/buttons, 0)。 //打開(kāi)按鍵驅(qū)動(dòng)設(shè)備 if (buttons_fd 0) { perror(open device buttons)。 //打開(kāi)失敗則退出 exit(1)。 } for (。) { char current_buttons[8]。 //按鍵值讀取緩存 int count_of_changed_key。 //輸出格式控制
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1