基于嵌入式平台的图像采集与传输毕业设计第二稿_第1页
基于嵌入式平台的图像采集与传输毕业设计第二稿_第2页
基于嵌入式平台的图像采集与传输毕业设计第二稿_第3页
基于嵌入式平台的图像采集与传输毕业设计第二稿_第4页
基于嵌入式平台的图像采集与传输毕业设计第二稿_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、i 摘摘 要要 本课题分析了国内外嵌入式系统的发展现状,针对当前嵌入式的应用,介绍了一种基 于 arm 的嵌入式图像采集与传输方案。该方案借助 wince 的强大功能,具体积小,稳定性 高和快速开发的优点。课题完成了基本的硬件设计和软件开发。 硬件方面采用了 usb 摄像头与 s3c2440 处理器组成嵌入式图像采集装置,并通过以太 网连接宿主机。 软件方面分为系统软件的移植和应用软件开发方面。系统软件方面包含 arm 平台的 bootloader 烧写和嵌入式 wince 系统定制和移植以及摄像球驱动的开发;应用软件方面包 括图像采集模块的设计和 tcp 传输模块的设计两个部分。 课题的最后

2、对系统设计过程中遇到的问题进行了总结,并提出了改进方法。 关键词:关键词:嵌入式系统;arm;图像采集;usb 摄像头;wince;tcp; ii image capture and transmission based on embedded platforms lu zhi-sheng abstract by analyzing the situations of the embedded systems home and abroad, in view of the current embedded applications, introduced the arm-based embed

3、ded image capture and transmission system. by the power of wince, the program has specific plot of small, high stability and rapid development advantages. the design of hardware system and the development of software system are mainly discussed in this thesis. with regards to the hardware design,the

4、 embedded capture system is consist of usb camera and s3c2440 as its cpu, and as it connects to pc through ethernet. as far as the software design, the system software and the internet application must be designed. first we must port the bootloader and embedded wince kernel to target of arm platform

5、 and drive the development of usb camera. then, a module of picture capturing and a picture transmission based on tcp need to be designed to run on the platform of arm. finally, this topics summarized the problems of completed works, and the method of future improves has been given too. key words: e

6、mbedded systems; arm; picture capturing; usb camera; wince; tcp; iii 目目 录录 1. 绪论.1 1.1 嵌入式软硬件的现状与发展 .1 1.2 本课题研究的内容 .1 2.开发方法综述.2 2.1 需求分析 .2 2.2.1 摄像头的选择.2 2.2.2 嵌入式处理器的选择.3 2.2.3 嵌入式操作系统的选择.3 2.2 开发环境及工具.4 2.2.1 arm9 s3c2440a 开发板 .4 2.2.2 platform builder 5.0 + visual studio 2005.7 2.3 开发流程.9 3.嵌入

7、式图像采集与传输程序的设计.10 3.1 关键技术.10 3.1.1 bootloader.10 3.1.2 eboot.10 3.1.3 摄像头 sdk 接口函数.10 3.1.4 mfc 微软基础类库 .13 3.1.5 tcp 协议 .13 3.1.6 windows socket.14 3.2 方案总体设计.17 3.3 wince 驱动架构.17 3.4 图像采集模块设计 .19 3.4.1 打开摄像头设备 .19 3.4.2 始化摄像头设备 .19 3.4.3 初始化视频信息.20 3.4.4 获取视频帧与 jpeg 图像.21 3.4.5 关闭视频设备.21 3.5 图像数据传输

8、模块.23 3.6 wince 系统的定制 .25 4.系统的测试.27 4.1 bootloader下载 .27 iv 4.2 wince 系统的烧写 .28 4.3 建立与 pc 操作系统与 wince 系统文件同步.30 4.4 联机总体测试.30 结论与尚存在问题.32 参考文献.35 致谢.36 1 基于嵌入式平台的图像采集与传输 姓名:陆志生 学号:2005394122 班级:网络工程 051 1. 绪论 嵌入式系统把微处理器的系统电路与其专用的软件平台相结合,从而实现了系统操作的 最高效率. 嵌入式系统早已融入了人们的日常生活,嵌入式系统的产品主要集中在信息家电、 通信产品、工业

9、控制器、掌上电脑领域. 家电、玩具、汽车、新一代手机、数码相机等设 备也都采用了嵌入式系统的核心技术。 随着后pc 时代的到来,有理由相信嵌入式系统会呈 现出蓬勃发展的趋势。 日常生活中所见到的数码相机、可视电话、多媒体ip 电话和电话会议等产品,其中图 像采集是最核心的技术。 图像采集的速度、质量直接影响到产品的整体效果。采用usb 接 口的摄像头在一定程度上突出了采样速率高、图像质量高、通用性好的特点。 1.1 嵌入式软硬件的现状与发展 嵌入式系统分为嵌入式软件和硬件两大类。其中嵌入式硬件一般由嵌入式处理器及其 外围设备组成,而嵌入式软件一般包括嵌入式操作系统、嵌入式支撑软件和应用软件三大

