版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
.z...linu*嵌入式系統(tǒng)期末作業(yè)選題:webserver編程實例學(xué)號:姓名:班級:郵箱:成績:2011年11月29日目錄1、代碼解析:3〔1〕inde*.html文件解析:3〔2〕adc.html文件解析:3〔3〕Adc.*ml文件代碼解析:5〔4〕run.c文件代碼解析:5〔5〕stop.c文件代碼解析:82、程序完成的主要功能:93、必要的操作步驟:104、執(zhí)行程序的結(jié)果〔效果圖〕:125、本門課程體會及建議:131、代碼解析:〔1〕inde*.html文件解析:<html> <head> <title>AD遠程采集實驗</title>/*設(shè)置網(wǎng)頁標題*/ </head> <bodybgcolor="cyan">/*設(shè)置頁面背景顏色為青綠色*/ <h1align="center">AD遠程采集實驗</h1>/*定義最大標題并居中*/ <palign="center">2008-12-11</p>/*設(shè)置日期居中*/<formaction="33/cgi-bin/run.cgi">/*生成一個到"33/cgi-bin/run.cgi"的表單*/ <palign="center"><inputtype="submit"value="查看"></p>/*生成一個“查看〞按鈕*/ </form> </body></html>〔2〕adc.html文件解析:<html> <head> <scripttype="te*t/javascript">/*創(chuàng)立腳本的格式為javascript*/ var*MLdoc;/*創(chuàng)立*MLdoc對象*/functionload*ML(){ if(window.Active*Object)/*判斷是否支持Active*控件*/ { *MLdoc=newActive*Object("Microsoft.*MLDOM");/*實例化一個Active*控件*/ *MLdoc.async=false; *MLdoc.load("adc.*ml");/*讀取*ml文件*/ getmessage();/*函數(shù)調(diào)用*/ } setTimeout("load*ML()",1000);/*頁面每1000毫秒刷新一次*/}functiongetmessage()/*獲取旋鈕值*/{ document.getElementById("ch_0").innerHTML=*MLdoc.getElementsByTagName("ch_0")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_0的值寫入網(wǎng)頁中id為ch_0的文件中*/ document.getElementById("ch_1").innerHTML=*MLdoc.getElementsByTagName("ch_1")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_1的值寫入網(wǎng)頁中id為ch_1的文件中*/ document.getElementById("ch_2").innerHTML=*MLdoc.getElementsByTagName("ch_2")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_2的值寫入網(wǎng)頁中id為ch_2的文件中*/}</script></head><bodyonload="load*ML()"bgcolor="cyan">/*背景顏色是青綠色*/ <h1align="center">AD遠程測試實驗</h1>/*定義最大標題并居中*/ <formalign="center">/*生成表單并居中*/ <tablewidth="50%"border="1"align="center">/*生成寬度是屏幕的50%,表格線條粗細為1的表格并居中*/ <thalign="center"colspan=2>AD遠程測試實驗</th>/*表頭單元格內(nèi)容為"AD遠程測試實驗"并居中*/ <tr> <tdalign="center">通道0</td> <tdalign="center"><spanid="ch_0"></span>V</td>/*設(shè)置id為ch_0并居中*/ </tr> <tr> <tdalign="center">通道1</td> <tdalign="center"><spanid="ch_1"></span>V</td>/*設(shè)置id為ch_1并居中*/ </tr> <tr> <tdalign="center">通道2</td> <tdalign="center"><spanid="ch_2"></span>V</td>/*設(shè)置id為ch_2并居中*/ </tr> </table> </form><formaction="33/cgi-bin/stop.cgi">/*生成一個到"33/cgi-bin/stop.cgi"的表單*/ <palign="center"><inputtype="submit"value="停頓采集"/></p> </form>/*生成一個“停頓采集〞按鈕并居中*/</body></html>〔3〕Adc.*ml文件代碼解析:<?*mlversion="1.0"encoding="UTF-8"?><measure> <ch_0>0.0</ch_0>/*設(shè)置ch_0的初始值為0.0*/ <ch_1>1.0</ch_1>/*設(shè)置ch_1的初始值為1.0*/ <ch_2>3.0</ch_2>/*設(shè)置ch_2的初始值為3.0*/ <stop>A</stop></measure>/*解析通道中的AD數(shù)據(jù)*/〔4〕run.c文件代碼解析:*include<stdio.h>*include<ftl.h>*include<sys/ioctl.h>*include<unistd.h>*include<time.h>voidgetdata(char*buff,intadcfd,intret)/*AD數(shù)據(jù)的采集,并進展格式轉(zhuǎn)換*/{ inttemp; inti=0,j; for(j=0;j<3;j++)/*控制通道的循環(huán)*/ { ioctl(adcfd,j,0);/*控制I/O通道*/ read(adcfd,&temp,sizeof(int));/*將開發(fā)板的值返回到temp*/ temp+=16; temp=temp/31; for(;i<ret;i++) { if((buff[i]=='<')&&(buff[i+1]=='c')&&(buff[i+2]=='h'))break;/*判斷字符串"<ch"是否出現(xiàn),假設(shè)出現(xiàn),跳出循環(huán),進展數(shù)據(jù)轉(zhuǎn)換;假設(shè)沒有,繼續(xù)循環(huán).*/} buff[i+6]=(temp/10)+48;buff[i+8]=(temp%10)+48;/*獲取數(shù)據(jù)賦值給temp,并進展格式的轉(zhuǎn)化*/ i++; }} voidlock_set(intfd,inttype)/*文件上鎖函數(shù),在主程序中將被調(diào)用*/{ structflocklock;/*定義構(gòu)造體flocklock*/ lock.l_whence=SEEK_SET; lock.l_start=0; lock.l_len=0; lock.l_type=type; while(1) { if((ftl(fd,F_SETLK,&lock))==0) return;/*判斷文件是否被鎖定,假設(shè)鎖定,則退出;否則,繼續(xù)鎖定*/ }}intmain(void){pid_tpc; intadcfd,*mlfd,ret;unsignedcharbuff[150]; inti; pc=fork();/*創(chuàng)立主線程,用于打印一些HTML代碼,使頁面跳轉(zhuǎn)到adc.html頁面去,打印完HTML信息后該線程就退出*/ if(pc<0) { printf("forkerror!\n"); return-1;/*判斷進程,假設(shè)pc<0,打印"forkerror!",假設(shè)pc>0,打印HTML文檔*/ } elseif(pc>0) {/*打印HTML文檔*/ printf("Content-type:te*t/html\n\n"); printf("<bodybgcolor=\"cyan\">\n"); printf("<meta-equiv=\"refresh\"content=\"1;url=33/adc.html\">");/*使頁面跳轉(zhuǎn)到adc.html頁面*/ printf("</body>"); e*it(0); } else { setsid();/*脫離父進程*/ chdir("/");/*改變當前目錄*/ umask(0);/*重設(shè)文件權(quán)限掩碼*/ for(i=0;i<65535;i++) close(i);/*關(guān)閉設(shè)備文件描述符*/ adcfd=open("/dev/adc",O_RDWR);/*翻開adc設(shè)備文件*/ if(adcfd<0) { printf("Cannotopenadcdevice!\n");/*判斷能不能翻開adc設(shè)備文件,假設(shè)翻開繼續(xù)下面程序;反之,打印出不能翻開adc設(shè)備*/ returnadcfd; } while(1) { while(1) { *mlfd=open("/var//adc.*ml",O_RDWR);/*翻開adc.*ml文件*/ if(*mlfd<0) { continue; } else { lock_set(*mlfd,F_WRLCK);/*給文件上鎖,防止其他進程對該文件進展寫操作*/ break; } } ret=read(*mlfd,buff,150);/*將*ml值讀到buff*/ for(i=0;i<ret;i++) if(buff[i]=='$')/*如果為'$',則說明用戶按下了"停頓采集"鍵,完畢程序*/ { buff[i]='A'; lseek(*mlfd,0,SEEK_SET);/*移動文件指針*/ write(*mlfd,buff,ret);/*寫入修改后的值*/ lock_set(*mlfd,F_UNLCK);/*給文件上鎖,阻止被刪除*/ close(*mlfd); close(adcfd); return0; } getdata(buff,adcfd,ret); lseek(*mlfd,0,SEEK_SET); write(*mlfd,buff,ret);/*采集數(shù)據(jù)并把數(shù)據(jù)顯示在頁面上,以便于監(jiān)測*/ lock_set(*mlfd,F_UNLCK);/*給*ml文件上鎖*/ close(*mlfd); sleep(1); } close(*mlfd); close(adcfd); return0; }}〔5〕stop.c文件代碼解析:*include<stdio.h>*include<unistd.h>*include<sys/ioctl.h>*include<ftl.h>voidlock_set(intfd,inttype){ structflocklock;/*定義flocklock構(gòu)造體*/ lock.l_whence=SEEK_SET;/*讀寫位置指向文件頭*/ lock.l_start=0; lock.l_len=0; lock.l_type=type; while(1) { if((ftl(fd,F_SETLK,&lock))==0) return;/*判斷文件是否被鎖定,假設(shè)鎖定,則退出;否則,繼續(xù)鎖定*/ }}intmain(void){ intfd,ret; charbuff[150]; inti;/*打印HTML文檔*/printf("Content-type:te*t/html\n\n");printf("<bodybgcolor=\"cyan\">\n"); printf("<meta-equiv=\"refresh\"content=\"1;url=33\">\n");/*停留在此頁面,不斷刷新*/ printf("</body>"); while(1) {fd=open("../adc.*ml",O_RDWR);/*翻開adc.*ml文件*/if(fd<0) continue;/*判斷文件是否翻開,假設(shè)沒翻開,繼續(xù);假設(shè)翻開,給文件上鎖*/ else { lock_set(fd,F_WRLCK);/*給文件上鎖,防止其他進程對該文件進展寫操作*/break; } } ret=read(fd,buff,150);/*將標志文件中的值讀到buff*/ for(i=0;i<ret;i++) if((buff[i]=='s')&&(buff[i+1]=='t')&&(buff[i+2]=='o')&&(buff[i+3]=='p'))/*判斷是否出現(xiàn)字符串"stop",假設(shè)出現(xiàn),跳出循環(huán),執(zhí)行下面操作;反之,一直循環(huán)*/ break; buff[i+5]='$';/*如果為‘$’,則說明用戶按下了“停頓采集〞鍵,完畢程序,否則繼續(xù)執(zhí)行*/ lseek(fd,0,SEEK_SET); write(fd,buff,ret);/*寫文件,改變文件內(nèi)容,以便視頻采集程序能檢測到該變化*/ lock_set(fd,F_UNLCK);/*給文件上鎖*/ close(fd);/*關(guān)閉設(shè)備文件描述符*/ return0;}2、程序完成的主要功能:(1)inde*.html是我們在IE瀏覽器的地址欄中輸入效勞器IP地址時所看到的頁面,當點擊查看按鈕時,頁面會跳轉(zhuǎn)到數(shù)據(jù)采集的顯示頁面,同時,效勞器的后臺程序也會開場運行,對我們的三個輸入通道進展采集,是索引網(wǎng)頁,是讓用戶進展使用(2)adc.html這個文件的頁面就是我們在按下上面的Inde*.html的查看按鈕后跳轉(zhuǎn)過來的,它分別顯示了我們的開發(fā)板上的三個AD通道的采樣值,是為數(shù)據(jù)采集而制作的網(wǎng)頁(3)Adc.*ml后臺效勞程序也會對這個文件進展讀寫,從而到達效勞器和用戶進展數(shù)據(jù)交換的目的。(4)Run.c這個程序是在點擊第一個頁面(inde*.html)上的“查看〞按鈕后執(zhí)行的。程序的開場會調(diào)用fork來創(chuàng)立兩個線程:一個主線程,用于打印一些HTML代碼,使頁面跳轉(zhuǎn)到我們的adc.html頁面去,打印完HTML信息后該線程就退出;另一個子線程執(zhí)行真正的AD數(shù)據(jù)采集,它讀取三個通道的AD值,并對讀出來的值進展轉(zhuǎn)換,并將讀取的結(jié)果寫入adc.*ml文件中,供用戶檢索。同時,這個線程還會檢查adc.*ml的<stop>標簽中的內(nèi)容,如果為’$’,則說明用戶按下了“停頓采集〞鍵,則就完畢程序的執(zhí)行,否則繼續(xù)執(zhí)行。(5)Stop.c該程序的實現(xiàn)比擬簡單,當用戶按下數(shù)據(jù)采集頁面的“停頓采集〞按鈕后,會執(zhí)行這個程序。本程序是改變adc.*ml文件中的<stop>標簽中的內(nèi)容,在其中插入一個’$’字符,當我們的數(shù)據(jù)采集程序檢測到這個變化后,就會停頓采集。3、必要的操作步驟:〔1〕在實驗?zāi)夸浵聻楸緦嶒瀯?chuàng)立webserver目錄〔2〕進入webserver目錄,使用編輯器vim建立文件webserver,將實驗指導(dǎo)中有關(guān)代碼粘貼過來〔3〕我們的光盤中提供了boa的源代碼,解壓該文件〔4〕編譯BOA效勞器和CGI程序〔5〕配置BOA效勞器,另外在實驗?zāi)夸浀?etc目錄下還需要一個mime.types文件,直接從主機上的/etc目錄拷貝。〔6〕啟動開發(fā)板,制作完成rootfs,通過mkcramfs工具生成root.cramfs只讀文件系統(tǒng),1〕確認serverip是Linu*虛擬機的IP地址;2)將生成的uImage文件拷貝到tftpboot目錄下;3〕在ARM開發(fā)板上運行命令;把uImage文件下載到ARM開發(fā)板的SDRAM中0*30008000開場的空間中;擦除NandFlash中起始地址為0*380000,大小為0*400000的空間;把SDRAM中0*30008000開場的內(nèi)容寫入NandFlash0*380000開場的空間內(nèi),大小為0*400000〔7〕[up-class2410*]setenvbootcmdnandread0*300080000*800000*250000\;bootm此項
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度臨時用工工作滿意度調(diào)查及改進協(xié)議4篇
- 二零二五年度宿舍安全管理宿管員聘用協(xié)議范本3篇
- 二零二五年度ISO 22000食品安全管理體系認證咨詢協(xié)議3篇
- 二零二五年度商業(yè)地產(chǎn)項目配套場地租賃服務(wù)協(xié)議2篇
- 二零二五年度外資企業(yè)外籍員工聘用協(xié)議范本3篇
- 2025年度文化旅游項目募集資金三方監(jiān)管合同4篇
- 2025年度豬圈建造與生物安全防護合同4篇
- 2025年度生物制藥研發(fā)合作協(xié)議
- 二零二五年度城市綠化用地承包合同范本4篇
- 2025年智能車輛識別一體機銷售與服務(wù)合同范本4篇
- 班級建設(shè)方案中等職業(yè)學(xué)校班主任能力大賽
- 纖維增強復(fù)合材料 單向增強材料Ⅰ型-Ⅱ 型混合層間斷裂韌性的測定 編制說明
- 習(xí)近平法治思想概論教學(xué)課件緒論
- 寵物會展策劃設(shè)計方案
- 孤殘兒童護理員(四級)試題
- 梁湘潤《子平基礎(chǔ)概要》簡體版
- 醫(yī)院急診醫(yī)學(xué)小講課課件:急診呼吸衰竭的處理
- 腸梗阻導(dǎo)管在臨床中的使用及護理課件
- 調(diào)料廠工作管理制度
- 小學(xué)英語單詞匯總大全打印
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
評論
0/150
提交評論