基于嵌入式web服务器的远程温度监测系统设计与实现内容摘要:

有现实意义。 软件体系方案 本文所采用的软件试验平台是 Linux 操作系统 ,简单地说, Linux 是一种主要适用于个人计算机的类似于 UNIX 的操作系统。 它的独特之处在于不受任何商品化软件的版权制约,全世界都免费、自由使用。 Linux 继承了 UNIX 系统的许多优良特性,同时又有自己的长处: 重庆大学本科学生毕业设计 (论文) 2 远程温度监测系统设计与软硬件平台搭建 6 ◆ 多任务。 这是现代操作系统的基本特点,允许多个作业、多个进程、多个任务在一个时间中同时并存,并行运行。 ◆ 多用户。 多个用户能同时从一台或多台终端上登录,使用同一应用程序的副本进行工作。 多用户是网络时代分布式操作系统的特点, Linux 继承了 UNIX这一方面的长处。 ◆ 多平台。 Linux 系统主要运行于 Intel 系列的个人计算机,但也支持 Alpha、Sparc 等平台。 C 语言的硬件无关性使得 Linux 有很好的可移植性。 ◆ 可编程 shell。 Linux 除了提供包括 awk 在内的强大命令集,还允许用户自己编写脚本( shell script)。 在脚本中,用户可以使用变量、控制 程序 执行的流程、使用规则表达式等功能。 ◆ 强大的通讯与联网功能。 网络连接在核心中完成,支持多种网络协议,常用的有 TCP、 IPv IPX、 DDP 等,还支持一些其它 协议。 提供的命令有 cu、 mail、tel 等,功能强大。 与 UNIX 系统相似, Linux 系统大致可分为 3 层:靠近硬件的底层是内核,即Linux 操作系统的常驻内存部分;中间层是内核之外的 Shell 层,亦即操作系统的系统程序部分;最高层是应用层,即用户程序部分,包括各种文本处理程序、语言 编译程序及游戏程序 等 [4]。 Linux 的系统结构如图 所示。 图 Linux 系统结构 本文 所选择的 Linux 操作系统是 Ubuntu。 Debian 是一个广受称道、技术先进且有着良好支持的 Linux 发行版, Ubuntu 正是基于 Debian 之上,旨在创建一个可以为桌面和服务器提供一个最新且一贯的 Linux 系统。 Ubuntu 囊括了大量从 Debian 发行版 中 精挑细选的软件包,同时保留了 Debian 强大的软件包管理系统,以便简易的安装或彻底的删除程序。 与大多数发行版附带 数量巨大的可用可不用的软件不同, Ubuntu 的软件包清单只包含那些高质量的重要应用程序。 注重质量, Ubuntu 提供了一个健壮、功能丰富的计算环境,既适合家用又适用于商业环境。 重庆大学本科学生毕业设计 (论文) 2 远程温度监测系统设计与软硬件平台搭建 7 系统整体框架 本课题 以实验室在研项目“无线远程视频监控家庭清洁机器人”为背景,设计 了 一个基于嵌入式 Web 服务器的远程温度监控系统,以方便、快速的对远程温度 信息 进行监测。 本文所设计的嵌入式远程温度监测系统,根据系统功能需求,整个系统被划分为 3 个模块 ,分别为:温度采集与控制模块、 CGI 接口模块和 Web 页面设计模块。 其系统框图如图 所示。 用 户A r m 板底 层 驱 动I n t e r n e tC G I 程 序 图 系统框图 1)、 温度采集与控制模块。 编写温度传感器 DS18B20 的驱动程序, 并经编译后可加载到 arm 板中。 其次是编写加载完成的 DS18B20 的设备控制程序, 可 接受来自远程浏览器的控制, 并 把采集到 的温度信息 返回 远程浏览器。 2)、 CGI接口模块。 此模块 是 按照 CGI标准设计的具有特定功能的程序模块,是嵌入式 Web 服务器与外部扩展应用程序交互的一种标准接口。 CGI 的作用体现在通用网关接口上,是一种可以在 WWW 服务器上运行的代码,可以有效的响应客户端的信息请求。 3)、 Web 页面设计 模块。 设计 Web 页面,用户可以打开浏览器的界面远程监控温度信息, 是用户与 嵌入式系统进行 交互的后台界面。 其中, CGI 接口模块是系统的核心,联系着其它三个模块, CGI 实现数据的交互, CGI 与进程之间通过管道文件进行数据交互,实现对温度传感器 DS18B20的读取控制, DS18B20 也将检测到的数据通过 CGI 应用程序发送给 服务器,远程客户端通过访问服务器即可观测温度信息, 因此本设计的 核心点 就在于如何利用CGI 程序 和管道文件对数据交互进行控制。 3 系统设计 与 实现 重庆大学本科学生毕业设计 (论文) 3 系统设计与实现 8 硬件电路设 计 本项目的 外围电路主要是温度传感器 DS18B20,因其为单线器件, 且 在本项目中只用到一片 DS18B20 芯片, 又 因其 紧靠 arm 板,因此选择外部供电方式,外部供电的方式下, DS18B20 工作稳定可靠,抗干扰能力强,而且软件实现更简单。 其硬件结构图如 所示。 G P B 13 . 3 VG N D4 . 7 K3 . 3 VGNDDQ3.3VD S 1 8 B 2 0A R M 板 图 外围电路连接图 软件设计 编译环境 设置 嵌入式开发所采用的编译为交叉编译。 所谓交 叉编译就是在一个平台上生成可以在另一个平台上执行的代码。 编译的主要工作 是将 用户编写的 程序转化为运行该程序的 CPU 所能识别的机器代码,由于不同的体系结构 具 有不同的指令系统。 因此,不同的 CPU 需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同的 CPU 的 对应语言。 一般把进行交叉编译的主机称为宿主机,也就是普通的 计算机,而把程序实际的运行环境称为目标机,也就是嵌入式系统环 境 [5]。 由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常 紧缺,没有相关的编译工具,因此,嵌入式系统的开发需要借助宿主机 来编译出目标机的可执行代码。 其开发原理如下图 所示。 图 交叉编译原理图 重庆大学本科学生毕业设计 (论文) 3 系统设计与实现 9 交叉编译器的安装 ,需要先下载 文件包 ,下载完成后安装 步骤如下: [root@localhost ] tar zxvf [root@localhost ] ls [root@localhost ] mv /usr/local/arm 修改环境变量: [root@localhost ] vi 然后再最后加上 export PATH=$PATH:/usr/local/arm/[root@localhost ] source /etc/ //生效 通过上述步骤即可 完成交叉编译器的安装,编写的 C 语言程序即可通过交叉编译器的编译在开发板上运行。 程序编译 本文 所 采用的交叉编译方式 是 利用 Makefile, Makefile 关系到 整个工程的编译规则。 一个工程中的源文件 有很多,其按类型、功能和 模块 分类 分别放在若干个目录中, Makefile 定义了一系列的规则来指定 哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。 Makefile 带来的好处就是 —— “自动化编译”, 一旦写好,只需要一个 make命令,整个工程完全自动编译,极大的提高了软件开发 效率。 make 是一个解释Makefile 中指令的命令工具。 Makefile 的 设计规则为 : 1)如果这个工程没有编译过,那么所有 的 C 文件都要编译并被链接。 2)如果这个工程的某几个 C 文件被修改,那么只编译被修改的 C 文件,并链接 到 目标程序。 3)如果这个工程的头文件被改变了,那么需要编译 这 个头文件 所引用 的 C 文件,并链接 到 目标程 序 [6]。 Makefile 的 语法 为: target ...: prerequisites ... mand ... ... target 就是一个目标文件,可以 是 可 执行文件, 也 可以是一个标签( Label)。 prerequisites 就是 要生成那个 target(目标文件)所需要的文件或 目标。 mand 也就是 make 需要执行的命令 (任意的 Shell 命令)。 Makefile 定义了所使用 文件的依赖关系,也就是说, target 这一个或多个的目重庆大学本科学生毕业设计 (论文) 3 系统设计与实现 10 标文件依赖于 prerequisites 中的文件,其生成规则定义在 mand 语句 中。 说 直白一点就是说, prerequisites 中如果有一个以上的文件比 target 文件要新的话,mand 所定义的命令就会被执行, 这就是 Makefile 的规则, 也就是 Makefile 最核心的内容。 目标文件( target) 包含可 执行文件 edit 和中间目标文件( *.o),依赖文件( prerequisites)就是冒号后面的那些 .c 文件和 .h 文件。 每一个 .o 文件都有一组依赖文件,而这些 .o 文件又是 可 执行文件 edit 的依赖文件。 依赖关系的实质就是说明了目标文件是由哪些文件生成的。 在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个 Tab 键作为开头 , make 是靠开头的那个 tab 来辨别命令行,所以一定要注意不要在非命令行之前加上 tab。 make 并不管命令是怎么工作的,它 只管执行所定义的命令。 make 会比较 targets 文件和 prerequisites 文件的修改日期,如果 prerequisites 文件的日期要比 targets 文件的日期要新 或者 target 不存在的话,那么, make 就会执行后续定义的命令。 在默认的方式下, 就是我们只输入 make 命令。 那么 make 会按照以下方式进行工作: make 会在当前目录下找名字叫“ Makefile”或“ makefile”的文 件。 如果找到,它会找文件中的第一个目标文件( target),并把这个文件作为最终的目标文件。 如果 目标 文件不存在,或是 目标文件 所依赖的后面的 .o 文件的文件修改时间要比 目标文件新,那么,它 就会执行后面所定义的命令来生成 这个目标 文件。 如果 edit 所依赖的 .o 文件也存在,那么 make 会在当前文件中找目标为 .o文件的依赖性。 如果 我们编写的文件中 的 C 文件和 H 文件 都是存在的 , 那么 make 会生成 .o 文件,然后再用 .o 文件生成 make 的终极任务,也就是 可 执行文件了。 这就是整个 make 的 依赖性, make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么 make 就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功, make 根本不理。 make 只管文件的依赖性,如果 make 找了依赖关系之后,冒号后面的文件还是不 存在 , 那么 make 就不能继续工作。 Makefile 的成功编写是实现本项目的重要工作,而且 Makefile 的合理使用为编写复杂的程序提供了便利。 利用 Makefile 即可完成嵌入式程序的交叉编译,编译完的可执行文件即可下载到 arm 板中进行操作。 进程通讯 重庆大学本科学生毕业设计 (论文) 3 系统设计与实现 11 进程间的通讯机制,就是多进程间相互通讯、交换信息的方法。 Linux 系统提供了以下几种通讯机制: 1) 管道; 2) 命名管道( FIFO); 3) SYSV 机制,包括消息队列、信息量和共享内存; 4) 网络 socket 方式; 5) 全双工管道。 其中,前三种机制只能用于本地进程间的通信,而后两种可以支持远程进程间的通信,一般用于网络编程。 本文采用的通讯方式是命名 管道,就是将一个进程的标准输出和另一个进程的标准输入联系到一起,以供两个进程相互通讯的方法。 当一个进程创建一个 命名 管道时,系统内核为使用 命名 管道准备了两个文件描述符。 一个用于 命名 管道的输入,也就是在 命名 管道中写入数据;另一个用于命名 管道的输出,也就是从 命名 管道中读出数据。 这样,用户程序的系统调用 仍然是通常的文件操作,而内核却利用这种抽象机制实现了 命名 管道这一特殊操作。 图 可以描述 命名 管道的实现机制。 其中。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。