博文

WinCE下的串口驱动分析(2009-03-10 14:21:00)

摘要:串口驱动分析 Auth:nasiry date: 2005年4月12日
abort: windowsCE.net 420串口驱动分析 相关资料     虽然串口通讯已经是普遍的标准而且广为大家熟知,但驱动中涉及的部分内容也可能在平时的应用中并不是很常用到,在这里做一个简单的介绍待后面说明到具体代码的时候可以连贯一些。 串行通讯接口是目前十分流行的通讯接口之一。由于其电气界面的简单性使其在计算机领域的应用相当的广泛。在这里提到的串行通讯接口主要是指UART(通用串行)和IRDA两种。通常的串行连接电气连接上有3wire和9wire两种。3wire的接线方式下定义了发送、接收和地三根连接。其用途就如名称一样分别用于发送、接收。下面是通常3wire连接的结构框图

通常在串行接口控制器上会有两个FIFO用作接收和发送的缓冲,当接收到数据后会直接将接收到的数据置入该缓冲器,并同时由控制电路向本地总线发出通知,以便让本地总线将缓冲器内的数据读走,这样在响应(等待和读取)的过程中仍然能通过缓冲器来接收数据。而发送发送的过程刚刚相反,本地总线可一直向发送缓冲写入数据直到器填满为止,而无需对每个数据的发送进行等待。这就是基本的收发流程(这部分逻辑流程相信大家是最熟悉的)。这一点在3wire和9wire中都是相同的。但是我们考虑下面的情况,如果接收一方的响应由于某种原因的干扰(如处理器被其他中断服务占用)的时候可能就来不及相应之前ReceiveFIFO就可能被填满了,这样后续发送过来的数据就会丢失,这样在需要数据可靠传输的情况下串行通讯的弊端也就显示出来了。如需要数据的可靠传输就需要对数据流的收发进行控制。在9wire中将串行连接定义为如下形式。 针号 1 2 3 4 5 6 7 8 9 缩写 DCD RXD TXD DTR GND DSR RTS CTS DELL 功能说明 数据载波检测 接收数据 发送数据 数据终端就绪 信号地 数据设备就绪 请求发送 ......

阅读全文(2765) | 评论:0

Linux操作系统网络驱动程序编写(2009-03-10 14:13:00)

摘要:作需要写了我们公司一块网卡的Linux驱动程序。经历一个从无到有的过程,深感技术交流的重要。Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱。真希望她能在中国迅速成长。把程序文档贴出来,希望和大家探讨Linux技术和应用,促进Linux在中国的普及。
  Linux操作系统网络驱动程序编写一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类1.2 编写驱动程序的一些基本概念二.Linux系统网络设备驱动程序2.1 网络驱动程序的结构2.2 网络驱动程序的基本方法2.3 网络驱动程序中用到的数据结构2.4 常用的系统支持三.编写Linux网络驱动程序中可能遇到的问题3.1 中断共享3.2 硬件发送忙时的处理3.3 流量控制(flow control)3.4 调试四.进一步的阅读五.杂项一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
  Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。一个文件系统要安装进入操作系统必须在块设备上。
  网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。
  1.2 编写驱动程序的一些基本概念无论是什么操作系统的驱动程序,都有一些通用的概念。操作系统提供给驱动程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本要求。
  1.2.1 发送和接收......

阅读全文(3157) | 评论:0

基于32位嵌入式系统的实时图像采集模块(2009-03-10 14:10:00)

摘要:1 32位嵌入式系统及其应用现状 1.1 32位嵌入式系统概述 嵌入式系统是后PC时代的主导,当低端的嵌入式系统无法满足信息化、智能化、网络化时代的更高要求时,32位嵌入式系统应运而生。32位嵌入式系统是电脑硬件与软件的有机结合。嵌入式设计的目的在于满足某种特殊的功能。嵌入式系统的大体构架可分为五部分:处理器、内存、输入与输出、操作系统与应用软件。32位嵌入式系统可分为硬件和软件两个平台。硬件平台的设计包括处理器电路、网络功能、无线通信及使用接口等的设计。嵌入式软件为信息、通信网络或消费性电子产品等系统中的必备软件,为硬件产品的驱动程序、控制处理和基本接口功能服务,以提高硬件产品的价值。嵌入式软件为该硬件产品不可缺少的重要组成部分。