10、 类。嵌入式处理器是嵌入式系统的核心,它与通用处理器最大的区别便是其大多数工作是 为特定的用户群,为特定的应用而专门定制。嵌入式处理器可以分为低端的微控制器(mcu)、 中高端的嵌入式微处理器(empu)、通信领域的 dsp 处理器和高度集成的片商系统(soc)。典 型的嵌入式处理器有 arm、mlps、powerpc 等等。 嵌入式外围设备一般是指一个嵌入式系统中除了处理器外用于完成存储、通信、调试、 显示等辅助功能的其他部件,一般可以分为存储器(flash 应用最为广泛)、接口(并口、rs 一 232 串口、nc 总线接口等等)和人机交互(lcd、键盘和触摸屏等)三大部分。嵌入式操作 系统

11、是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域,负责嵌入 系统的全部软、硬件资源的分配、调度工作,控制,协调并发活动;它必须体现其所在系统 的特征,能够通过装卸某些模块来达到系统所要求的功能。现在国际上有名的嵌入式操作 系统有 windowsce、linux、vxworks 等,我国嵌入式操作系统的起步较晚,国内此类产品 主要是基于自主版权的 linux 操作系统,其中以中软 linux、红旗 linux、东方 linux 为代 表。 2 1.2 本课题研究的内容 本课题主要是利用 arm9 s3c2440a 开发板以及一只中星微芯片 zc030 x 系列的 usb 摄像 头

12、作为硬件环境,在开发板上烧写一个 wince5.0 的操作系统,并编写一个服务端程序。而 这个服务端程序运行在 wince5.0 上,主要完成的功能是调用摄像头进行图像的采集,然后 将采集到的图像数据通过以太网传送到 pc 机上。也就实现了一个基于嵌入式平台的图像采 集与传输系统的简单架构。日后可根据实际的需要,在这个架构的基础上进行改进以及增 加需要的功能。因此,本课题主要针对以下内容进行分析研究: 1)arm9 s3c2440a 开发板的功能结构。 2)wince5.0 操作系统的定制与烧写。 3)如何识别以及调用中星微 usb 摄像头。 4)图像采集与传输的服务端程序的设计。 2.开发方

13、法综述 2.1 需求分析 本课题、 。设计分为硬件和软件两大部分。硬件部分包括摄像头和开发平台的选择;软 件部分包括系统级软件(bootloader、操作系统和驱动程序)与用户级软件(服务端,客户端)。 2.2.1 摄像头的选择 摄像头是由 sensor(传感器)、dsp 即 数字信号处理器、lens(镜头)、外壳模具、usb 连线、电路板及阻容等周边器件构成,其最关键的是镜头,传感器和 dsp。选择标准是以 清晰度高,图像流畅的为好。镜头是对光线的最重要部位。一般按照材料分主要有 3 种, 有玻璃镜片、塑胶镜片和化合物的,这里最好的要算是玻璃的,其通光系数大,一般好的 镜头的通光口径也会做的

14、较大,在光线不是很好的时候也可以得到较好的效果,但是价格 要高点。塑胶的通光要差点,但是价格便宜,就这点也得到了一些中低端用户的认可。化 合物的比较少。本系统中选用的摄像头镜头便是塑胶镜片的。传感器是将光信号转换成电 信号的器件,目前市场见到的主要有两种:一种是 ccd,一种是 cmos。而两者的主要区别在 于:ccd 成像像素高,清晰度高,但价格昂贵。主要应用于高端的数码相机市场。而 cmos 在成像方面稍微差一些,特别光线差时,速度较慢,但是其价格低廉,适合中低端市场。 综合考虑,本系统中使用的传感器是 cmos。 目前用于摄像头的 dsp 主要有中国中星微公司的 dsp 芯片(zc030

15、x)和美国 ov 公司的 0v511+芯片。在国内市场上的 usb 摄像头基本上采用的是中星微公司的 dsp 芯片,而 ovs11+的芯片的摄像头则比较难找到。考虑到中星微的市场普及率,本系统中采用了 3 zc030 x 的 dsp 芯片。 2.2.2 嵌入式处理器的选择 嵌入式处理器是嵌入式系统的核心,所以选择一款合适的嵌入式处理器则是非常重要 的。嵌入式处理器的选择应该从应用工程背景,处理器性能,处理器功耗,开发成本,开 发难易程度等方面综合考虑。 目前,市面上的嵌入式处理器种类十分多,据不完全统计,全世界嵌入式处理器的品 种总量己经超过一千多种,典型的嵌入式处理器有 arm、mips、p

