




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程名称: 嵌入式系统的软硬件设计 论文题目: 基于嵌入式web服务器的远程控制系统 姓 名: 1 设计背景随着嵌入式系统的发展和Internet的普及,在嵌入式系统中接入网络已经成为嵌入式系统应用及网络发展的一个重要方向,也是必然结果。嵌入式系统与Internet技术的结合,正逐渐改变着每个人的生活方式、企业的生产方式以及管理方式;从信息家电,手持数码产品到设备管理,工业自动控制,嵌入式Internet技术有着广阔的应用前景。嵌入式Web服务器是嵌入式系统网络化应用的重要方面。Web技术可跨越诸多设备和系统在硬件和软件产品间做到即连即用,任何计算机只需用Web 浏览器,不需要专门的计算机和专用的软件,即可通过以太网和TCP/IP 协议访问各种信息终端。客户机可任意设置,在全球的任何一个角落,只要能连上Internet 并有权访问Web 服务器,便可查阅现场有关信息,给维护和管理工作带来很大的方便。此外,设备信息通过网页的形式体现,可以使用数据、图表、动画等各种丰富的表现方式。可见,在工业控制领域,各式各样的嵌入式设备与Web 技术的结合,可大大降低软件系统和通信系统的设计和维护的工作量,提高现场测试和控制设备的管理水平,可实现设备远程监控,这是现代化工业生产一大亮点。结合Web技术的嵌入式设备存在诸多的优势。研究嵌入式Web 服务器,以实现设备远程访问、监测并控制,在科技迅速发展的今天,符合人们对便捷生产、便捷生活的需求,有其重要的现实意义。2 系统总体方案 通过html语言编写Web控制页面,用户能在Web控制MINI2440开发板,实现对LED和蜂鸣器的控制,以及通过DS18B20温度传感器测量温度,实时传回显示的Web页面上。 图1 系统流程图3 系统具体设计首先分析系统的功能需求,我们设计题目是基于嵌入式web服务器的远程控制系统,那么此系统需要完成以下几个功能:1) WEB服务器的搭建经过查阅资料我们选择BOA服务器作为本系统的WEB服务器,BOA服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。具体的搭建流程参考网络资料。2) 控制页面的编写控制页面主要是通过html语言编写,将页面文件放置在web服务的文件根目录下,等待浏览器访问web服务器时,服务器能够自动的返回我们所编写的页面,从而实现与远程的交互3) 服务器端CGI程序的编写根据html和CGI调用的规范,我们将事先写好的程序编译成CGI文件放置到web服务器的相应文件夹中,当有相应的请求发生时,web服务器会自动条用相应的CGI程序。4) linux驱动的编写linux驱动主要涉及LED驱动、PWM驱动及DS18B20驱动。4 个人承担任务(1) 蜂鸣器CGI设计(2) LED驱动编写5任务内容5.1. 蜂鸣器CGI5.1.1公共网关接口CGI公共网关接口CGI是Web 服务器的一种标准规范,用来将Web 用户的请求传递给服务器的应用程序,并将接收到的数据回送给Web 用户。每当用户向Web 服务器提交一个页面请求( 例如,点击一个超链接或输入一个网站地址) ,Web 服务器会将用户请求的存放在服务器上的网页返回给用户。 然而,当用户提交一个带有表单( form) 的请求网页时,在服务器端需要接收表单内容,必要时还要根据表单内容作必要的处理。 一般来说,Web 服务器并不能直接处理表单,而是把表单内容传送给服务器的一个小型应用程序,由该程序对表单数据进行处理并回送必要的确定信息。 这种在Web 服务器与应用程序之间往返传递数据的方法或规范称之为“公共网关接口( Common Gateway Interface) ”,简称CGI。5.1.2 蜂鸣器CGI程序任务CGI 程序需要从Web 服务器接收用户信息,对该信息进行必要处理,最后返回处理结果 根据CGI规范以及本系统设计要求,CGI 需要完成下列任务:(1)接收用户信息 我们在蜂鸣器WEB页面设置控制蜂鸣器频率的PWM占空比,用户浏览器将请求页发送给Web 服务器,由Web 服务器创建一个子进程,在子进程中调用CGI 程序,通过环境变量将用户信息传递给CGI 程序。(2)解码用户信息并处理 用户浏览器请求页在向Web 传递过程中首先被编码,以适合于使用HTTP 协议在网络上传送 因此,当用户信息通过Web 服务器传递给CGI 程序后,CGI 程序要对接收到的用户信息进行解码,将其还原成初始信息,或者设置的占空比,并驱动蜂鸣器工作。(3)生成HTML 网页 将驱动蜂鸣器工作后的结果动态生成HTML 网页,通过Web 服务器回送给用户浏览器,因为用户浏览器要接收的必须是HTML 网页。5.1.3蜂鸣器CGI程序 (1)获得Web 服务器传递的信息 data = getenv(QUERY_STRING);Web 服务器将一些关键性信息,如请求方法( GEG、POST 等) 、请求页类型、用户主机地址等设置为相应的环境变量。在CGI 程序中,调用系统函数getenv(),读取这些环境变量,获得Web 服务器传递的信息。(2)获取占空比sscanf(data,beep_control=%d,&beep_control);从Web 服务器传递的信息中获取占空比值并保存在beep_contro中。(3)驱动蜂鸣器工作set_duty( fd_bee p, beep_control );调用该函数使蜂鸣器以占空比beep_control对应的频率发出声音,fd_bee p是驱动设备文件的文件描述符。void set_duty( int fd, int duty )ioctl(fd, PWM_IOCTL_SET_TCNTB, 1000);ioctl(fd, PWM_IOCTL_SET_TCMPT, duty);ioctl(fd, PWM_IOCTL_START); 其中,ioctl是驱动中的函数,实现对PWM的一些控制,设置定时器计数值1000,占空比duty。#define PWM_IOCTL_START _IO(PWM_MAGIC, 0) #define PWM_IOCTL_SET_TCNTB_IOW(PWM_MAGIC, 1, int)#define PWM_IOCTL_SET_TCMPT _IOW(PWM_MAGIC, 2, int)这三个CMD分别为启动PWM定时器、第二个为设置PWM中TCNTB寄存器的值用于设定定时器的计数值、第三个为设置PWM中TCMPT的值用于设定占空比。 (4)生成HTML 网页 cgiHeaderContentType(text/html); / CGI响应内容格式 fprintf(cgiOut, ); fprintf(cgiOut, Beep CGI); fprintf(cgiOut, ); fprintf(cgiOut, Control beep);fprintf(cgiOut, ); printf(set the duty of beep is %d n, beep_control); fprintf(cgiOut, );fprintf(cgiOut, ); /添加返回按钮 fprintf(cgiOut, ); fprintf(cgiOut, );在C 语言程序中生成HTML 网页。根据CGI 规范,CGI 程序生成的HTML 网页由两部分构成: 网页首部( head) 及网页体( body)。网页各行由CGI 程序通过标准输出传递给Web 服务器,最后由Web 服务传递给用户浏览器。5.2 LED驱动5.2.1 设备驱动程序的概念设备驱动程序的任务就是控制设备的硬件完成指定的I/O 操作。所以在设备管理中驱动 程序是直接和设备硬件打交道的。驱动程序包含了对设备进行各种操作的代码,在操作系统的控制下,CPU 通过执行驱动程序来实现对设备底层硬件的处理和操作。Linux 的设备驱动程序的主要功能是:对设备进行初始化;启动或停止设备的运行;把设备上的数据传送到内存;把数据从内存传送到设备;检测设备状态。 Linux内核把驱动程序划分为三类:字符设备、块设备、网络设备驱动,对于不同的设备有不同的访问方式。驱动程序有两种加载方式:一是直接编译进内核,启动内核时可自动加载;二是以模块的方式加载,在系统启动之后可以insmod 加载。本人负责的是LED驱动,用的是基本的字符设备,采用insmod加载。5.2.2 LED驱动程序(1)设备初始化module_init(led_init);设备驱动程序在加载时首先需要调用入口函数led_init(),该函数完成设备驱动的初始化工作。led_init()主要完成了以下的工作:1调用register_chrdev_region设备(若主设备号已经分配);若未分配,则用alloc_chrdev_region动态分配。2 .为字符设备分配空间led_devp = (struct led_dev *)kmalloc(sizeof(struct led_dev), GFP_KERNEL);3. 调用led_setup_dev(led_devp, 0)添加设备 devno = MKDEV(led_major, led_minor); cdev_init(&dev-cdev, &led_fops); dev-cdev.owner = THIS_MODULE;dev-cdev.ops = &led_fops; err = cdev_add(&dev-cdev, devno, 1);led_setup_dev主要做了以上四部,对字符设备结构体的一些变量进行初始化,然后调用cdev_add进行设备的添加。4 .调用tyy_led_init();完成引脚配置,设置成带上拉输出。(3) 定义设备操作函数 struct file_operations led_fops = .owner=THIS_MODULE, .open = led_open, .unlocked_ioctl = led_ioctl,;对文件操作进行映射,关联到真正的驱动函数。.open是打开操作;.unlocked_ioctl是设备控制操作。(4)LED状态控制函数long led_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) switch(cmd) case IOCTL_LED_ON:tyy_led_ctl(arg, STATE_ON);/printk(led%ld is onn, arg);return 0;case IOCTL_LED_OFF:tyy_led_ctl(arg, STATE_OFF);return 0; return 0; led_ioctl函数对编号arg的LED进行点亮或熄灭控制。其中tyy_led_ctl函数中定义了相应引脚高低电平的输出。(4) 驱动程序Makefile文件将 tty_led.c 和这个 Makefile 放置在同一个新建目录下,进入这个目录,输入 make 后,编译成功后将在这个目录下生成一个 tty_led.o 的文件,这个文件就是可以加载到linux系统中的驱动程序文件。 6 实验遇到的问题 1起初在看一切嵌入式驱动程序的时候,始终对它的整个流程不太了解,学习了很久也不知应用程序是怎么调用驱动程序的,查阅了一些资料之后才明白,驱动程序里在file_operactions中对外界提供了一些接口,只要写入相应的函数,应用程序就可以调用了。2用户在Web上网页点灯的时候,每次相应cgi都会跑一遍,每次都会重新初始化,从而无法记录前一操作的LED灯变化状态。 因此建立了一个txt,每次操作之前都进行记录保存,下次操作之前先读txt,从而记录前一操作的LED灯变化状态。7 小结虽然上学期业接触过嵌入式实验,但之前是只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- SPC挤出安全培训记录课件
- relationships课件教学课件
- 食品容器知识培训内容课件
- 食品安全管理培训
- 2025年矩形判定的题目及答案
- PS课件常用颜色搭配
- 酒类知识考试题库及答案
- 七年级上册英语期末考试卷及答案
- 洗手试题及答案
- DB61T 1228-2019 秦紫玉标准规范
- 2022年贵州省人民医院医护人员招聘笔试试题及答案解析
- 医疗器械临床试验GCP三套考试题
- (施工方案)二期混凝土施工方案
- 钢结构简支梁强度、刚度及稳定性计算习题集
- 课堂因“融错·容错·溶措”而精彩
- 《简爱》课本剧剧本
- 阳光晾衣房钢结构专项施工方案
- 肿瘤科实习生入科培训课件
- 国际商务谈判英文版课件PPT
- 注塑机安全操作规程
- 运动处方(课堂PPT)
评论
0/150
提交评论