1.2 32位嵌入式系统的应用现状目前大多数视频图像采集采用摄像头传感器,再通过视霸卡或实时图像采集(压缩)卡对视频图像进行采集(或压缩)后送入计算机进行处理。由于摄像机的输出已转换成模拟NTSC或PAL制式并以Svideo或混合视频信号方式输出,且摄像头传感器的象素点在输出时序上很难与采集卡的采样点一一对应,因此视频图像数字化后图像质量损失较大,图像分辨率上限受限式限制。另外,这种方法存在系统成本高、结构复杂等局限性,不便于推广和普及应用。为此,最新出现了采用先进摄像技术的图像采集卡,极大地改善了图像质量损失较大、成本高、不便于推广等缺点。这类先进摄像技术(如CMOS摄像技术)的采集卡的突出优点是占用计算机资源少,数据传输速率较高,通用性好。例如采用USB接口的摄像头在一定程度上满足了实时性要求,突出了采样速率高、图像质量高、通用性好的特点。但采用这种技术的图像采集卡必须具有压缩处理,且图像大小受限制,成本随之提高。为此,本文以OmmVision公司的OV6630芯片为例,提高一种新的基于32位嵌入式系统ISA总线接口的实时图像采集技术,旨在充分利用其快速、图像质量高、成本低和通用性好的优点。其中,VSYNV为场同步输出脉冲,HREF为行同步输出信号,PCLK是用来锁存有效数据的时钟(当系统时钟为17.73MHz时,PCLK为8.86MHz),即象素时钟,Y[7:0]是8位亮度数据总线,UV[7:0]为8位色度数据总线。本设计是基于32位嵌入式系统的实时图像采集,其突出的优点是:图像质量无损、实时性强、接口电路简单、......

阅读全文(2692) | 评论:0

WinCE系统下BootLoader的开发(2009-03-10 14:03:00)

摘要:引言 Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻松的满足。最新的.NET版本较之3.0版本,在实时性和稳定性上有大幅度提高,开始广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产品所采用。 但是,CE并不是一个通用的安装版操作系统,在形形色色的嵌入式硬件设备世界里, 一款CE系统通常只会针对某一种硬件平台生成。所以,作为原始设备生产商,必须根据自己的硬件平台和应用场合定制CE,最主要的工作就是编写适合于自己的板级支持包(BSP)。在BSP中,包含了一个重要的组成部分——BootLoader。创建一未功能完善的BootLoader,是开发WinCE系统的第一步,也是极为关键的一步。本文将结合开发实例,介绍如何开发适合于自己硬件的BootLoader。 1 定制CE操作系统的基本知识 定制CE操作系统是采用微软的工具软件:Platform Builder(PB)。该工具能够根据用户的需求,选择构建具有不同内核功能的CE系统。同时,它也是一个集成的编译环境,可以为所有CE支持的CPU目标代码编译C/C 程序。前面所说的BSP和BootLoader程序就是在该环境下编译,并整合到CE系统中去的。一旦成功地编译了一个CE系统,就会得到一个名为nk.bin的映像文件。只要将该文件下载到目标平台(device端),就能够运行CE了。 2 BootLoader BootLoader是一段单独的程序代码,它存放于目标平台的非易失存储介质中,如ROM或Flash。在开发CE的过程中,它主要用于启动硬件和下载nk.bin到目标板上,并有一定的监控作用。 图1描述了WinCE的BSP基本结构以及BootLoader所处的位置。 一般来说,对于BootLoader的功能要求并不是严格定义的,不同的场合区别很大。比如,在PC的硬件平台上,由于硬件启动根本就不是通过BootLoader(而是通过BIOS),所以BootLoader就不需要对CPU加电后的初始化做任何工作;而在笔者的开发平台(MIPS32)上,BootLoader是最先被执行的程序,所以就必......