16、owerpc 等等。 arm 公司是全球领先的 16/32 位 risc 微处理器产权设计供应商,在移动通信、手持 设备领域上占主导地位;mips 技术公司是一家设计制造高性能、高档次的嵌入式 32/64 位 处理器厂商。powerpc 以其可伸缩性好和方便灵活的特点也成为应用十分广泛的嵌入式处 理器,从高端的工作站、服务器到台式计算机系统,从消费类电子产品到大型通信设备, 无所不包。根据本系统的需求分析,需要对视频数据进行采集和传输,对处理器的性能有 一定要求。由于 arm 价格低廉,功耗低,处理能力较强,所以决定选用 arm 作为本系 统的核心处理器。 本系统硬件平台是基于 arm9 的

17、s3c2440a 开发板,这款开发板是三星公司主要为高 性价比,低功耗的应用场合而设计,其资源丰富,十分适合本系统开发。 2.2.3 嵌入式操作系统的选择 嵌入式操作系统与嵌入式系统密不可分,是嵌入式系统的一个十分重要的组成部分, 一个嵌入式系统如果没有嵌入式操作系统的支持,其实现的应用将变得十分有限,嵌入式 系统的优势也将不能发挥出来。嵌入式操作系统能有效管理越来越复杂的系统资源,能够 把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来并且能够提供库函 数、驱动程序、工具集以及应用程序,大大提高了应用系统的开发效率。嵌入式操作系统 的选择主要从以下几个方面考虑: (l)操作系统的

18、硬件支持,包括操作系统是否支持目标硬件平台,基于该选择的操作系 统上开发的嵌入式应用软件是否具有很好的移植性; (2)开发工具的支持程度,包括在线仿真器、编译器、汇编器、连接器、调试器等能否 支持操作系统; (3)应用需求,包括操作系统的性能、兼容性、技术支持等。 目前嵌入式操作系统己经从简单走向成熟,主要有 vxworks、windowsce 和嵌入式 linux 等。 windows ce 是微软公司开发的一个 32 位、多任务、多线程的嵌入式操作系统。它可 以用在手机、机顶盒、智能手持设备、网关、数字媒体设备、工业控制等多种场合。 windows ce 支持 x86、arm、mips 和

19、 sh 四种处理器架构。并支持 wifi,usb 2.0 等新型设 备,并具有强大的多媒体功能。 windows ce 操作系统是模块化设计的,整个系统被划分为数百个模块,嵌入式系统开 4 发人员可以根据系统的需要,来选择自己需要的模块,从而达到减小系统体积目的。一个 最小的 windows ce 可运行内核只需要几百 kb。而一个功能完备的 windows ce 映像也不会 超过 64mb。 与其他嵌入式操作系统相比,windows ce 的优点有如下几点: 学习 / 使用简单:微软提供了方便的 ide 和开发工具,对于 os 的定制、裁减、交叉 编译等都相对简单。此外,windows ce

20、 的应用程序开发接口也是 win32 api,与桌面 windows 的基本一致。这也方便了桌面 windows 开发人员向 windows ce 嵌入式开发过渡。 图形界面优秀:这个理由或许是许多人员选用 windows ce 的主要原因。windows ce 的图形和多媒体能力是非常优秀的,可以方便的支持多种视频音频格式。此外还支持 directx 多媒体接口,这对于开发多媒体应用(例如电子地图导航、多媒体播放器等)非 常方便。 应用集成度高:windows ce 自带了很多应用程序,例如 web 浏览器,多媒体播放器, office 文件察看器等。这对于快速的开发一款产品相当有用。此外,

21、互联网上有数以万计 的为 windows ce 开发的应用程序。 vxworks 是 windriver 公司的实时操作系统,它支持各种工业标准,包括 posix、ansic 和 tcp/ip 网络协议。vxworks 运行系统的核心是一个高效率的微内核,该微 内核支持各种实时功能,包括快速多任务处理、中断支持、抢占式和轮转式调度。微内核 设计减轻了系统负载并可快速响应外部事件。目前在全世界装有 vxworks 系统的智能设备 数以百万计,其应用范围遍及互联网、电信和数据通信、数字影像、网络、医学、计算机 外设、汽车、火控、导航与制导、航空、指挥、控制、通信和情报、声纳与雷达、空间与 导弹系统

22、、模拟和测试等众多领域。 linux 是个与生俱来的网络操作系统,成熟而且稳定。linux 是源代码开放软件,任何 人都可以修改它,或者用它开发自己的产品。linux 系统是可以定制的,系统内核目前己 经可以做得很小。linux 作为一种可剪裁的软件平台系统,是发展未来嵌入设备产品的绝 佳资源。但 linux 内核复杂,产品开发周期相对较长。 本系统对操作系统的要求是需要有强大的网络支持,最重要一点就是开发周期短,容 易上手。所以综合考虑,本系统将采用嵌入式 windowsce 操作系统来进行开发。 2.2 开发环境及工具 2.2.1 arm9 s3c2440a 开发板 (1)板子布局 5 图

