AD远程数据采集试验_第1页
AD远程数据采集试验_第2页
AD远程数据采集试验_第3页
AD远程数据采集试验_第4页
AD远程数据采集试验_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AD远程数据采集试验NewAD远程数据采集试验linux嵌入式系统期末作业选题:AD远程数据米集试验学号: 姓名: 班级: 邮箱: 成绩:2011年11月29日目录1、源代码22、程序完成的主要功能83、必要的操作步骤84、执行程序的结果115、本门课程体会及建议121、 源代码index.html文件解析:vtitleAD远程采集实验 第一页网页标题vbody bgcolor=cyan 设置网页背景 颜色AD远程采集实验2008-12-11vformactio n=33/cgi-bi n/ru n.cgi /* 提交表单后跳转到http:/192.168.1

2、.133/cgi-bi n/run .cgi 页面 */ /*设置按钮并且 居中*/adc.html文件解析:vscript type=text/javascriptvar XMLdoc;function loadXML()if(wi ndow.ActiveXObject)判断浏览器是否支持activeX 控件XMLdoc=newActiveXObject(Microsoft.XMLDOM); /* 生成 一个xml dom对象*/XMLdoc.async = false; /设置对象属性,是否同 步XMLdoc.load(adc.xml) ;/使oDom对象指向adc.xml中的内容getm

3、essage();setTimeout(loadXML(),1000) ;/ 每 1000 毫秒刷新一次fun cti on getmessage()docume nt.getEleme ntByld(ch_O).i nne rHTMLXMLdoc.getEleme ntsByTagName(ch_O)O childNodes0. no deValue; /* 获取 ch_o 的 html 代码 */ docume nt.getEleme ntByld(ch_1).i nne rHTMLXMLdoc.getEleme ntsByTagName(ch_1)0 childNodes0. no de

4、Value; /* 获取 ch_i 的 html 代码 */ docume nt.getEleme ntByld(ch_2).i nne rHTMLXMLdoc.getEleme ntsByTagName(ch_2)0 childNodes0. no deValue; /* 获取 ch_2 的 html 代码 */ v/script/生成第二个页面AD 远程测试实验 v/h1vform align=centervtable width=50% border=1 alig n=ce nterAD远程测试实验 通道 0V 通道 1V 通道 2Vv/tablev/formvformactio n=h

5、ttp:/33/cgi-bi n/stop.cgi v/bodyAdc.xml文件代码解析:v?xmlversio n=1.0en codi ng=UTF-8?0.01.03.0Arun.c文件代码解析:/服务器后台程序对AD进行采样的程序#include 调用函数库中的标准 输入输出#include vfcntl.h/ 浮点数处理#in elude #i nclude #in clude void getdata(char *buff, int adcfd, int ret)/*读取并且转换三个通道中的 AD值*/int temp;int i=0, j;for(j=0;