阅读全文(3314) | 评论:1

Windows CE下串行通信的实现(2009-03-10 13:59:00)

摘要:1 Windows CE简介 Windows CE是一种小型的、基于ROM的、具有Win32子集API的操作系统。它的优势在于小尺寸、Win32 API子集和对多平台的支持能力。在Windows CE下编程需要注意的是,Windows CE设备的资源很少,存储器、显示器都很小,接口也比较少,而且根据实际情况变化很大。另外,Windows CE只支持Unicode,这在编程中要格外注意。在Windows CE中,除了一些基本的Windows通用控件以外,还有一些专门设计的控件,比如CommandBar。Windows CE体积虽小,但是它的功能并不少,内存管理、文件操作、多线程、网络功能等等它都支持,可以说是麻雀虽小,五脏俱全。 2 Windows CE下的串行通信 串行端口在Windows CE下属于流接口设备,它是串行设备接口的常规I/O驱动程序调用和与通信相关的具体函数的结合。串行设备被视为用于打开、关闭、读写串行端口的常规、可安装的流设备。Windows CE的通信函数和其它大多数Windows的通信函数相同。特别要注意的是,Windows CE不支持直接对串行端口的寄存器进行编程。常用的串行端口函数介绍如下: (1)打开和关闭串行端口 CreateFile函数用于打开串行口。 hPort=CreateFile(TEXT(“COM1:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)。注意COM1后要有一个冒号。最后一个参数dwFlagsAndAttributes必须为0,因为Windows CE只支持非重叠I/O。第3个参数dwShareMode也必须为0,通信端口不能像文件一样被共享。这个函数的返回值是已打开的串行端口的句柄或者是INVALID_HANDLE_VALUE。 关闭串行口可以调用CloseHandle(hPort)。 (2)配置串行端口 配置串行口主要是用DCB结构配置端口设置,包括波特率、停止位、数据位长度、校验位、流量控制等等,还有配置超时值。 首先打开串行端口,用GetCommState函数获得当前打开串口配置,然后根据需要修改DCB成员,最后用SetCommState函数设置新的串口配置。 DCB PortDCB; /创建DCB变量 Port.DC......

阅读全文(2174) | 评论:0

一种嵌入式系统的内存分配方案(2009-03-03 17:03:00)

摘要:摘要:实时性、可靠性的要求,使得许多嵌入式应用使用自己的内存管理程序。本文探讨嵌入式系统中对内存管理的要求、存在的问题以及可能的解决策略;介绍一种“一次分配,多次使用”的动态内存分配方法,并给出2个例子。 关键词:嵌入式系统 内存管理 一次分配多次使用 1 嵌入式系统中对内存分配的要求 ①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。也就是内存分配的请求必须得到满足,如果分配失败可能会带来灾难性的后果。嵌入式系统应用的环境千变万化,其中有一些是对可靠性要求极高的。比如,汽车的自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能相应的操作,就会发生车毁人亡的事故,这是不能容忍的。 ③高效性。内存分配要尽可能地少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得无限大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统有限的空间和有限的板面积决定了可配置的内存容量是很限的。 2 静态分配与动态分配 究竟应用使用静态分配还是动态分配,一直是嵌入式系统设计中一个争论不休的总是。当然,最合适的答案是对于不同的系统采用不同的方案。如果是系统对于实时性和可靠性的要求极高(硬实时系统),不能容忍一点延时或者一次分配失败,当然需要采用静态分配方案,也就是在程序编译时所需要的内存都已经分配好了。例如,火星探测器上面的嵌入式系统就必须采用静态分配的方案。另外,WindRiver公司的一款专门用于汽车电子和工业自动化领域的实时操作系统OSEKWorks中就不支持内存的动态分配。在这样的应用场合,成本不支持内存的动态分配。在这样的应用场合,成本不是优先考虑的对象,实时性和可靠性才是必须保证的。当然,采用静态分配一个不可避免的总是就是系统失去了灵活性,必须在设计阶段就预先知道所需要的内存并对之作出分配;必须在设计阶段就预先考虑到所有可能的情况,因为一旦出现没有考虑到的情况,系统就无法处理。这样的分配方案必须导致很大的浪费,因为内......

阅读全文(2273) | 评论:0

三种嵌入式操作系统的分析与比较(2009-03-03 16:58:00)

摘要:摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 关键词:嵌入式系统 嵌入式操作系统 Palm OS Windows CE Linux 1 嵌入式系统与嵌入式操作系统 1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力 ;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 1.2 嵌入式操作系统 嵌入式操作系统EOS(Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度作,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而方的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下特点: ①可装卸性。开放性、可伸缩性的体系结构。 ②强实时性。EOS实时性一般较强,可用于各种设备控制当中。 ③统一的接口。提供各种设备驱动接口。 ④操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。 ⑤提供强大的网络功能,支持TCP/IP协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。 ⑥强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预......

阅读全文(2393) | 评论:0

Windows CE开发初步(2009-03-03 16:55:00)

摘要:[转帖]Windows CE开发初步
许多开发人员都尝试了基于无线装置的软件编程,然而这些思想达于成功的关键之处在于他们能否深入了解Windows CE的功能和缺点。本文就此介绍了Windows CE的一些基本特性,并指出过渡到基于无线装置的软件开发所应具备的知识。 开始 Windows CE操作系统支持很多特性,并能被很多一系列不同的CPU编译。她支持多线程,包含多种可选择的GUI。诸如她的堂兄弟一样,Windows CE也具有台式计算机操作系统的特性,所以开发人员无需花太多的时间就可以很容易地进行基于Windows CE的软件开发。 在这一小节中,我们关注的是如何在基于Windows CE的Pocket PC和Pocket PC2002平台的开发。这两个平台都是通过Windows CE3.0实现的。微软也发布了一套新式的Windows CE版本,即Windows CE.NET,也就是常说的Windows CE4.0。 Pocket PC2002对象平台需要下载一套新SDK,但她集成在eMbedded Tools 3.0软件中,当编写代码时和使用Pocket PC很类似,但是她还有以下几方面的改进。 1.通讯改进 新的连接管理器
支持对象交换(OBEX) 电话API 2.可用性改进 新的消息响应系统 当前屏幕外壳 敏锐的最小化特色 3.网络浏览器的新特性 4.新的HTML控件基于Windows CE的Pocket PC平台的开发
为了在Windows CE3.0系统中进行开发,你必需下载微软的eMbedded Tools 3.0软件,这一套软件包含了eMbedded Visual C 3.0和 eMbedded Visual Basic 3.0,同时她也提供了基于Pocket PC、掌上PC、变携式PC的所有SDK。Visual C 和Visual Basic都是独立的,如果你想进行特定对象平台的开发,就要下载Pocket PC2002的额外SDK。 所有的SDK都附带仿真器,你可以利用这一仿真器在台式PC机中进行模拟试验。无需一个对象Pocket PC系统,你就可以在Pocket PC或Pocket PC2002上进行开发。你所需要的是eMbedded Visua......

阅读全文(3296) | 评论:0

VMware下Linux的安装及简单设置(2009-03-03 16:51:00)

摘要:当你听别人说起Linux、FreeBSD甚至OS2等等新奇的操作系统时,是不是也想尝试看看?但是当听到需要重新切割硬盘,原有数据还有可能丢失时,是否又有些犹豫?当初我也是在Linux的门外彷徨很久,直到我找到了VMware。因为它既保证了Linux能正确安装且正常运行,又不破坏原来的操作系统,为我们除去了费心研究如何把硬盘分区分得合理和高效的苦恼。下面,我给大家介绍一下怎样用这款软件来安装Linux。 一、VMware的安装及配置 简单地说,VMware就是一款虚拟机软件,它可以在你现有的操作系统上虚拟出一个新的子机。这个子机一方面建立在你正在运行的操作系统之上,同时,它又拥有自己独立的CPU、硬盘、内存及各种硬件。当然,这些都是虚拟出来的。值得一提的是虚拟的硬盘其实就是母机上的一个文件,你可以随意地对其进行分区、格式化、安装操作系统等操作而不会对原有的系统产生任何影响。虚拟子机所使用的内存大小、硬盘容量大小等都可以根据你的需要进行调整。 1.VMware的下载及安装 你可以从许多软件下载网站得到VMware的安装程序。在此,我推荐以下两个网址: (1)VMware的大本营www.VMware.com (2)中国虚拟机论坛www.VWware.cn 注意: 安装程序有for Windows和for Linux之分,请下载正确的版本。我的主机是Windows2000 Server,下载的安装程序是VMware-work-Station一4.5.2—8848.exe。 VMware的安装很简单,需要提醒大家的是:安装VMware之后,必须先到VMware的网站填写资料以取得30天的试用注册码。30天后如果你不想购买正式版的注册码,那就只好再去登录VMware的网站索取下一个月的序列号。 启动VMware后,其主界面如图1。 2.VMware的配置 VMware安装完毕后,利用它可以建立多个虚拟机,每新建一个虚拟机,就会要求你建立一个配置文件。这个配置文件实际上相当于新电脑的“硬件配置”,你可以在配置文件中决定虚拟机的硬盘如何配置,内存多大.准备运行哪种操作系统,是否有网络等。配置Linux虚拟机的步骤如下。 (1)选择File菜单下的“New Virtual Machine”出现新虚拟机向导后单击“下一步”,选择“Typical”典型安装。 ......

阅读全文(3042) | 评论:0

LINUX根文件系统的目录树(2009-03-03 16:47:00)

摘要:目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上。主要部分是根、/usr 、/var 和 /home 文件系统。每个部分有不同的目的。

每台机器都有根文件系统,它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏系统、恢复备份等的工具。

/usr 文件系统包含所有命令、库、man页和其他一般操作中所需的不改变的文件。 /usr 不应该有一般使用中要修改的文件。这样允许此文件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr 很容易是数百兆),且易于管理(当升级应用时,只有主/usr 需要改变,而无须改变每台机器) 即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损坏。

/var 文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的), log文件、formatted manual pages和暂存文件。传统上/var 的所有东西曾在 /usr 下的某个地方,但这样/usr 就不可能只读安装了。

/home 文件系统包含用户家目录,即系统上的所有实际数据。一个大的/home 可能要分为若干文件系统,需要在/home 下加一级名字,如/home/students 、/home/staff 等。

虽然上面将不同的部分称为文件系统,但它们不必是真的分离的文件系统。如果系统是小的单用户系统,而用户希望简单化,可以很容易地放在一个文件系统中。根据磁盘容量和不同目的所需分配的空间,目录树也可以分到不同的文件系统中。重要的是使用标准的名字,即使/var 和/usr 在同一分区上,名字/usr/lib/libc.a 和/var/adm/messages 必须能工作,例如将/var 下的文件移动到/usr/var ,并将/var 作为/usr/var 的符号连接。

Unix文件结构根据目的来分组文件,即所有的命令在一个地方,所有的数据在另一个地方,所有的文档又在一个地方,等等。另一个方法是根据属于的程序分组文件,即所有Emacs文件在一个目录中,所有TeX文件在另一个中,等等。后一种方法的问题是文件难于共享(程序目录经常同时包含静态可共享的......

阅读全文(2652) | 评论:0