23、 2-1 s3c2440a 开发板整体布局 表 2-1 s3c2440a 开发板开参数说明 序号说明 1 12v 电源接口 2 电源开关 3 com1,串口 0(rs232) 4 标准 jatg 5 gpio 引出接口 6com2 7 sd/mmc 卡 8 音频输入,mic 9 音频输出 10 usb 从设备 11 usb 主设备,用来连接 usb 鼠标,键盘,优盘等 12 10m 以太网口 13 复位键 6 续表2-1 s3c2440a开发板开参数说明 14 k1-4:用户按钮 15 rtc 电源,时钟备份电池 16 核心板下载接口 17 lcd 接口 18 camera 摄像头接口 其主要

24、的特性是: cpu处理器 -samsung s3c2440a,主频400mhz,最高533mhz sdram 内存 -在板64m sdram - 32bit 数据总线 - sdram 时钟频率高达100mhz flash存储 - 在板64m nand flash, 掉电非易失 lcd 显示屏 - 支持黑白、4 级灰度、16 级灰度、256 色、64k 色、真彩色tft 液晶触目屏,尺寸 为3.5 寸,屏幕分辨率为800 x600 象素; 规格尺寸 - 120 x 100(mm) (2)sdram与falsh 嵌入式系统存储器有sdram和flash,在本系统中用到两片32m的sdram和一片6

25、4m的 nandflash。sdram是嵌入式系统的内存,具有单位空间存储容量大和价格便宜的优点,已 广泛应用在各种嵌入式系统中。当系统启动时,cpu首先从复位地址0x0000000处读取启动 代码,在完成系统的初始化后,程序代码一般应调入sdram中运行,以提高系统的运行速度。 同时,系统及用户堆栈、运行数据也都放在sdram中。 flash 存储器是一种可电擦写,掉电后信息不丢失的存储器,它具有低功耗、大容量、 擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法 完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一种非易失性存储 器,flash 在

26、系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要保存的用 户数据等。常用的 flash 为 8 位或 16 位的数据宽度,编程电压为单 3.3v。主要的生产厂 商为 atmel、amd、hyundai、三星等,它们生产的同型器件一般都具有相同的电气特性和 封装形式,可通用。目前使用的两种主要的 flash 为 nor 型和 nand 型。nand 型 flash 能 够提供极高的单元密度,写入和擦除速度非常快,而且一般 nand 型 flash 的存储容量很大。 7 nor 的特点是芯片内执行,这样应用程序可以直接在 flash 内运行,不必再把代码读到系 统 ram 中,nor 的

27、传输效率很高,在 1 一 4mb 的小容量时具有很高的成本效益,但是很低 的写入和擦除速度大大影响了它的性能。 由于制造商的原因,本系统使用到的 s3c2440a 开发板只有 nand falsh,所以操作 系统的启动代码、操作系统和应用程序只能一起烧写到 nand flash 中。 2.2.2 platform builder 5.0 + visual studio 2005 (1)platform builder 5.0 platformbuilder 是为基于 mierosoftwindows ce.net 操作系统构建定制嵌入平台 而提供的集成开发环境(ide)。 platformbu

28、llder 附带有设计、创建、构建、测试和调试 一个基于 windowsce 的平台所需的所有开发工具。本设计同样离不开这个工具,它是定制 我们嵌入式平台 wince 映像唯一工具。 platformbuilder 中的主要特性包括: 新的 platformwizard(平台向导):可帮助您创建一个新的平台。 基础配置:为各种流行的设备类别预置的定制操作系统,为自定义操作系统的创建提供 了一个起点。 仿真器(emulator):通过硬件仿真加速和简化了系统的开发,使用户可以在开发工作站 上对平台和应用程序进行测试。 bspwizard(bsp 向导):提高了 bsp(主板支持软件包)创建过程的

29、效率。其中 bsp 是 wince 操作系统提供出来的一个自由度,这个是 wince 适应不同硬件的机制: 适配层以 wince 的驱动接口要求,完成不同板级驱动。这样定制出来的 wince 可以在 任何的硬件环境一下运转 目录:一个操作系统特性的列表,您可以使用列表中的特性对平台进行定制。 willdowscetestkit(测试工具包):提供了一个驱动程序测试工具集。 内核调试器:可以对自定义的操作系统映像进行调试,并且向用户提供有关映像性能的 信息。 应用程序调试器:可以在自定义的操作系统映像上对应用程序进行调试。 自动化的依靠性检查:可以确保支持平台配置所需的所有特性都包括在操作系统映

30、像之 中。 导出向导(exportwizard):可以向其他 platformbuilde:用户导出自定义的目录 (catalog)特性。 导出 sdk 向导(exportsdkwizard):使用户可以导出一个自定义的软件开发工具包(sdk)。 这个也是重要的环节,进行 wince 开发的,sdk 是需要 pb 针对每个项目导出的,每个项目 是不同,当然肯定一种冗余的解决方案。但是对于每个项目而言,它们是专用且方便的。 远程工具:可以执行同基于 windowsce 的目标设备有关的各种调试任务和信息收集任务。 8 其界面下图: 图 2-3 platform builder 5.0 界面 (2

31、)visual studio 2005 visual studio 是一套完整的开发工具集,用于生成 asp.net web 应用程序、xml web services、桌面应用程序和移动应用程序。visual basic、visual c+、visual c# 和 visual j# 全都使用相同的集成开发环境 (ide),利用此 ide 可以共享工具且有助于 创建混合语言解决方案。另外,这些语言利用了 .net framework 的功能,通过此框架可 使用简化 asp web 应用程序和 xml web services 开发的关键技术。本系统利用它来开发 主要是因为其集成了智能设备程序