6、 j3; j+) /控制三个通道的循环ioctl(adcfd, j, 0); 操作 i/o 通道read(adcfd, & temp, sizeof(i nt);temp += 16;temp = temp/31;for(; ire t; i+)if(buffi = ) & (buffi+1=c) & (buffi+2 = h)break;buffi+6 = (temp/10) + 48;将得到的值做数值转换buffi+8 = (temp%10) + 48;i+;void lock_set(int fd, int type)struct flock lock;lock.l_whe nee =

7、SEEK_SET;lock. I_start = 0;lock.l_le n = 0;lock. I_type = type;while(1)if(fcntl(fd, F_SETLK, &lock) = 0)return;int main( void)pid_t pc;int adcfd, xmlfd, ret;un sig ned char buff150;mt i;pc = fork();/*用于打印一些HTML代码,使页面跳转到ADC.HTML ,打印完后退 出*/if(pc0)/*打印Html文档*/prin tf(Co nte nt-type:text/htmlnn);prin tf

8、(n);prin tf( );printf();exit(O);elsesetsid(); /脱离父进程chdir(/);改变当前目录umask(O); /重设文件权限掩码for(i=0;i65535;i+) /关闭设备文件描述符 close(i);adcfd = ope n( /dev/adc, O_RDWR); if(adcfd 0)prin tf(Ca nnotope n adcdevice!n);return adcfd;while(1)while(1)xmlfd=open(/var/www/adc.xml,O_RDWR); 打开标志文件if(xmlfd0)con ti nue;els

9、elock_set(xmlfd, F_WRLCK); /*给文件上锁,避免其他进程对该文件进行写操作 */break;ret = read(xmlfd, buff, 150);for(i=0; ire t; i+)if(buffi = $)/*如果用户按下“停止采集”键,则退出程序*/buffi = A;lseek(xmlfd, 0, SEEK_SET); 移 动文件指针write(xmlfd, buff, ret); /写入修改后 的值lock_set(xmlfd, F_UNLCK); 给 文件上锁,防止被删除close(xmlfd);close(adcfd); return 0;getda

10、ta(buff, adcfd, ret); lseek(xmlfd, 0, SEEK_SET); write(xmlfd, buff, ret);lock_set(xmlfd, F_UNLCK); close(xmlfd);sleep(1);close(xmlfd);close(adcfd);return 0;stop.c文件代码解析:/*这段代码是控制整个程序结束的代码,当程序检测到“$ ”时,程序结束*/#in clude #i nclude #in clude #in clude vfcn tl.hvoid lock_set(i nt fd, int type)struct flock

11、lock;lock_whe nee = SEEK_SET;lock. I_start = 0;lock.l_le n = 0;lock. I_type = type;while(1)if(fcntl(fd, F_SETLK, &lock) = 0) return;int main( void)int fd, ret;char buff150;mt i;/*打印HTML页面*/prin tf(Co nten t-type:text/htmlnn);prin tf(n);prin tf(n);prin tf(v/body);隔 i 秒钟后刷新whilefd = ope n(./adc.xml, O

12、_RDWR);打开标志文件if(fd0)con ti nue;elselock_set(fd, F_WRLCK); /*给文件上锁,避 免其他进程对该文件进行写操作*/break;ret = read(fd, buff, 150);for(i=0; iret; i+)if(buffi = s) & (buffi+1 = t)& (buffi+2 = o) & (buffi+3 = p) break;buffi+5 = $ ;/i+5插入一个$lseek(fd, 0, SEEK_SET);write(fd, buff, ret); /*写文件,改变文件内容,以便视频采集程序能检测到该变化*/lo

13、ck_set(fd, F_UNLCK);close(fd); /关闭设备文件描述符retur n 0;2、程序完成的主要功能:这个程序是在点击第一个页面(in dex.html)上的“查看”按钮后,程序 会创建两个线程:一个主线程,用于打印一些HTML代码,使页面跳转到adc.html页面去,打印完HTML言息后该线程就退出;另一个子线程执行真 正的AD数据采集,它读取三个通道的 AD值,并对读出来的值进行转换,并 将读取的结果写入adc.xml文件中,供用户检索。同时,这个线程还会检查 adc.xml的stop标签中的内容,如果为$,则说明用户按下了 “停止 采集”按钮,那么就结束程序,否则

14、继续执行。3、必要的操作步骤:一、解压 ar zxvf boa-0.94.13.tar.gzyqliu29up-tech:/app/web$ tar zxvf boa-0.94.13.tar.gz二、然后进入源代码目录:yqliu29up-tech:/app/web$ cd boa-0.94.13/src/三、修改文件compat.h的第120行: yqliu29up-tech:/app/web/boa-0.94.13/src$ vi compat.h四、修改后,第120行的内容如下:#define TIMEZONE_OFFSET(foo) foo-tm_gmtoff五、即只是去掉了该行的两个

15、#字符。然后修改boa.c:yqliu29up-tech:/app/web/boa-0.94.13/src$ vi boa.c六、找到该文件的225227行,注释掉这几行,不然运行的时候会出错。源文件的修改就完成了,现在开始编译。首先,运行con figure程序对源文件进行配置:yqliu29up-tech:/app/web/boa-0.94.13/src$./con figure七、配置完成后,修改Makefile :yqliu29up-tech:/app/web/boa-0.94.13/src$ vi Makefile八、修改第31行和32行如下:CC = arm-li nu x-gcc

16、CPP = arm-l inu x-gcc -E九、修改完成后,保存文件,运行 Make进行编译:yqliu29up-tech:/app/web/boa-0.94.13/src$ make十、 编译完成后,会在该目录下生成我们需要的可执行文件boa。然后,编译我们的CGI程序。CGI程序供两个,一个是run.c,另一个 是 stop.c ,分别运行如下命令进行编译:yqliu29up-tech:/app/web$arm-li nux-gcc -orun. cgi run .cyqliu29up-tech:/app/web$arm-l inu x-gcc -o stop.cgi stop.c编译

17、完成后,会在目录下生成run.cgi和stop.cgi两个应用程序。Boa运行时需要在/etc/boa 目录下有一个boa.conf文件,该文件的全 部内容如下:Port 80#Liste n User rootGroup 0ErrorLog /var/log/boa/error_logAccessLog /dev/nullServerName .hereDocume ntRoot /var/wwwDirectory In dex in dex.htmlKeepAliveMax 1000KeepAliveTimeout 10MimeTypes /et

18、c/mime.typesDefaultType text/pla inCGIPath /bin: /usr/bi n:/usr/local/binAddType applicati on /x-httpd-cgi cgiScriptAlias /cgi-b in/ /var/www/cgi-bi n/另外,在/etc目录下还需要一个 mime.types文件,可以直接从主机上 的/etc目录拷贝过来。运行时需要的目录如下:/var/www 这个是我们的html文件存放的目录/var/www/cgi-bin 这个是CGI程序存放的目录/var/log/boa/error_log这个是boa服务器存放错误日志的地方因此,把我们上面提到的index.html、adc.html和adc.xml三个文件 拷贝到开发板的/var/www目录下;把刚才编译得到的run.cgi和stop.cgi 拷贝到/var/ww

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论