




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮阴工学院毕业设计说明书(论文)第I页共II页目录1绪论111控制器的种类和特点112嵌入式系统简介213ARM简介42系统需求分析与可行性研究421系统需求分析422系统可行性研究53嵌入式开发平台介绍631硬件开发平台介绍632软件开发平台介绍833软件结构与开发流程134软件设计与实现1441SOCKET编程1442LCD显示编程2343图形用户界面设计2544程序的运行与调试27结论29致谢30参考文献31淮阴工学院毕业设计说明书(论文)第1页共31页1绪论随着现代科学技术的迅速发展,自动化控制技术呈现日新月异的变化。现代日常生活和工业生产中,自动化控制技术给人们的日常生活和工作带来了便利,为工业生产提供了重要的保障。其中控制自动化主要包含3个层次,从下往上依次是基础自动化、过程自动化和管理自动化,其核心是基础自动化和过程自动化,而基础自动化和过程自动化的核心是各式各样的控制器和与之配套的软件系统。11控制器的种类和特点运动控制器早期的运动控制器一般采用运算放大器等分立元件,以模拟电路硬接线方式构成。这种控制方式具有以下优点对输入信号进行实时处理,没有附加延时,响应速度快;控制器的精度较高且具有较大的带宽。但是,模拟控制系统与数字控制系统相比,也有明显的缺点老化和环境温度的变化对构成系统的元器件的参数影响很大;构成模拟系统需要的元器件较多。可编程逻辑控制器可编程逻辑控制器PLC是以微处理器为基础,在硬件接线逻辑控制技术和计算机技术的基础上发展起来的。它是将计算机技术与自动控制技术综合为一体的工业控制产品,由中央处理单元CPU、存储器、输入输出单元IO、电源、编程器等组成,是专为在工业环境下应用而设计的一种工业控制计算机。DDC(直接数字控制)控制器的内部也是由微处理器、工作存储器、程序存储器、时钟模拟量输入输出和数字量输入输出等部分组成,和PLC有些类似。通用计算机和工控机,利用高级语言编制相关的控制软件,配合与计算机进行信号交换的通信接口板,构成了一个控制系统。基于专用控制芯片的控制器是将实现控制所需的各种逻辑功能做在一块专用集成电路内,并提供一些专用的控制指令,同时具有一些特定用途必须的辅助功能,使用户的软件设计工作减少到最小程度。例如伺服电机。可编程逻辑器件由于现场可编程门阵列FPGA和复杂可编程逻辑器件淮阴工学院毕业设计说明书(论文)第2页共31页CPLD具有用户可编程的特性,使得用户可以利用系统开发软件或VHDL等开发语言,通过软件编程实现控制算法,并将这些算法下载到相应的可编程逻辑器件中,从而最终以硬件的方式实现控制。近几年来,随着ARM技术的不断成熟,使用ARM处理器作为核心的控制器不断涌现,其原因主要是ARM的特有优势ARM嵌入式CPU大多工作在为特定用户群设计的系统中,通常具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强。ARM片上资源丰富,集成了多种控制器,便于通讯和外围扩展。支持THUMB(16位)/ARM(32位)双指令集,很好的兼容8位/16位器件。处理速度快,寻址空间可达4G,便于移植操作系统,由此可以实现系统资源调度、进程管理、进程通信等诸多功能。操作系统的引入带来了通讯协议支持,也为复杂应用程序的开发带来了便利。可靠性高,尤其对于工业级ARM芯片,可适应高过载、高冲击及其他恶劣环境。价格低,一般几到几十元。ARM嵌入式工业控制系统的硬件和软件都经过高效率地设计,量体裁衣、去除冗余,在同样的硅片面积上实现更高的性能,在具体应用中更具竞争力,产品生命周期长。第三方工具和支持较多,为系统开发带来了便利。当然,ARM也有自身的限制,比如ARM在速度和数据处理能力方面不及DSP。但由于上述诸多优点,基于ARM的控制器还是如雨后春笋般涌现出来,并且随着对控制性能要求的提高,基于高性能ARM处理器的控制器也逐渐多了起来,应用前景十分光明。12嵌入式系统简介嵌入式系统(EMBEDDEDSYSTEM)是以应用为中心,以计算机技术为基础,软硬件可裁减的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标淮阴工学院毕业设计说明书(论文)第3页共31页的严格要求的专用计算机系统。它可以实现对设备的控制、监视或管理等功能。嵌入式系统的概念是相对于通用计算机系统而提出的。在对可靠性和成本控制要求较高的场合,传统PC和工控机都有其不足之处,而嵌入式系统正好满足了这些要求,成为了这些场合的不二之选。从本质上来说,嵌入式系统是微型计算机系统,由于它们要用在具体的场合与环境,并且有一定的专用性(软硬件的裁减和定制),所以称之为“嵌入式”系统。通用计算机系统是对执行非嵌入式应用的计算机系统的统称。它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/0端口、图形控制器等。软件部分包括操作系统软件和应用程序。应用程序控制着系统的运行,而操作系统控制着应用程序编程与硬件的交互作用。有时设计人员把这两种软件组合在一起。这种系统具有软件代码小,高度智能化,响应速度快等特点,特别适合于要求实时的和多任务的体系。嵌入式系统也是一种软硬件混合系统,整个系统是由硬件和软件两大部分组成。前者是整个系统的物理基础,它提供软件运行平台和通信接口,后者是实际控制系统的运行。硬件部分又包括嵌入式处理器、外围设备和外围电路三个部分;软件部分分为嵌入式操作系统和应用软件两个层次,如下表所示表11嵌入式系统软件结构应用软件嵌入式操作系统处理器外围设备外围电路嵌入式系统的核心是嵌入式微处理器。一般具备以下4个特点1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。2)具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。3)可扩展的处理器结构,迅速地扩展出满足应用的最高性能的嵌入式微处理器。4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算淮阴工学院毕业设计说明书(论文)第4页共31页和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有MW甚至W级。按照目前的情况,根据嵌入式系统采用的处理器,一般分为三大类基于微处理器(CPU)的嵌入式系统,基于微控制器(MCU)的嵌入式系统,基于数字信号处理器(DSP)的嵌入式系统。13ARM简介ARM(ADVANCEDRISCMACHINES),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM公司主要出售芯片设计技术的授权。目前,采用ARM技术知识产权核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。近几年ARM技术迅猛发展,ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、SECURCORE系列、XSCALE系列、STRONGARM系列的微控制陆续问世。计算速度越来越高,有些系列主频可达700MHZ,其存储能力也大大增加,并且集多种外围设备于一身,是真正的片上系统(SOCSYSTEMONCHIP),从而大大简化了外围电路的扩展,降低了硬件成本,提高了系统的可靠性。本课题使用的控制器正式基于ARM9的高性能控制器,它具备了较高的主频和4G的地址空间寻址范围,便于配备操作系统。同时,由于将在控制器上运行复杂程序,并且要使用网络通讯功能,操作系统所提供的诸多系统功能以及内嵌的通讯协议将为我们带来便利。2系统需求分析与可行性研究21系统需求分析本课题是基于ARM9的通用控制器主控模块设计。随着控制技术和计算机科学的快速发展,控制器呈现出了通用性和开放性的发展趋势。传统的控制器存在着灵活性差、开发周期长、功能单一、成本较高和难以普及等缺点,针对淮阴工学院毕业设计说明书(论文)第5页共31页目前流行的ARM处理器和控制器PC化的发展趋势,本课题提出并设计了一组通用灵活的控制器软件,该控制器软件运行于控制器的底层,可以避免普通控制器控制运算所带来通信实时性问题,控制更加直接和快速。同时还为控制器纳入了一个C/S结构体系。针对现有的硬件平台和软件资源,该控制程序应当具备具体如下功能在实时性要求不高的场合,使程序具有统一的循环周期。作为客户端能够和服务器端进行通信,运行状态和用户配置参数有一定反馈,并能接受服务器发出的配置命令。另外,所编写的主控模块能够连接上外围接口的相关驱动,实现一个简单的LCD显示功能。最后要有较方便的图形用户界面,实现简单的数据交换。随着本课题中控制器软硬件平台的完善,控制程序可以继续实现更多的功能模块。可以进一步完善控制程序的实时性特征,改善人机交互环境,可以添加更复杂的控制算法,实现更强大的功能。通过以上功能分析,明确了控制器程序应具备的功能,下面将对控制器的实现进行系统的分析。22系统可行性研究本控制器选用基于ARM920T内核的S3C2410微处理器,采用LINUX操作系统,作为控制器系统的核心。拥有较完备的软硬件开发平台,具体的开发平台将在下面的章节中做详细的介绍。用到的硬件资源JXARM92410教学系统的实验箱环境下拥有丰富的硬件资源,具有多个实现功能的硬件模块并提供了丰富的外围接口。所以,我在控制器主控模块的设计中不需要硬件方面的设计,只需要对硬件资源进行了解,对硬件环境中所用的部分进行归纳总结和分析。软件资源方面采用REDHAT90版本的LINUX操作系统,针对LINUX内核和提供和ARM平台移植相关的机制,本设计将对操作系统进行了一定的改进,将详细的研究内核的移植、配置、编译等重要环节,从而完成了LINUX系统的建立,进而完成整个ARMLINUX嵌入式平台的搭建。其中软件程序开发平台分为程序编辑平台和程序编译平台。程序编辑工作是在LINUX下的VI编辑器中进行的。程序用C语言编写,存储为标准的C文件淮阴工学院毕业设计说明书(论文)第6页共31页或头文件。编辑好的程序经过编译、链接等生成可执行的代码。程序的编译工作在LINUX环境下GCC编译器下进行了,因为编译工具只能在LINUX下运行,所以,必须熟练掌握并熟练运用LINUX下的操作命令。因为REDHAT90版本的LINUX操作系统的用户界面采用MINIGUI,熟悉LINUX用户界面的操作也是十分重要的。本课题中,是在PC机的平台上生成能在ARM9控制器平台上运行的可执行代码。这样做的原因是ARM9控制器上的资源毕竟很有限,无法安装使用相应的编译工具,只能借助PC机来完成。最后进行可行性调试,从而完成整个功能设计。3嵌入式开发平台介绍控制器功能的发挥离不开控制软件和它所依附的硬件,复杂控制功能的实现主要是靠软件,而高性能的硬件又是软件得以充分“施展”的基础。下面将介绍控制软件所依托的软硬件环境。31硬件开发平台介绍311微处理器S3C2410S3C2410是SAMSUNG公司基于ARM920T处理器内核开发的一款16/32位嵌入式处理器,运行频率高达200多MHZ,内含一个ARM920T内核和如丰富的片内外围、MMU和高速缓存等片上资源,可以广泛用于PDA、INTERNET设备和手持式设备。其主要性能简述如下S3C2410X芯片集成了大量的功能单元,列举如下1内核采用18V供电,存储单元采用33V独立供电,外部IO采用33V独立供电,16KB数据CACHE,16KB指令CACHE,MMU。2内置外部存储器控制器。3LCD控制器,一个LCD专用DMA。44路带外部请求线的DMA。53个通用异步串行端口,2通道SPI。6一个多主IIC总线,一个IIS总线控制器。7SD主接口版本10和多媒体卡协议版本211兼容。淮阴工学院毕业设计说明书(论文)第7页共31页82个USBHOST接口,一个USBDEVICEVER11接口。94个PWM定时器和一个内部定时器。10看门狗定时器。11117个通用I/O。1224个外部中断。13电源控制模式标准、慢速、休眠、掉电。148通道10位ADC和触摸屏接口。15带日历功能的实时时钟。16芯片内置PLL。1716/32位RISC体系结构,使用ARM920TCPU核的强大指令集。18ARM带MMU的先进体系结构,支持WINDOWSCE、EPOC32、LINUX。19指令缓存CACHE、数据缓存、写缓冲和物理地址TAGRAM,减小了对主存储器带宽和性能的影响。20ARM920TCPU核支持ARM调试体系结构。21内部先进的位控制器总线AMBA20、AHB/APB。整体的功能模块结构如下图所示淮阴工学院毕业设计说明书(论文)第8页共31页图31ARM920T内核和S3C2410功能模块结构312JXARM92410教学实验系统本设计就是在JXARM92410的软硬件环境下进行的。JXARM92410教学系统是一套软硬件集成的、基于ARM的完整的教学实验系统,该系统包含了丰富的硬件资源、完善而优越的调试手段和详尽的教学试验教程。JXARM92410目标处理器采用SAMSUNG公司的S3C2410X微处理器,开发平台采用ADTIDE集成开发环境,它有使用方便、接口丰富、扩充性好和实验丰富等特点。JXARM92410教学系统采用统一的豪华实验箱包装,除ADT1000仿真器外,所有配件均放置于实验箱之内,所包含配件有JXARM924103主板一块9(内置简易JTAG仿真器);ADT1000仿真器一套(为可选配置);320X240256色彩色LCD显示器一块(带触摸屏);4X4键盘一套;USB连接电缆一条;PC并口延长电缆一条;RS232串口通讯线一条;直连网线一根;软件光盘一淮阴工学院毕业设计说明书(论文)第9页共31页张;实验指导书一本;GPRS天线一根;GPS天线一根。JXARM92410嵌入式教学实验平台如图所示图32JXARM92410嵌入式教学试验平台32软件开发平台介绍321嵌入式操作系统虽然嵌入式控制器的应用程序完全可以在裸机上运行而脱离操作系统,但为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(EMBEDDEDOPERATINGSYSTEM)。目前常见的EOS产品包括有VXWORK、WINDOWSCE、C/OS等等,他们各具特点,也各自有一些不足之处。随着EOS的发展,LINUX越来越多地引起了人们的重视。将LINUX用于嵌入式系统有着众多的优势,具体体现在以下方面1LINUX的源代码是开放的,任何人都可以获取并修改,用之开发自己的产品,甚至可以从别人开发的基础上二次开发。LINUX可以随意地配置,不需淮阴工学院毕业设计说明书(论文)第10页共31页要任何的许可证,源代码可以免费得到。这使得采用LINUX作为操作系统不会遇到任何关于版权的纠纷。这些都会节省大量的开发费用。2LINUX是可以定制的,可以根据需要将内核裁减到很小。3LINUX和多数UNIX系统兼容,应用程序的开发和移植相当容易。LINUX是一个和UNIX相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件包括X86,ALPHA、ARM和MOTOROLA等现有的大部分芯片等特性的一种通用操作系统。4LINUX具有良好的可移植性,人们已成功使LINUX运行于数百种硬件平台之上。LINUX采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。5LINUX本身内置网络支持,提供了强大的网络功能。虽然LINUX并非专门为实时性应用而设计,但在一些对实时性要求不是特别高的场合,LINUX不失为一个明智的选择。本系统主要考虑到LINUX的网络功能、可靠性、稳定性、源代码公开等优点,并且采用的ARM芯片AT91RM9200的MMU(内存管理单元)支持LINUX操作系统,所以倾向选择LINUX操作系统。322嵌入式操作系统的移植在PC机的LINUX环境下完成的嵌入式系统存储空间往往很有限,需要把LINUX系统根据实际应用需求进行裁剪。对LINUX进行裁减需要对LINUX系统有一定的了解,如启动过程、文件系统、目录结构、系统工具文件等14。1LINUX内核移植在主机的REDHATLINUX操作系统下安装LINUX发行包以及交叉编译器ARMLINUXGCC。然后对LINUX进行配置MAKEMENUCONFIG并选择适合本系统的相关配置,配置完成后进行编译生成LINUX映像文件ZIMAGE,然后通过UBOOT的TFTP命令将该文件下载到目标板并执行。LINUX内核开发的流程如图所示宿主机目标机淮阴工学院毕业设计说明书(论文)第11页共31页安装LINUX安装交叉编译器配置LINUX编译生成映像文件启动UBOOT下载LINUX映像文件运行LINUX图33JXARM92410系统内核开发2LINUX内核的配置、裁剪和编译LINUX安装环境正确以后,就可以开始编译内核,输入命令CD/HOME/CVTECH/JX2410/LINUXMAKEMENUCONFIG显示如图所示图34内核编译过程图启动菜单配置工具后,选择LOADANALTERNATECONFIGURATIONFILE选项,然后确认选择到SELECT,键入回车键,该选项将载入加载配置文件CONFIGJX2410页面,界面如图所示淮阴工学院毕业设计说明书(论文)第12页共31页图35内核编译过程图ENTER键进入,并输入CONFIGJX2410,然后保存,如图所示图36内核编译过程图接下来建立依赖关系并进行编译MAKEDEPMAKEZIMAGE此处通过MAKEZIMAGE进行编译,在编译过程中将生成的核心进行了压缩,并加入了一段解压的启动代码。生成的LINUX映像文件ZIMAGE保存在相应的目录下。编译成功后的LINUX核心为/HOME/JX2410/ARCH/ARM/ZIMAGE。通过淮阴工学院毕业设计说明书(论文)第13页共31页JX2410的UBOOT将核心下载到SDRAM。先将生成的ZIMAGE复制到/TFTPBOOT目录下。然后启动UBOOT,并在UBOOT并使用TFTP下载。CP/HOME/JX2410/ARCH/ARM/BOOT/ZIMAGE/TFTPBOOT最后生成文件系统,内核启动过程将加载RAMDISK文件系统,因此需要先将/TFTPBOOT/RAMDISKGZ下载到SDRAM,然后才能运行内核。使用如下代码进行RAMDISK文件系统的制作CD/HOME/JX2410/ROOT/MKDIRRDGUNZIPRAMDISKGZ在HOME/JX2410/ROOT/目录下会生成RAMDISK,RAMDISK为解开后的LINUX的文件系统映像文件。在将RAMDISK文件系统映像文件MOUNT到新建目录RD中MOUNTOLOOPRAMDISKRD/323编译环境的建立本设计的软件程序开发平台分为程序编辑平台和程序编译平台。程序编辑工作是在LINUX下的VI编辑器中进行的。程序用C语言编写,存储为标准的C文件或头文件。编辑好的程序经过编译、链接等生成可执行的代码。程序的编译工作在LINUX环境下GCC编译器下进行了,因为编译工具(交叉编译器)只能在LINUX下运行,而且这里牵扯到了一个交叉编译的概念。交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。这里的平台包含两个概念体系结构和操作系统。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。在本文涉及到的情况下,是在PC机的平台上(体系结构是X86,操作系统是标准LINUX比如REDHAT9)生成能在ARM9控制器平台上(体系结构是S3C2410X处理器,操作系统是裁减过的LINUX)运行的可执行代码。这样做的原因是ARM9控制器上的资源毕竟很有限,无法安装使用相应的编译工具,只能借助PC机来完成。由于本设计的目标机采用JXARM92410硬件系统,编译环境的建立既交叉编译器的建立有自带的资源。面几个基本操作步骤在宿主机端,插入JXARM92410光盘到光驱中,在LINUX下执行淮阴工学院毕业设计说明书(论文)第14页共31页MOUNT/DEV/CDROM/MNT若系统不识别/DEV/CDROM的话,使用如下命令,假设CDROM为第二个IDE口的主驱,即为/DEV/HDC,则MOUNTTISO9660/DEV/HDC/MNT然后读取光盘内容并安装CD/MNTCDLINUX然后执行脚本文件LINUXINSTALL,该程序将自动安装编译器和LINUX源代码,在安装之前请确保已经建立CVTECH用户名,并保证以ROOT登陆。/LINUXINSTALL得到编译结果,在/TFTPBOOT/目录下将产生ZIMAGE文件,该文件为LINUX映像,然后通过BOOTLOADER下载到JXARM92410中运行。33软件结构与开发流程本设计在分析了控制器的软件环境和功能需求后,采用了一种纵向分层和横向分块的嵌入式系统软件结构,将分层结构和模块化结构的优点相结合,使控制程序具备可重用性、可继承性和易维护性,并保证上层软件的设备无关性。分层结构和模块化结构各具优点。分层结构采用的是层次化的组织方法,每一层向上一层提供服务,并利用下一层的服务。分层结构常常应用在网络通讯中,它具有如下特点支持基于抽象程度递增的系统设计,可以把一个复杂的系统按递增的步骤分解开。跃层影响小,每一层只和相邻的层打交道,因此功能的改变至多影响上下层。支持复用,只要提供的服务接口定义不变,同一层的不同实现,可以交换使用,对整个系统并没有影响。而模块化是指按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块,这些模块是具有独立功能的程序,可以单独设计、调试与管理。模块化程序设计通常按功能划分法把模块组成树状结构,层次清楚,各模块大小适中,模块间接口简单和统一。模块化程淮阴工学院毕业设计说明书(论文)第15页共31页序结构的优点是将复杂系统化大为小,化繁为简。使系统便于维护。提高系统的设计效率,可多人并行开发。嵌入式软件的开发流程与通用软件的开发流程大同小异,整个开发流程有需求分析阶段、设计阶段、生成代码阶段和固化阶段。软件的编写和开发调试的主要流程为编写、交叉编译、交叉链接、重定位、下载和调试12,如图所示交叉编译交叉链接代码编程交叉调试C/汇编源程序OBJ文件OBJ文件交叉函数库目标机图37系统软件的开发步骤4软件设计与实现41SOCKET编程LINUX是和网络密切相关的,其自身也常常被用来支持各种应用的网络需求。SOCKET在所有网络操作系统和网络应用程序中都是必不可少的,它是网络通信中应用进程和网络协议之间的接口。SOCKET接口是为方便开发人员进行TCP/IP程序开发,而为TCP/IP协议所开发的一组应用程序接口。当服务器和应用程序需要和其他进程通信时就需创建套接口。套接口地址的格式是一个IP地址和一个端口号,套接口是进程间通信的端点,每个套接口的名字都是惟一的,所以依靠套接口来确定整个INTERNET域中的一个网络进程。TCP和UDP是传输层协议,TCP是保证传输的面向连接的协议,而UDP是无连接协议,不淮阴工学院毕业设计说明书(论文)第16页共31页能保证消息传送到目的地15。套接口SOCKET包括数据流套接口和数据报套接口两种类型。数据流套接口是可靠的面向连接的通信数据流,如果在套接口中以“1,2”的顺序放入两个数据它们在令一端也会以“1,2”的顺序到达,他们也可以被认为是无错误的传输。数据报套接口使用UDP来传送数据包,所以数据报的顺序是没有障碍的,数据报是按照一种应答的方式进行数据传输的。411SOCKET流程图设计1数据流通信SOCKET数据流编程中,首先在服务器端使用SOCKET建立一个通信的端点,再用BIND命令把一个地址绑定到这个端点上,然后,服务器端使用LISTEN侦听连接请求,当远端的客户机试图使用CONNECT连接LISTEN正在侦听的端口时,连接将会在队列中等待,直到使用ACCEPT处理它,在ACCEPT处理了连接请求后,将会生成一个新的描述这个连接端口的套接字来收发数据。如果LISTEN一直没有侦听到连接请求,服务器任务就会在ACCEPT处阻塞,一直到有连接请求到来。对于客户机任务来说,它也需要先用SOCKET建立一个通信端口,但是它不必用BIND命令把一个地址绑定到这个端点上,而是直接使用CONNECT向指定的服务器发出连接请求,如果连接请求被接收,下一步就可以进行数据流通信了。整个数据流通信的流程如图所示淮阴工学院毕业设计说明书(论文)第17页共31页SERVERSOCKETBINDLISTEN阻塞,等待客户连接请求ACCEPTRECV处理服务请求SENDCLOSECLIENTSOCKETCLOSERECVSENDCONNECT服务请求服务响应连接建立图41TCPSOCKET的开发过程2数据报通信对于数据报通信的服务器端来说,它不必再在一个端口上侦听以等待建立连接,而只需生成一个端口描述符,而且把这个端口描述符绑定到本地地址上就可以了,对于客户端也是一样的。这样整个通信过程就简洁多了。需要说明的是,UDP的客户端可以使用CONNECT,但是这时使用CONNECT并不真正产生连接,而只是填写对端套接字的有关信息。使用CONNECT的好处是,随后的程序通信中不必每次指定地址,可以使用RECV和SEND等进行通信。否则,就应该使用RECVFROM、SNDTO等实现函数通信,而每次都指定对端地址信息。整个数据报通信的流程如图所示淮阴工学院毕业设计说明书(论文)第18页共31页SERVERSOCKETBINDRECVFROM阻塞,等待客户连接请求ACCEPTSENDTOCLOSECLIENTSOCKETCLOSERECVFROMSENDTOBIND应答数据请求数据图42UDPSOCKET的开发过程本设计中主要选择TCP协议,运用流式SOCKET编程技术实现服务器端和客户端之间的通信。服务器端主要用到的函数有SOCKET、BIND、LISTEN、ACCEPT等。用GCC交叉编译工具编译服务器端程序SERVERC生成可执行程序SERVER。客户端主要用到的函数有SOCKET、CONNECT。用GCC编译客户端程序CLIENTC生成可执行程序CLIENT。再将可执行应用程序加入到CRAMFS文件系统里,下载到JXARM92410教学试验箱中。412SOCKET详细编程网络的SOCKET数据传输是一种特殊的I/O,SOCKET也是一种文件描述符。SOCKET也具有一个类似于打开文件的函数调用SOCKET,该函数返回一个整型的SOCKET描述符,随后的连接建立、数据传输等操作都是通过该SOCKET实现的。1SOCKET的建立为了建立SOCKET,程序可以调用SOCKET函数,该函数返回一个类似于文件描述符的句柄。SOCKET函数原型为INTSOCKETINTDOMAIN,INTTYPE,INTPROTOCOL;淮阴工学院毕业设计说明书(论文)第19页共31页DOMAIN指明所使用的协议族为PF_INET,表示互联网协议族(TCP/IP协议族);TYPE参数指定SOCKET的类型SOCK_STREAM或SOCK_DGRAM,SOCKET接口还定义了原始SOCKET(SOCK_RAW),允许程序使用低层协议;PROTOCOL赋值“0“。SOCKET调用返回一个整型SOCKET描述符,在后面的调用中使用它。SOCKET描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用SOCKET函数时,SOCKET执行体将建立一个SOCKET,实际上“建立一个SOCKET”意味着为一个SOCKET数据结构分配存储空间。SOCKET执行体来管理描述符表。两个网络程序之间的一个网络连接包括五种信息通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。SOCKET数据结构中包含这五种信息。2SOCKET的配置通过SOCKET调用返回一个SOCKET描述符后,在使用SOCKET进行网络传输以前,必须配置该SOCKET。面向连接的SOCKET客户端通过调用CONNECT函数在SOCKET数据结构中保存本地和远端信息。无连接SOCKET的客户端和服务端以及面向连接SOCKET的服务端通过调用BIND函数来配置本地信息。BIND函数将SOCKET与本机上的一个端口相关联,随后在该端口监听服务请求。BIND函数原型为INTBINDINTSOCKFD,STRUCTSOCKADDRMY_ADDR,INTADDRLEN;SOCKFD是调用SOCKET函数返回的SOCKET描述符,MY_ADDR是一个指向包含有本机IP地址及端口号等信息的SOCKADDR类型的指针;ADDRLEN设置为SIZEOFSTRUCTSOCKADDR。STRUCTSOCKADDR结构类型是用来保存SOCKET信息的STRUCTSOCKADDRUNSIGNEDSHORTSA_FAMILY/地址族,AF_XXX/CHARSA_DATA14/14字节的协议地址/淮阴工学院毕业设计说明书(论文)第20页共31页SA_FAMILY赋值为AF_INET,代表INTERNET(TCP/IP)地址族;SA_DATA则包含该SOCKET的IP地址和端口号。另外还有一种结构类型STRUCTSOCKADDR_INSHORTINTSIN_FAMILY/地址族/UNSIGNEDSHORTINTSIN_PORT/端口号/STRUCTIN_ADDRSIN_ADDR/IP地址/UNSIGNEDCHARSIN_ZERO8/填充0以保持与STRUCTSOCKADDR同样大小/这个结构更方便使用。SIN_ZERO用来将SOCKADDR_IN结构填充到STRUCTSOCKADDR同样的长度,可以用BZERO或MEMSET函数将其置为零。指SOCKADDR_IN的指针和指向SOCKADDR的指针可以相互转换,一个函数所需参数类型是SOCKADDR时,就在函数调用的时候将一个指向SOCKADDR_IN的指针转换为指向SOCKADDR的指针;或者相反。使用BIND函数时,用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号MY_ADDRSIN_PORT0/系统随机选择一个未被使用的端口号/MY_ADDRSIN_ADDRS_ADDRINADDR_ANY/填入本机IP地址/通过将MY_ADDRSIN_PORT置为0,函数会自动选择一个未占用的端口来使用。同样,通过将MY_ADDRSIN_ADDRS_ADDR置为INADDR_ANY,系统会自动填入本机IP地址。在使用BIND函数时,需要将SIN_PORT和SIN_ADDR转换成为网络字节优先顺序;而SIN_ADDR则不需要转换。计算机数据存储有两种字节优先顺序高位字节优先和低位字节优先。INTERNET上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在INTERNET上传输数据时就需要进行转换,否则就会出现数据不一致。下面是几个字节顺序转换函数HTONL把32位值从主机字节序转换成网络字节序淮阴工学院毕业设计说明书(论文)第21页共31页HTONS把16位值从主机字节序转换成网络字节序NTOHL把32位值从网络字节序转换成主机字节序NTOHS把16位值从网络字节序转换成主机字节序BIND函数在成功被调用时返回0;出现错误时返回1,并将ERRNO置为相应的错误号。在调用BIND函数时一般不要将端口号置为小于1024的值,因为1到1024是保留端口号,可以选择大于1024中的任何一个没有被占用的端口号。3建立连接面向连接的客户程序使用CONNECT函数来配置SOCKET,并与远端服务器建立一个TCP连接,其函数原型为INTCONNECTINTSOCKFD,STRUCTSOCKADDRSERV_ADDR,INTADDRLENSOCKFD是SOCKET函数返回的SOCKET描述符;SERV_ADDR是包含远端主机IP地址和端口号的指针;ADDRLEN是远端地质结构的长度。CONNECT函数在出现错误时返回1,并且设置ERRNO为相应的错误码。进行客户端程序设计无须调用BIND,因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,SOCKET执行体为程序自动选择一个未被占用的端口,并通知程序数据什么时候到达端口。CONNECT函数启动和远端主机的直接连接。只有面向连接的客户程序使用SOCKET时才需要将此SOCKET与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。LISTEN函数使SOCKET处于被动的监听模式,并为该SOCKET建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。INTLISTENINTSOCKFD,INTBACKLOGSOCKFD是SOCKET系统调用返回的SOCKET描述符;BACKLOG指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待ACCEPT处理它们。BACKLOG对队列中等待服务的请求的数目进行了限制,系统缺省值为20。一个服务请求到来时,输入队列已满,该SOCKET将拒绝连接请求,客户将收到一个出错信息。淮阴工学院毕业设计说明书(论文)第22页共31页当出现错误时LISTEN函数返回1,并置相应的ERRNO错误码。ACCEPT函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用ACCEPT函数,然后睡眠并等待客户的连接请求。INTACCEPTINTSOCKFD,VOIDADDR,INTADDRLENSOCKFD是被监听的SOCKET描述符,ADDR是一个指向SOCKADDR_IN变量的指针,该变量用来存放提出连接请求服务的主机的信息;ADDRTEN为一个指向值为SIZEOFSTRUCTSOCKADDR_IN的整型指针变量。出现错误时ACCEPT函数返回1并置相应的ERRNO值。首先,当ACCEPT函数监视的SOCKET收到连接请求时,SOCKET执行体将建立一个新的SOCKET,执行体将这个新SOCKET和请求连接进程的地址联系起来,收到服务请求的初始SOCKET仍可以继续在以前的SOCKET上监听,同时可以在新的SOCKET描述符上进行数据传输操作。4数据传输SEND和RECV这两个函数用于面向连接的SOCKET上进行数据传输。SEND函数原型为INTSENDINTSOCKFD,CONSTVOIDMSG,INTLEN,INTFLAGSSOCKFD是用来传输数据的SOCKET描述符;MSG是一个指向要发送数据的指针;LEN是以字节为单位的数据的长度;FLAGS一般情况下置为0。SEND函数返回实际上发送出的字节数。在程序中将SEND的返回值与欲发送的字节数进行比较。当SEND返回值与LEN不匹配时,应该对这种情况进行处理。CHARMSG“HELLO“INTLEN,BYTES_SENTLENSTRLENMSGBYTES_SENTSENDSOCKFD,MSG,LEN,0RECV函数原型为INTRECVINTSOCKFD,VOIDBUF,INTLEN,UNSIGNEDINTFLAGS淮阴工学院毕业设计说明书(论文)第23页共31页SOCKFD是接受数据的SOCKET描述符;BUF是存放接收数据的缓冲区;LEN是缓冲的长度。FLAGS也被置为0。RECV返回实际上接收的字节数,当出现错误时,返回1并置相应的ERRNO值。SENDTO和RECVFROM用于在无连接的数据报SOCKET方式下进行数据传输。由于本地SOCKET并没有与远端机器建立连接,所以在发送数据时指明了目的地址。SENDTO函数原型为INTSENDTOINTSOCKFD,CONSTVOIDMSG,INTLEN,UNSIGNEDINTFLAGS,CONSTSTRUCTSOCKADDRTO,INTTOLEN该函数比SEND函数多了两个参数,TO表示目地机的IP地址和端口号信息,而TOLEN被赋值为SIZEOFSTRUCTSOCKADDR。SENDTO函数也返回实际发送的数据字节长度或在出现发送错误时返回1。RECVFROM函数原型为INTRECVFROMINTSOCKFD,VOIDBUF,INTLEN,UNSIGNEDINTFLAGS,STRUCTSOCKADDRFROM,INTFROMLENFROM是一个STRUCTSOCKADDR类型的变量,该变量保存源机的IP地址及端口号。FROMLEN设置为SIZEOFSTRUCTSOCKADDR。当RECVFROM返回时,FROMLEN包含实际存入FROM中的数据字节数。RECVFROM函数返回接收到的字节数,当出现错误时返回1,并置相应的ERRNO。SOCKET调用了CONNECT函数时,利用SEND和RECV进行数据传输,但该SOCKET仍然是数据报SOCKET,并且利用传输层的UDP服务。但在发送或接收数据报时,内核会自动为之加上目地和源地址信息。5结束传输当所有的数据操作结束以后,调用CLOSE函数来释放该SOCKET,从而停止在该SOCKET上的任何数据操作CLOSESOCKFD也可以调用SHUTDOWN函数来关闭该SOCKET。该函数允许停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。如关闭某SOCKET的写操作而允许继续在该SOCKET上接受数据,直至读入所有数据。淮阴工学院毕业设计说明书(论文)第24页共31页INTSHUTDOWNINTSOCKFD,INTHOWSOCKFD是需要关闭的SOCKET的描述符。参数HOW允许为SHUTDOWN操作选择以下几种方式0不允许继续接收数据1不允许继续发送数据2不允许继续发送和接收数据均为允许则调用CLOSESHUTDOWN在操作成功时返回0,在出现错误时返回1,并置相应ERRNO。42LCD显示编程421程序的开发流程由于本设计采用的是JXARM2410实验箱环境,所以在编写过程中需要具体的实践过程来体现。S3C2410中具有内置的LCD控制器,它将显示缓存中的LCD数据传输到外部LCD驱动电路上的显示缓冲区中。由于是彩色显示,所以采用RED、GREEN、BLUE三色混合调试。在本设计中我只负责应用程序的编写,驱动和接口设计程序由陈锴同学负责完成,设计开发该应用程序时,一般通过将FRAMEBUFFER设备映射到进程地址空间的方式使用,用户可以将它看成是显示内存的一个映像,LINUX提供了MMAP函数将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。一旦FRAMEBUFFER驱动程序正确加载,应用程序就可以通过“/DEV/FB0”设备文件来进行显示。整个程序的开发流程如图所示淮阴工学院毕业设计说明书(论文)第25页共31页打开帧缓冲设备开始成功调用驱动层函数,获取设备固定信息和变量信息将物理设备映射到缓存地址空间到成功将数据加载到缓冲区LCD控制器将缓冲设备地址空间的数据以点阵的形式在屏幕上显示结束NYNY图43LCD显示主程序流程图422程序的实现实现一个在LCD显示屏中间画一个矩形的功能。首先设置头文件,定义所需的变量与结构体,然后调用相应的函数,实现功能模块。首先用OPEN函数打开FRAMEBUFFER设备,当函数返回值FBFD0,就输出错误信息提示“CANTOPENFRAMEBUFFERDEVICE”,否则退出之后程序输出“OPENSUCCESSFUL”。接着用IGOCTL函数获取设备的固定信息。FRAMEBUFFERDE的类型NTYPE,如0为像素;视觉类型VISUAL,如真彩为2,伪彩为3;每行的长度LINE_LENGTH;映像RAM的参数以及一些可变的显示屏信息。得到显示屏大小的字节数SCREENSIZEVINFOXRESVINFOYRESVINFOBITS_PER_PIXEL/8淮阴工学院毕业设计说明书(论文)第26页共31页然后调用MMAN函数将设备映射到存储器FBPCHARMMAN0,SCREENSIZE,PORT_READ|PORT_WRITE,MAP_SHARED,FBFD,0对返回值FBP进行判断是否映射成功。最后设计在存储器放点的位置,该显示器的分辨率为640480。设置显示的颜色,由于是彩色显示,所以采用RED、GREEN、BLUE三色混合调试。计算图像在屏的中间显示。所以定义放点位置VINFOXOFFSET640420/2VINFOYOFFSTE480340/2B10G100R100FORY0/Y340YFORX0X420XLOCATIONXVINFOXOFFSETVINFOBITS_PER_PIXEL/8YVINFOYOFFSETFINFOLINELENGTHIFVINFOBITS_PER_PIXEL32FBPLOCATIONBFBPLOCATION1GFBPLOCATION2RFBPLOCATION3OELSEUNSIGNEDSHORTINTTR11|G5|B/三种颜色以565方式排列UNSIGNDESHORTINTFBPLOCATIONT最后关闭帧缓冲设备CLOSEFBFD43图形用户界面设计随着嵌入式的发展,GUI(图形用户界面)越来越受到重视。本设计在此做了一个简单的图形用户界面,来体现客户端和服务器端的通信。淮阴工学院毕业设计说明书(论文)第27页共31页首先在LINUX下安装QT软件,将装有版本为QTSDKLINUXX86OPENSOURCE201002的QT软件的优盘切换到LINUX环境下,创建适当文件目录,根据命令提示安装QT软件。在QT软件中创建工程文件,在工程文件中创建窗体FORM1和FORM2,置入所需的控件,生成客户端与服务器的对话框,如下图所示图44窗体的创建图接下来,通过编译后,在终端执行运行命令,生成可输入数据的对话框,如图所示图45服务器端的对话框淮阴工学院毕业设计说明书(论文)第28页共31页图46客户端的对话框44程序的运行与调试为了验证ARM嵌入式开发板上服务器端的通信能力,在PC机上打开调试界面环境,启动开发板,装载在开发板内的BOOTLOADER信息和LINUX内核的启动过程就会显示在界面环境里。待操作系统启动后,按“ENTER”键,就进入LINUX的命令行模式。在提示符下,用LS命令查看开发板的文件系统,可以看到TCPSERVER,给开发板配置IP,在此开发板的IP地址要和与之通信的客户端PC的IP地址在同一网段;给该通信分配端口号3490,运行/SERVER,如图所示。在PC机的LINUX环境下打开一终端作为客户端的测试窗口,进入CLIENT所在的目录CD/XIAOCHUN/SOCKET,执行命令/CLIENT172001,即客户端向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医养结合机构餐饮服务协议
- 2025年焊工服务协议范本
- 2025年策划合作伙伴销售渠道优化升级协议
- 2025年互帮互助协议书
- 2025年屠宰场牛肉交易合作协议
- 事业单位房屋管理经济效益和社会效益
- 教师职业发展的持续动力机制
- 粮食资源循环利用与储备技术革新
- 工业园区数字化转型的驱动力与实践
- 理赔业务风险培训效果评估责任风险基础知识点归纳
- 公司招采管理制度
- 故障测距-牵引网故障测距(铁路牵引供电系统继电保护)
- 国家开放大学期末机考人文英语1
- 广州市轻工技师学院招聘真题
- 邦纳T30UX系列超声波传感器
- 产业命题赛道命题解决对策参考模板
- 重点岗位工岗位应知风险和异常情况处置管控措施清单
- 电动车分期付款的合同范本
- 《反对校园欺凌》话剧剧本
- 国家开放大学电大《课程与教学论》形考任务2试题及答案
- 东风雪铁龙世嘉c-quatre说明书(三厢)
评论
0/150
提交评论