32、的开发工具以及仿真程序,开发人员调试程序只需在指 定的仿真程序里面运行调试,而不用每次都将程序下载到板子上。其界面如下: 9 图 2-4 visual studio 2005 界面 2.3 开发流程 嵌入式系统是一个复杂而专用的系统,在进行系统开发之前,必须对系统的功能需求 进行分析并明确定义系统的外部功能和内部软硬件结构,然后对系统进行总体结构设计和 系统的各个模块分割,分别实现硬件的规划与设计,应用软件的规划与设计以及操作系统 的剪裁。在完成操作系统的剪裁和应用软件的开发后,通常还需要将它们移植到同系统结 构的硬件平台上进行系统调试、功能模拟,明确系统调试无误后,才将操作系统及相关软 件移

33、植到自己的专用硬件平台上,再进行系统整体功能测试,其流程如图 2-5 所示。 图 2-5 整体开发流程图 10 3.嵌入式图像采集与传输程序的设计 3.1 关键技术 3.1.1 bootloader bootloade 是系统加电后运行的第一段代码。一般只是在启动时运行很短时间,然而 对一个嵌入式系统来说,这一部分却是整个系统的一个无比重要的组成部分,不可缺少。 在一般嵌入式系统中,系统复位或者加电后通常从地址 ox0000000o 处开始执行,而这个地 址一般正是存放的 bootloader 启动代码。通过这段程序,可以初始化硬件设备、建立内存 空间的映射图,从而将系统的软硬件环境带到一个合

34、适的状态,以便为最终加载操作系统 内核准备好正确的环境。 3.1.2 eboot eboot 是通过以太网下载 wince 映像时的起作用的代码。它通过 usb 下载工具被下载 到 sdram 和 platformbuilder 配合完成对 nandflash 的 wince 映像的烧写工作。它是 由 ms 提供好的代码,不需要进行任何修改。 3.1.3 摄像头 sdk 接口函数 本系统所用摄像头的驱动程序已由开发商编写好的了,并将其封装成动态链接库形式, 即 zc030x.dll 文件。我们只需调用其提供的接口函数就可以实现其相应的功能。 zc030x sdk 接口函数说明如下表: 表 3-

35、1 zc030x sdk 接口函数说明 函数名称函数说明形式参数参数说明返回值 capinitcamera 初始化并 返回当前 活动的摄 象头数目 void 无 当前活动的摄 象头数目,最多 可支持 8 个摄 象头 int index 摄象头索引 capgetcurrentversion 获得当前 驱动程序 版本信息 unsigned char 用来接收版本信 息的字符缓冲区 当前驱动程序 版本信息字符 串长度 11 *pbufout int lenout 字符缓冲区长度 int index 摄象头索引 int *pformat 用来接收视频格 式的缓冲区 capgetvideoformat

36、获取当前 视频格式 和尺寸模 式 int *psizemode 用来接收尺寸模 式的缓冲区 0 表示调用成 功,其他值表示 调用失败 int index 摄象头索引 int format 要设置的视频格 式 (video_palette_ rgb565 - video_palette _jpeg) capsetvideoformat 设置当前 视频格式 和尺寸模 式 int sizemode 要设置的尺寸模 式 (video_size_vga , video_size_sif) 0 表示调用成 功,其他值表示 调用失败 int index 摄象头索引 unsigned char *pframe

37、buf 用来接收一帧视 频图象的缓冲区 unsigned int bufferlen pframebuf 缓冲 区长度 capgetpicture 同时获取 一帧视频 图象和 jpeg 图片 unsigned char *pjpgbuf 用来接收一帧 jpeg 图片的缓冲 区 0 表示调用成 功,其他值表示 调用失败 12 unsigned int jpglen pjpgbuf 缓冲区 长度 pdword pdwactualou t 用来接收返回长 度的整型数组地 址 int index 摄象头索引 unsigned char *pframebuf 用来接收一帧视 频图象的缓冲区 capgra

38、bframe 获取一帧 视频图象 unsigned int bufferlen 缓冲区长度 一帧视频图象 的实际长度(字 节数) int index 摄象头索引 unsigned char *pframebuf 用来接收一帧 jpeg 静态图片的 缓冲区 capgetlastjpeg 获取一帧 jpeg 静态 图片 unsigned int bufferlen 缓冲区长度 一帧 jpeg 静态 图片的实际长 度(字节数) capstartcamera 启动摄象 头开始捕 获视频 int index 摄象头索引0 表示调用成 功,其他值表示 调用失败 capstopcamera 停止摄象 头捕获

39、视 频 int index 摄象头索引0 表示调用成 功,其他值表示 调用失败 capclosecamera 关闭所有 活动的摄 象头 void 无无 13 3.1.4 mfc 微软基础类库 它是本文应用程序的框架基础,很多软件形式都是基于 mfc 的,当然它也带来很多 windows 编程的便利。什么是 mfc? mfc 是 application framework 类库,更确切的定义是:微软公司将数以千计的 windowsapi,利用面向对象的原理和 c+语言,有逻辑的组织起来。这种有逻辑的组织使 得 mfc 是一组凝聚性强、组织性强的类库。如果要利用 mfc 开发你的应用程序,必须同时

40、 引进数个必要的类,互相搭配支持。而这些类所实例后的对象关系在 mfc 设计时,便己经 存在,信息的流动机制也都已经设定。application framework 对软件设计带来的革命性 的好处是:程序的模型已经存在,而且是标准、简洁、高效的。程序员只要依照各自的需求, 在 application framework 的派生类中改写虚函数,或者添加新的成员函数,以满足各自 的应用需要。这将大大缩短程序设计的时间,使得程序员可以将更多的精力花在程序特定 的功能实现上,而不是关注繁琐的、重复的 windows 程序框架的搭建而且使得程序设计的 方法标准化,程序的可读性大大增强。 mfc 将具有相

41、当固定程度的 winmain 内部操作包含在 cwinapp 中,将有着相当固定行 为的 wndproc 内部操作包装在 cframewind 或 cdialog 中。换句话说:cwinapp 代表程序的 主体。cframewnd 或 cdialog 代表程序的主窗口。虽然,winmain 内部操作和 wndproc 内部 操作有着相当程度的固定行为,但是它们毕竟需要针对不同的应用程序而有某种变化。所 以,你必须以这两个类为基础,派生出自己的类 cmywinapp 和 cmyframewnd,并改写其中 部分成员函数(虚函数)或添加成员函数。mfc 的程序员需要做的只是根据自己的应用需要, 在

42、 mfc 合适的类下派生出子类,修改虚函数、添加新成员函数和添加消息响应函数。 3.1.5 tcp 协议 tcp 位于 osi 七层模型中的第四层传输层,是一种面向连接的、可靠的、基于字 节流的通信协议。一个 tcp 连接有发送方的 ip 地址与 tcp 端口号和接收方的 ip 地址与 tcp 端口号标识。建立一个 tcp 连接的作用就是让发送方和接收方都做好准备,准备好之 后就开始数据传输。总的来说,tcp 具有以下特点: 14 表 3-2 tcp 特点 主要特性含义 (1)面向流的投递 服务 应用程序之间传输的数据可视为无结构的字节流,流投递服务保 证收发的字节顺序完全一致。 (2)面向连

43、接的投 递服务 数据传输之前,tcp 模块之间需建立连接,其后的 tcp 报文在此连 接基础上传输。 (3)可靠传输服务 接收方根据收到的报文中的校验和,判断传输的正确性:如果正 确,进行应答,否则丢弃报文。发送方如果在规定的时间内未能 获得应答报文,自动进行重传。 (4)缓冲传输 tcp 模块提供强制性传输(立即传输)和缓冲传输两种手段。缓冲 传输允许将应用程序的数据流积累到一定的体积,形成报文,再 进行传输。 (5)全双工传输tcp 模块之间可以同时收发数据流。 (6)流量控制 tcp 模块提供滑动窗口机制,支持收发 tcp 模块之间的端到端流量 控制。 由于 udp 协议是无连接的,不可

44、靠的传输,但也正是因为其是无连接的,而且不提供 像 tcp 那样的可靠机制,流控制以及错误恢复功能,所以比 tcp 负载消耗少,传输速度快, 但也考虑到本系统的数据传输必需做到准确无误,所以本系统决定使用 tcp 协议。 3.1.6 windows socket winsock 并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议, 但是它可以访问很多种网络协议,你可以把他当作一些协议的封装。现在的 winsock 已经 基本上实现了与协议无关。你可以使用 winsock 来调用多种协议的功能。那么,winsock 和 tcp/ip 协议到底是什么关系呢?实际上,winsock 就

45、是 tcp/ip 协议的一种封装,你可 以通过调用 winsock 的接口函数来调用 tcp/ip 的各种功能.例如我想用 tcp/ip 协议发送数 据,我就可以使用 winsock 的接口函数 send()来调用 tcp/ip 的发送数据功能,至于具体 怎么发送数据,winsock 已经帮你封装好了这种功能。 15 internet 套接字有两种类型:一种是“stream sockets”(流格式),另外一种是 “datagram sockets”(数据报格式)。数据报套接字有时也叫“无连接套接字” 。流式套接 字是可靠的双向通讯的数据流,自身提供一种错误控制机制。本系统正是采用流式套接字

46、进行设计,图 3-1 为面向 tcp 的网络通信流程。 图 3-1 面向 tcp 的网络通信流程 进行 socket 编程时,首先要调用 socket 函数来进行初始化并创建一个套接字,函数 原型为 int socket(int domain, int type, int protocol):其中 domain 应该设置成 “af_inet” ,参数 type 是选择用哪一种套接字,是 sock_stream 类型还是 sock_dgram 类 型,本系统中使用的是流式套接字,所以选择 sock_stream。最后,把 protocol 设置为 “0” 。socket()调用成功将返回一个在后

47、面的系统调用中用到的 socket 描述符,失败返回 -1。 当套接字成功创建之后,要将套接字和机器上的一定的端口关联起来。函数原型为 int bind(int sockfd, struct sockaddr*my_addr, int addrlen);其中第一个参数为前 面调用 socket 函数所返回的套接字描述符,第二个参数为 sockaddr 类型的指针保存了地 址和端口的信息,第三个参数一般为 sizeof(struct sockaddr)。调用成功后将可以在该 端口监听服务请求。sockaddr_in 结构如下: 16 struct sockaddr_in short sin_fa

48、mily ; u_short sin_prot ; struct in_addr sin_addr ; char sin_sero8 ; 其中,sin_family 一般为 af_inet,代表 internet(tcp/ip)地址族;sin_port 代表连 接的端口号,sin_addr 代表 ip 地址。 在调用 bind()的时候不可以使用小于 1024 的端口号,因为所有小于 1024 的端口号 都被系统保留,可以选择从 1024 到 65535 中没有被其它应用程序占用的端口号即可。要使 socket 处于被动的监听模式,可以使用 listen 函数,并为该 socket 建立一个输

49、入数据队 列,将到达的服务请求保存在此队列中,直到用户应用程序处理它们。函数调用的原型为: int listen(int sockfd, int backlog);backlog 指定在请求队列中允许的最大请求数, 进入的连接请求将在队列中等待 accept()它们。backlog 对队列中等待服务的请求的数目 进行了限制,大多数系统缺省值为 20,在本系统中设置为 8。如果一个服务请求到来时, 输入队列已满,该 socket 将拒绝连接请求,客户将收到一个出错信息。当出现错误时 listen 函数返回-1。服务器接收客户的连接请求使用 accept()函数。在建立好输入队列后, 服务器就调用

50、 accept 函数,然后睡眠并等待客户的连接请求。函数原型为:int accept(int sockfd,void *addr,int *addrlen);addr 通常是一个指向 sockaddr_in 变 量的指针,该变量用来存放提出连接请求服务的主机的信息,整型指针变量 addrten 一般 为 sizeof(struct sockaddr_in)的,出现错误时 accept 函数返回-l。当 accept 函数监视 的 socket 收到连接请求时,socket 执行体将建立一个新的 socket,执行体将这个新 socket 和请求连接进程的地址联系起来,收到服务请求的初始 soc

51、ket 仍可以继续在以前 的 socket 上监听,同时可以在新的 socket 描述符上进行数据传输操作。 函数 send()和 recv()用于流式套接字或者数据报套接字的通讯。函数 send()的原型 为 int send(int sockfd, const void *msg, int len,int flags s)。sockfd 是准 备发送数据的套接字描述符。msg 是指发送的数据的指针。len 是数据的长度。把 flags 设 置为 0 就可以了。函数 recv()和 send()用法差不多, int recv(int sockfd,void*buf, int len,unsi

52、gned int flags);buf 是要读的信息的缓冲,len 是缓 冲的最大长度,flags 可以设置为 0。成功调用后 recv()将返回实际读入缓冲的数据的字 节数,错误的时候返回-1。 通信完成之后将要关闭套接字,以防止套接字上更多的数据的读写。任何在另一端读 写套接字的企图都将返回错误信息。close(sockfd)函数可以实现。 17 3.2 方案总体设计 图 3-2 总体设计图 如图 3-2 所示,本设计主要由三大部分组成,usb 摄像头通过 usb 接口与 amr 开发 板(上位机)相连,pc 机(下位机)通过网络接口(网卡)和以太网线与 arm 开发板相连。 摄像头负责对

53、图像数据的采集,然后将数据传送到运行在 wince 上的服务端程序,服务端 程序负责将采集到的图像数据进行处理,然后再将其传送到运行在 pc 机上客户端程序并显 示出来。 3.3 wince 驱动架构 在 wince 下的驱动开发,需要面向的是上下两个界面:wince 的驱动结构和具体硬件的 datasheet。所以首先我们必须深入了解一下 wince 整个系统驱动架构。在 wince 下驱动模 型分为本机驱动模型和流接口驱动模型。本机驱动程序用于低级、内置设备,提供一组微 软定制的接口,可以通过移植和定制微软提供的驱动样例来实现。 本地驱动分为单片驱动程序和分层驱动程序。单片驱动程序直接将硬

54、件功能传递给操 作系统,这类驱动程序在发展的过程中已越来越少见;分层驱动程序:是微软提供的一种本 机驱动程序的设计模型。分层设计是作为一个平台提供商微软常用手段,来逐步透明差异 和提供接口规范。分层驱动程序的优点:便于移植;把很多琐碎的工作和通用的过程放在 mdd 中,pdd 中实现与特定硬件设备相关联的功能;一个 mdd 可以和多个 pdd 相连,mdd 可 以管理多个同类的设备。通过分层的思想,我们可以知道,如果 wince 系统头提供对摄像 头的 mdd 库,那么我们就只需要针对特定的摄像头类型进行 pdd 层的改写就可以实现摄像 头的驱动了。但是很遗憾,在 wince6.0 以前的版本

55、中,都没有提供对摄像头的 mdd 库。这 时我们就需要用到另一种流接口驱动模型来实现了。 18 流接口驱动程序是一种更为通用的基本设备驱动类型,它需要实现一组固定的流接口 函数,所有的 wince 下的设备驱动都可以采用这个模型来实现,流接口函数既可以是不分 层的架构,也可以使用分层的架构,如图 3-3 所示。同时,流接口驱动既可以管理内建 (builtin)设备,也可以管理可安装(installable)设备,既可以在设备启动的时候加 载,也可以在需要时动态加载。本设计我们使用分层的流接口驱动模型。 图 3-3 流接口驱动的架构 流接口驱动程序是基于动态链接库的。其作用是将程序执行需要用到的

56、代码函数关联 起来。因此,我们大可以将 mdd 库与 pdd 库链接起来,形成一个动态链接库文件。而这个 dll 文件就是我们所需的摄像头驱动了。我们只需在注册表中进行相关键值的设置,就能 使系统在启动的时候加载指定的摄像头的驱动,从而达到系统能够识别 usb 摄像头的目的 了。其模型如图 3-4 所示,至于本设计所用到的中星微 zc030x 系列摄像头的 mdd 库与 pdd 库的编写,是需要根据具体硬件的 datasheet 来进行设计与开发的,是一个很复杂并长时 间的过程。所以在这里就不对其进行更深入的论述了。本设计用到的摄像头驱动是由中星 微开发商提供,能够直接从网上下载得到。 19

57、图 3-4 摄像头驱动程序的交互 3.4 图像采集模块设计 图像数据是通过摄像头来采集的,那服务端如何来调用摄像头成为了问题的关键。硬 件与软件之间的联系,必须通过驱程来实现。上文提到,摄像头的驱动已经封装成动态链 接库 dll 文件了,而且还提供了所有的功能接口函数。所以,我们只要直接调用其接口函 数就能够实现相应的功能。 3.4.1 打开摄像头设备 打开摄像头设备,只需要直接调用 capstartcamera(index)函数就能够实现了这个。 因为这个函数的功能已经被封装好了,至于其具体的实现过程我们在这里就不进行深究了。 我们只要利用其返回的值来判断是否调用成功,然后分别作相应的处理就

58、可以了。其代码 如下: if (capstartcamera(index) != 0) /判断摄像头是否打开成功 goto finish; 3.4.2 始化摄像头设备 在上文 3.13 节介绍的 zc030x sdk 接口函数说明表格中可以得知,要初始化摄像头, 我们可以直接调用其提供的 capinitcamera()接口函数。该函数能够初始化摄像头并返回 当前活动的摄像头数目。我们只要设置一个变量来接收这个函数返回的值,然后根据该变 量的值来判断摄像头是否初始化成功。代码如下: 20 int i = capinitcamera(); if (i 0) for (int j = 0; j se

59、twindowtextw(s2ws(int2str(dwrtnsize1).c_str(); char *buf=(char *)lpjpgbuffer; string message=jpegdata+int2str(dwrtnsize1)+; ptcp-senddata(tmp,message.c_str() , message.length(); sleep(1500); ptcp-senddata(tmp,buf , dwrtnsize1); sleep(1500); 3.4.5 关闭视频设备 在采集完成后,需要关闭设备,并收回系统资源。特别是在嵌入式系统开发中由于系 统资源没有 pc

60、 丰富,不注意系统资源回收,往往会出现十分严重的错误,而导致系统崩溃。 这就关系到本系统中的两个功能,一个是“停止摄像”功能,另一个是“退出程序”功能。 对于“停止摄像”功能,我们只需要让当前负责进行图像采集的线程结束,并回收其使用 的资源。而“退出程序”功能则需要将当前的进程结束,并回收所有的系统资源。其代码 分别如下: (1) “停止摄像”代码: dword dwrtn = 0; dwrtn = waitforsingleobject(m_hstopevent, 500); if (dwrtn = wait_timeout) 22 terminatethread(m_hthread, 0)

温馨提示

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

评论

0/150

提交评论