文档库 最新最全的文档下载
当前位置:文档库 › 基于ARM9的WinCE快速入门

基于ARM9的WinCE快速入门

基于ARM9的WinCE快速入门
基于ARM9的WinCE快速入门

基于ARM9的WinCE快速入门

作者:jbb0523(彬彬有礼)

一、前言

1、首先谈谈本人基础。我熟悉A VR单片机,使用过ATmega16单片机大部分功能,如4X4键盘、UART、SPI、I2C、Timer、PWM等等,接触过DSP芯片TMS320C54X,懂得VHDL语言,简单使用过LPC2131,并在其上移植过uC/OS-II,学习过有关操作系统的基本知识。用过的相关软件有:ICCA VR、ADS1.

2、CCS、uVision等。

2、学习不要着急,如果你没有操作系统的基础,可能一时接受不了操作系统这个概念,而是拿着自已天天用的PC机的Windows操作系统的界面钻牛角尖。不要总感觉这资料是垃圾,那本书是骗钱的,之所以你看不懂那是因为你还没达到看懂的程度!当然现在骗钱的书很多,著书者很少从读者的角度去写书!

3、我所使用的开发环境:PC XP+GEC2440+WinCE5.0+VS2008+ActiveSync4.5+DNW;GEC2440是广嵌科技的开发板,板子做的还可以,只是售后技术支持一般。

二、入门准备

1、什么是操作系统?

这是困扰了我很久的一个问题。由于我们大家对于Windows XP等PC机操作系统过于熟悉,而此操作系统又过于傻瓜式,以致于使我们感觉不到操作系统的本质,仅感觉操作系统就是一个窗口,反正在我接触嵌入式操作系统前是这样认为的。那么什么是操作系统呢?从我使用uC/OS-II的体验来说,简单点儿说操作系统就是一个调度器,从我现在使用WinCE 的体验来说,操作系统就是管家婆。总的来说吧,操作系统就是用算法实现的管理系统所有资源一个后台。可能这样说还是有些抽象,别急,慢慢来!

2、操作系统安装在哪儿呢?界面呢?

这个问题绝对是Windows操作系统使用后遗症,总感觉我们要像装PC机系统一样进行安装,要有像XP等OS一样的操作界面。其实界面仅仅是人机交互的一种方式而已,不是操作系统必备的元素,而是操作系统的一种趋势,因为现在对友好的人机交互界面要求越来越高,而且是傻瓜程度过高越好!

以uC/OS-II为例,它的核代码就是几个C源文件,使用它时就像其它普通程序一样加入你所建立的工程即可,当然在uC/OS-II与你所写的普通代码之间要有一个桥梁来进行链接,这个桥梁就是我们在移植操作系统时所要写的文件,它根本没有界面一说,为什么说它是操作系统呢?因为uC/OS-II有操作系统的一切特征!操作系统都有什么特征呢?自已网上查一吧!

那么移值uC/OS-II在CPU上有什么好处呢?个人认为,操作系统的核心好处在于多任务管理与调度。任务较少时,也许感觉不到它的好处,但任务多了,操作系统的好处就明显了,比如说吧,你的实验板上有八个LED,要求你实现这八个LED以八种不同频率进行闪烁,你该怎么写呢?如果有了uC/OS-II操作系统,这就太简单了,将每个LED闪烁按uC/OS-II 要求形式写成任务,然后将八个任务交由uC/OS-II调度即可!

说了一大堆uC/OS-II的相关内容,下面进入正题,谈WinCE!

3、相关术语

0)PC机(Personal Computer)就是指你的电脑,OS(Operating System)是指操作系统!

1)BSP(Board Support Package,板级支持包),介于硬件平台和操作系统之间的一层,

属于操作系统;不同的操作系统对应于不同定义形式的BSP。

2)Bootloader与BIOS:Bootloader是引导程序,就是对实验平台进行初始化,设定一些相关参数等等。就我现在使用的WinCE5.0来说,根据个人理解,Bootloader与BIOS是一个东西,就是在ADS1.2下的一个工程而已,里面含有start.s及其它的一些相关代码。这个现在我还有些模糊,仅谈到此。

3)OEM:Original Equipment Manufacturer原始设备制造商

4)OAL:OEM Abstraction Layer

5)DLL:Dynamic Link Library,动态链接库

6)MFC:Microsoft Foudation Class,微软基础类

7)API:Win32 Application Programming Interface,Win32应用程序编程接口

8)SDK:Software Development Kit,使用WinCE时必须安装SDK,你不必在网上找SDK的安装包,对于每个具体实验板都对于一个SDK,这个可以用PB生成。

9)PB、VS、EVC:PB是Platform Builder的简称,VS是Visual Studio的简称,EVC 是Embedded Visual C++的简称。

10)Nand flash与Nor flash:与非flash和或非flash,前者价格便宜,后者较贵。

4、所需开发软件

1)Platform Builder 5.0:此软件用来定制操作系统,生成内核,生成SDK,编译驱动程序等。

2)Visual Studio 2008:我用的是此版本,当然也许不需要这么高版本,网上用的较多的是VS2005,还有使用EVC++的。此软件用来编写应用程序。

3)ActiveSync 4.5:此软用来PC机与实验板进行同步。此软件可以在微软中国官方网站下载。

4)DNW:串口调试工具,在上电时用来显示BIOS发往串口的相关信息,也可以输入相关参数进行设置的。

5)USB同步驱动:必备!!!

VS2008的安装按提示按装即可,PB5.0的安装可以参考天嵌科技的手册进行安装,讲的很好很详细,至于PB5.0补丁的安装只需安装Net2.0与Net3.5的那一个即可,其实安装与否的原由我也不清楚,好好参考天嵌科技术的手册吧。另外要参考天嵌科技术的手册添加BSP,生成相应的SDK,然后安装SDK,这些都安装好后还有一个工作就是安装USB驱动,这一关一定要过,安不上的话就等着安上再说!

5、相关参考书目:

何宗键编著.Windows CE嵌入式系统.北京:北京航空航天大学出版社

还有就是各个开发板厂商的使用手册都是很好的资料,必备!

主要有天嵌科技TQ2440、朗成电子AT2440EVB、友善之臂mini2440和QQ2440、广嵌科技GEC2440、飞凌等等,只有飞凌的资料是不公开的,其它的都可以在相关网站下载到。

有关Visual Studio的书可以参考一下机械工业出版社刘冰等编著的《C++程序设计教程——基于Visual Studio 2008》,这本书我也没细看过,扫了一眼,讲的还抽合吧。

三、打开WinCE的大门

0、我的学习方法

我学习的理念是首先把整套开发环境搭建起来,然后运行一个最简单的程序入门再说,至于更深一层次的内容慢慢研究!

1、开发平台的建立

个人认为,学习单片机也好,ARM也罢,首先要解决的事情就是将整套开发环境搭建好,成功跑一个最简单的程序,就算入门了,下面我说说WinCE开发环境的建立。

1)安装VS2008,根据提示安装即可,没什么注意事项,唯一的提示就是要留有足够的硬盘空间,仅VS就得留2G空间吧,如果安装MSDN帮助文档的话,再留3G吧!

安装好VS后初次打开会让你选择默认开发环境,有1、Visual Basic 开发设置;2、Visual C#开发设置;3、Visual C++开发设置;4、Web开发设置;5、常规开发设置。个人认为选哪一个都无所谓,差别仅在于新建项目时项目类型一栏的排列顺序有所差别而已。这个设置可以按如下更改:工具→导入和导出设置(I)…→重置所有设置→否,仅重置设置,从而覆盖我的当前设置。

2)安装Microsoft_DotNetFXCHS1.1.exe,这是安装WinCE的前提,如果你电脑上装过VC++等软件,应该就不用安装了,因为Visual Studio系列软件都需要这个的。

3)安装Platform Builder5.0,安装PB其实就是所谓的安装WinCE,这个参考天嵌的手册1.1节内容安装即可,有一点天嵌手册中没提到的是:

安装选择处理器到这一步时如果ARMV4I是一个“×”,则应单击向下的小黑三角,选择第一个或第二个选项,其它的我也不是很懂,反正第一次入门多安装了总比不能用好,以后精通了再选择最优方法吧。

4)安装WinCEPB50-081231-Product-Update-Rollup-Armv4I.msi,这是PB5.0的一个补丁,网上相关文章千篇一率,写了一大堆补丁,个人认为安装这个就足够了,其它的等你用到时再安吧,我用了这么些天也没感觉到补丁有什么用。

5)安装ActiveSync4.5,这个很简单!安装完后打开“我的电脑”就会有一个“移动设备”图标,这个以后有用!

6)DNW不用安装,是一个绿色版的软件,累似于串口调试助手,但功能强一些吧!

7)安装USB同步用驱动,用USB线将实验板与PC机连接起来会提示安装驱动,这个实验板厂商应该会提供的,也可以从网上下载!USB驱动安装不当会导致PC机蓝屏,所以这一步必须过关,否则原地待命!

8)添加BSP:打开PB5.0,添加BSP包,BSP是由厂商提供的,别告诉我实验板是你

自已做的,一上手就写BSP有点不现实吧。参考天嵌手册2.1.1节内容,很轻松搞定!

9)安装SDK:参考天嵌手册2.4节内容很轻松搞定,然后安装即可!

到现在为止环境基本搞定,其它相关细节参考开嵌手册即可!

2、什么叫定制操作系统?为什么要安装WinCE到PC机上?

由于受uC/OS-II操作系统的影响,总想着WinCE的源代码在哪儿?那些API函数的原代码在哪儿头文件中?须知uC/OS-II的源代码是开源的,而WinCE的代码则相反!uC/OS-II 呈现在我们面前的是几个C语言源文件,WinCE呢?就我现在的理解,将PB5.0装到PC 机上意味着将WinCE的全部功能放到了PC机上,然后我们需要做的是通过PB从WinCE 所有功能中挑选出自已需要的功能,这些功能经自已通过PB组合后生成一个NK.bin和NK.nb0文件,关于这两个的区别参考天嵌手册的第92页,具体我也不太懂。但我个人的理解是,生成的NK.nb0就好像是我们在学单片机时生成的hex文件,我们将.nb0烧到实验板上也就是将我们裁剪(即所谓的定制!!!)好的WinCE“安装”到实验板上了,这个过程可以近似理解为将hex文件通过ISP或其它方式烧到单片机里一样的。

综上所述,我们安装PB在PC机上是将WinCE所有功能“暂时放到”PC机上,然后通过PB“挑出”你所需要的功能后并将其组合(即.nb0文件)“放到”实验板上即可!

打个比方说吧,WinCE各种功能就好像一块块积木(即安装PB),然后我们用需要的积木搭出我们需要图形(即我们用PB定制的操作系统)。

WinCE代码是不开源的,不要天天去想API函数在哪儿呢?真想看的话去找找比尔盖茨看看能不能让你看看!安装VS的MSDN,可以查到函数的说明。

3、Bootloader(BIOS)、WinCE核(即nb0文件)及我们用VS编写的应用程序怎么烧到实验板上?都烧在哪里了呢?

1)Bootloaer与BIOS的区别我还没搞懂,就现在的理解还是将它们合二为一,这个有待解决。它们可以用sjf2440.exe进行烧写;烧到哪儿了呢?这个由自已设定,我也没有烧过,只有一个粗略的理解:S3C2440外扩了Nand flash和Nor flash,还有SDRAM,芯片内部没有FLASH,只有4KB的SRAM,这里我们不用管内部与外部,这个只要按要求进行外扩,使用时寻址到什么地址CPU会自动找相关存储空间的。我们可以将所有的flash看成一个整体,它是用来固化程序的,把所有RAM看成一个整体,它是用来运行程序的。我们将flash分成不同的分区,上电时CPU要从根据设定的起始地址的代码开始执行,个人认为Bootloader应该就烧在这里吧!这里的理解个人还有待加强,仅供参考!

2)WinCE核可以通过过USB等方式下载到实验板上,比如用DNW就可以进行下载,之所以下载到哪儿了?下载到flash其中的一个分区,具体由Bootloader引导程序和你自已设定的参数!CPU再聪明还得听人的指挥!

3)VS编的应用程序烧在哪儿了?这个我还没弄明白,我是通过ActiveSync将VS生成的.exe文件发送到实验板上或直接复制到实验板上的。怎么粘呢?安装好ActiveSync后PC 机的“我的电脑”会多一个移动设备图标,如果你的USB同步驱动安装好的,双击“移动设备”其实就是相当于在远程控制着实验板,将VS的应用程序复制过来然后在实验板端相关目录下找到应用程序运行即可!不过这样运行应用程序是在RAM中运行,没有进行固化,至于怎么固化,我再好好研究!

4)这里一直提到flash分区的问题,至于究竟是怎么分区的目前我也不是很懂,个人认为是通过bootloader进行相关设计的吧,在以前接触LPC2131时似乎看到过相关内容。

四、走进WinCE

以下默认开发平台所有软件已安装完毕:

1、烧写Bootloader(没烧过,只是这样认为要首先烧写BIOS)

2、烧写WinCE核

由于本人拿到实验板时以上两步已做好,即我拿到的实验板上就有烧好的WinCE5.0操作系统,因此以上两步是我猜测的!

3、打开VS,按照天嵌手册4.2节内容进行操作,如果成功运行,则OK!本步骤成功后则说明平台搭建成功,但HELLO程序不涉及实验板上的任何具体硬件,个人认为这只能算是入门了一半,还有一个坎没迈过去,那就是流驱动的开发,因为开发第一个流驱动的工作量并不比搭建平台省事,尤其是全靠自已琢磨,旁边无人指导、无人探讨!

4、流驱动的开发

运行成功HELLO程序后你可能会想,如果想点亮实验板上的LED灯该怎么用啊?基于VS开发环境也没法控制CPU的IO寄存器啊?这就需要流驱动了!

大部分实验板的手册都有详细的HELLO程序过程,但很少有手册详细讲解流驱动的开发过程,下面以我的经历详细的写一写:

流驱动的基本介绍可以看看天嵌手册的第五章,脑子里起码要先有个基本概念!

1)打开以下目录:E:\WINCE500\PLATFORM\smdk2440\DRIVERS,并在该目录下新建一个文件夹,命名为GPIOdriver,并用记事本打开该目录下的dirs文件,按其格式添加\GPIOdriver,dirs没有扩展名,打开看看就懂,没什么特别的!

注:其中E盘是我的安装目录,smdk2440是GEC2440实验板提供的BSP,按要求拷贝到了E:\WINCE500\PLATFORM\ 目录。

2)打开刚刚新建的GPIOdriver文件夹,新建txt记事本文件,命名为makefile,打开加入以下内容:!INCLUDE $(_MAKEENVROOT)\makefile.def,然后将.txt扩展名去掉,使其变为无扩展名的文件。

3)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为GPIOdriver,加入以下内容后将其扩展名更改为.def文件:

LIBRARY GPIOdriver

EXPORTS

GIO_Close

GIO_Deinit

GIO_Init

GIO_IOControl

GIO_Open

GIO_PowerDown

GIO_PowerUp

GIO_Read

GIO_Seek

GIO_Write

4)仍然在GPIOdriver文件夹内,仍然新建txt文件,命名为sources,加入以下内容后将其扩展名删除,使其成为无扩展名文件:

RELEASETYPE=PLATFORM

TARGETNAME=GPIODriver

TARGETTYPE=DYNLINK

DLLENTRY=DllEntry

TARGETLIBS= \

$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

MSC_WARNING_LEVEL = $(MSC_WARNING_LEVEL) /W3 /WX

INCLUDES= \

$(_TARGETPLATROOT)\src\inc; \

$(_COMMONOAKROOT)\inc; \

$(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\c ommon\ddk\inc; \

..\..\inc

SOURCES= \

GPIODriver.cpp

5)仍然在GPIOdriver文件夹内,建立GPIOdriver.cpp和GPIOdriver.h,这个大家找相关例子程序进行参考,我是参考的天嵌的例子,不过由与BSP不同,编译时总是出错,错误原因就是一些头文件不一样,有一点编程序经验应该都能查出来,这时最好的解决办法是把需要包含的内容直接写到GPIOdriver.h中去,这样就不会有编译错误了。至于如何编译,别急,请看后文!先这么做好,排查错误要慢慢来,先写好一个再说!

说明一点:这里需要用到VirtualAlloc、VirtualCopy、VirtualFree三个windows API函数,它们的使用方法可以借助MSDN来仔细研究,这里使用到了地址映射的概念,不必深究,慢慢地会懂的;另外在后面写VS应用程序时要用到DeviceIoControl函数。

6)以上出现了多次GPIOdriver,这些地方要命名一致,在写def文件时,GIO只能是三个字母,这里注意!

7)以上工作完成后,GPIOdriver文件夹下的工作就完成了,然后打开E:\WINCE500\PLATFORM\smdk2440\FILES目录,以记事本打开platform.reg文件,添加如下代码:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\LEDdriver]

"Prefix"="GIO"

"Dll"="GPIOdriver.dll"

注意GIO 与GPIOdriver.dll要与前面的命名一致!另外要注意,.reg文件中有很多IF与END 的配套使用,添加代码时不要放在这些中间了!至于IF与END的作用,初学者先跳过!

8)同样在FILES目录下打开platform.bib文件,加入以下代码:

GPIOdriver.dll $(_FLATRELEASEDIR)\GPIOdriver.dll NK SH

同样须注意命名与IF、END的配对!

9)以上工作完成后基本工作就差不多了,这里再说明一点,关于目录各个实验板厂商的BSP包各不相同,比如说天嵌的目录应为TQ2440\Src\Drivers和TQ2440\Files,这个要灵活应变!

10)打开实验板商家所带的PB平台文件.pbxml文件,在PB的左侧选择FileView选项(我这里默认就是这个选项),按下图目录打开你刚刚建立的GPIOdriver文件,右击,选择Build Current Project,就会对刚刚建立的流驱动进行编译,如果有错误会有提示,修改后再编译,直到没有错误为止!

11)点击菜单栏Build OS---Build and Sysgen,对.pbxml文件进行编译,这个大概要花一个多小时,这里你可以去看会儿电影,编译完成后会有一些警告,不用管,只要没错误就行!编译前要选中Build OS菜单下的Clean Before Building,Copy files to Release Directory afer build,Make Run-time Image After Build,至于为什么我也不是很明白,都是一些过来人提供的经验,这个等熟练后慢慢琢磨吧。

其实可以选择Build and Sysgen Current BSP,这样很省时。

12)编译成功后找开与.pbxml文件同目录的RelDir\smdk2440_ARMV4I_Release目录,很发现有好多文件,可以找到NK.nb0和NK.bin文件。找这个文件的快速方法是将这些文件以“详细信息”方式显示,然后单击一下“大小”,会将所有文件以大小排序,最大的那个就是了,这样找起来会快些。到这里驱动编写完毕,NK.nb0暂时留用!

13)打开VS2008,新建项目,可以参考天嵌手册的第六章内容,至于添加的代码可以参考天嵌的例程序,这个很简单的。这种小问题自已琢磨!这里的环境与VC++一样,建议有一定的基础,推荐一下网上很流行的孙鑫C++视频,当你看完前三讲时,你对写这个程序的框架就清楚了。

14)将已生成的NK.nb0通过DNW发送到实验板上,然后运行刚刚写好的VS应用程序就OK了!到现在第一个流驱动编写完毕!

15)以上的代码中好多不用问为什么,初学者直接复制即可,始果想弄明天一些,可以在网上搜索“WinCE 注册表”、“WinCE 流驱动”等关键字。

五、补充说明

WinCE开发有三种:API方法、MFC方法和.NET方法,曾经看过西安电子出版社张勇编写的《Windows CE 应用程序设计》,这本书是基于API方法讲解的,里面以例程序为主体,通过对例程序的讲解,循序渐进,讲的还可以吧,比较适合我,但这本书的平台是基于智能手机或WM6仿真器的,与我们基于ARM9开发板还是有很大区别的,比如说使用WM6仿真器不用安装PB,不用安装ActiveSync,其实只需安装VS2008和WM6的SDK即可!因此受

这本书的影响,当我基于ARM9入门WinCE时有许多事不能理解,突然感觉头绪太多太乱了,比如说突然要安装PB、编写流驱动等等。另外,基于API编程很麻烦,因为所有界面都是用代码实现的,当然这种方法的运行效率是最高的。.NET没用过,不知何物,MFC是微软的一个类库,这个得学一下VC++编程了,由于本程序中直接使用的对话框,就像VB一样按需要绘制界面即可,以后深入学习时VC++得好好掌握一下。

本文档依赖于天嵌科技的《天嵌科技出品--WinCE开发完全手册(V2.0)_20091105.pdf》,与本文档相关资料我均以上传到ourdev论坛ARM版块。可按如下网址下载:

http http ://https://www.wendangku.net/doc/7b17172946.html,/bbs/bbs_content.jsp?bbs_sn=3968016&bbs_page_no=1&bbs_id=1032另外,以后如有相关技术文章,我会发到我的CSDN博客,欢迎一起交流探讨:://https://www.wendangku.net/doc/7b17172946.html,/jbb0523

数据库基础操作语句

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar 类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A:UNION 运算符

两款函数任意波形发生器产品简介

是德科技 30 MHz 函数/任意波形发生器 33521A 单通道函数/任意波形发生器 33522A 双通道函数/任意波形发生器 技术资料 ?????????????????? ?????????????????? ???? (alias-protected) ?????? ??

33500 系列函数/任意波形发生器 实现更出色的精度和灵活性?わょ??????????????????わ???????????????????????????? Keysight 33500 ????/??????????????????????????????????????????????????⒔????? 10 ???????????????????????????????????? 主要特性 —30 MHz ??????? ??????????? —???? 40 ps???????? 0.04%???????????—250 MSa/s ???? 16 ??? ????????????????? —????????????????????????????????? —??? 33522A ?????勚??????ㄩ? —?㈨ 1 MSa ??▌╈????㈨ 16 MSa ▌╈???▌╈???? ???? —?? LXI C ??? —????????????? TFT ?????????????????????????? —??? BenchL ink Waveform Builder Pro ????????????信号保真度 ???????????????? ??????????????? ??????????????? ??????????????? ????? 33500 ????/??? ??????????????? ??????? 40 ps ?⒔??? ???/??????? 10 ???? ??????????? 16 ??? ???? 0.04% ???????? ▕ 250 MSa/s (16 ?) ??????? ????????????▌╈?? ????????????⒋??? ???????????????? ???????????? 灵活的信号生成 33521A ? 33522A ???????? ??????????????? ? (DTMF) ????? 33522A ??? ?????????????ㄩ?? ???????勚???????? ??????????????(? ???????) ??????⒋? ???????????????? ???????????⒋??? 逐点波形 33500??????????? ???????????? (alias- protected) ?????????? ?????????????? ???33521A ? 33522A ??? ? 30 MHz ???????⒋?? ??????????????? ??????????????? ???????????????? ??????????????? ???????????????? ????????? 用户界面 ????????????? TFT ? ???????????????? ???????????????? ?????? 33500 ?????? LXI C ??????? USB 2.0 ? 10/100 Base-T ???????????㎡? ???? PC ?????????? ???????????????? ?? GPIB ????????? 可选 33503A BenchLink Waveform Builder Pro 软件 Benchlink Waveform Builder Pro ? ??????????????? ??????????????? ??? Microsoft Windows ???? ???????????????? ???????????????? ??????????????? ???????????????? ?╖????????㎡???? ??????????????? ??????????????? BenchLink Waveform Builder Pro? ???????????????? ???????????????? ?????╱????????? ㎡??????????????? ??????????????? ??? 30 ??????????? https://www.wendangku.net/doc/7b17172946.html,/? nd/33503

实验五WinCE中的驱动程序开发

WinCE中的驱动程序开发 一.实验目的 1、熟悉WinCE中流式接口驱动程序的12个接口的功能。 2、掌握流式驱动程序的工作过程。 3、能够编写出流式接口的驱动程序。 二.实验内容 使用VS2005的智能设备应用程序开发方法,进行网络通信的编程,并通信多线程技术实现服务器与客户端之间的文件传输。 三.实验设备及工具 硬件:PC机一台; 软件:Windows XP操作系统,VS2005开发环境,WinCE 6.0开发环境,或Windows Mobile 5.0 SDK 四.实验步骤及说明 (1)写出流式接口驱动程序的12个接口,及每个接口的功能。 答:见教材515页 (2)写出流式驱动程序的工作过程。 答:第一步:加载驱动程序,主要有两种加载方式:(1)当系统启动时,设备管理器搜寻注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn键下面的子键,并逐一加载该子键下的每一个驱动,此过程称为BusEnum;(2)应用程序可调用ActivateDeviceEx()函数动态地加载驱动程序。 第二步:设备管理器从注册表的dll键值中获取驱动程序所在的DLL文件名。 第三步:设备管理器调用LoadDriver()函数把该DLL加载到自己的虚拟地址空间中。 第四步:设备管理器在注册表的HKEY_LOCAL_MACHINE\Drivers\Active下,记录所有已经加载的驱动程序。 第五步:设备管理器调用驱动程序中的COM_Init函数,并把上一步中添加的注册表项的完整路径作为COM_Init函数的第1个参数传入驱动程序内。 第六步:在COM_Init中,通常须对硬件进行一些最基本的初始化操作。 通过以上的操作完成流式驱动程序的加载任务。 对驱动程序的操作: 第一步:应用程序使用该设备。首先,应用程序调用CreateFile(TEXT(“COM1”)….)打开设备。然后,文件系统判断打开的是文件还是设备。最后,如果打开的是设备,就将控制权交回设备管理器。 第二步:设备管理器调用驱动程序的COM_Open()函数打开设备。 第三步:COM_Open()函数把打开设备的结果返回给设备管理器。 第四步:设备管理器把SMP_open()的返回结果,返回给应用程序的CreateFile()函数调用。 通过第七步到第十步,设备已被成功打开,接下来可对设备进行读/写和控制操作。下面将以从设备中读取数据为例。 第一步:应用程序使用CreateFile()调用返回的句柄,调用函数ReadFile(),向设备发送读请求。

WinCETouchPanel驱动详解

WinCEWinCEIWinCE Touch Panel 驱动详解 WinCE中的Touch Panel驱动是由GWE模块来管理的,Touch Panel驱动接收用户的触摸信息,并将其转换为屏幕上的坐标信息,传给GWE模块。在WinCE中, Touch Panel 驱动是分层的,分为MDDg和PDD层,这和其他WinCE设备驱动是一样的。MDDI由微软提供,用户只需要实现MD床口PDD层间的DDSI函数就可以了。如图 WinCE中的GWE模块负责加载和管理Touch Panel驱动,Touch Panel的MDD 层向上提供DDI接口,PDD层是针对硬件的实现,对MDD g提供DDSI接口。文档收集自网络,仅用于个人学习 1 Touch Panel驱动中的数据结构 ⑴ TOUCH _P ANEL_SA MP LE_FLAGS 用于描述一个采样点的信息,这些信息被定义在一个枚举结构中: enum enu mTouch Pan elSa mp leFlags { TouchSa mp leValidFlag = 0x01, TouchSa mp leDow nF lag = 0x02, TouchSa mp lelsCalibratedFlag = 0x04, TouchSa mpleP reviousDow nF lag = 0x08, TouchSa mp lelg nore = 0x10, TouchSa mp leMouse = 0x40000000 }; TouchSampleValidFlag :—个有效的采样值 TouchSa mp leDow nF lag:第一次按触摸屏时,返回该flag

国产函数、任意波形发生器大比拼

国产函数、任意波形发生器大比拼 典型的DDS原理框图如图所示。 其实质是数模转换,仍然要遵循奈奎斯特采样定理。即输出的频率不超过采样率的一半,事实上商用的采用DDS技术的函数/任意波形发生器由于受到低通滤波器设计以及杂散分布的影响限制,输出波形的最高频率均不超过采样率的40%。相对于直接模拟频率合成,锁相频率合成,其优点如下: ·频率分辨率高。若时钟频率不变,DDS频率分辨率仅由相位累加器位数来决定,也就是理论上的值越大,就可以得到足够高的频率分辨率。目前,大多数DDS的分辨率在1Hz数量级,许多都小于1mHz甚至更小,这是其他频率合成器很难做到的。 ·工作频带较宽。根据Nyquist定律,只要输出信号的最高频率分辨率分量小于或等于fclk/2就可以实现。而实际当中由于受到低通滤波器设计以及杂散分布的影响限制,仅能做到40% fclk左右。 ·超高速频率转换时间。DDS是一个开环系统,无任何反馈环节,这种结构使得DDS的频率转换时间极短。DDS 的频率转换时间可达到纳秒数量级,比使用其它的频率合成方法都要小几个数量级。 ·相位变化连续。改变DDS输出频率,实际上改变的是每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。 ·具有任意输出波形的能力。只要ROM中所存的幅值满足并且严格遵守Nyquist定律,即可得到输出波形。例如三角波、锯齿波和矩形波。 ·具有调制能力。由于DDS是相位控制系统,这样也就有利于各种调制功能。 同时DDS合成技术也有一些固有的缺点,如下: ·杂散分量丰富。这些杂散分量主要由相位舍位、幅度量化和DAC的非理想特性所引起。因为在实际的DDS电路中,为了达到足够小的频率分辨率,通常将相位累加器的位数取大。但受体积和成本的限制,即使采用先进的存储方法,ROM的容量都远小于此,因此在对ROM寻址时,只是用相位累加器的高位去寻址,这样不可避免地引起误差,即相位舍位误差。另外,一个幅值在理论上只能用一个无限长的二进制代码才能精确表示,由于ROM的存储能力,只采用了有限比特代码来表示这一幅值,这必然会引起幅度量化误差。另外,DAC的有限分辨率以及非线性也会引起误差。所以对杂散的分析和抑制,一直是国内外研究的特点,因为它从很大程度上决定了DDS的性能。 ·频带受限。由于DDS内部DAC和ROM的工作速度限制,使得DDS输出的最高频率有限。目前市场上采用CMOS、TTL等工艺制作的DDS芯片工作频率一般在几十MHz至几百MHz左右。但随着高速GaAs器件的出现,频带限制已明显改善,芯片工作频率可达到2GHz范围左右。 以上摘自:《现代DDS的研究进展与概述》一文,https://www.wendangku.net/doc/7b17172946.html,/event/emag/20080226.htm。 将DDS应用于波形发生器,能非常方便的产生任意波形。一般除了具备常规函数发生器所具备的正弦波、方波、锯齿波、脉冲、噪声外,还有指数上升、指数下降、Sinc波、心电图波、直流,以及地震波等任意波形。能采用直接在仪器上手动编辑或windows 下软件编辑的方式产生任意波形,用于模拟电路或应用环境中可能发生的情况,此外还具备非常丰富的调制功能,甚至有些调制功能是以往只能在高端信号源上才能看到的。 下面找出主要以国产厂商为主的函数/任意波形发生器做一个对比,以此来了解国内DDS的应用水平,并给出一个大概的选购指南,以便您在需要的时候能够快捷的找到合手的信号源。Agilent在很早之前就推出了33200系列

WinCE驱动开发流程

wince驱动开发学习笔记 嵌入式技术/walking_man 发表于2007-03-20, 20:03 首先是wince驱动的分类问题。按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。经过microsun大哥的指点,把这两种分类法分开了。在这里引用一下:“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PD D与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。 至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口 形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。而串口,网卡等就是流接口驱动程序. 所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以 是分层的流式: 如OHCI ” 按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。 第二点:驱动的功能属性。设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。从应用程序到具体硬件间有如下这些环节起作用:

应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。共有三类系统进程用来加载:Device.exe,GWES.exe,File Sys.exe.绝大多数设备驱动都是通过Device.exe加载的。需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows 和wince就不同。 第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。其流程是:上电-启动bootloader-启动N K-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buil din的所有子键。这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。在OS启动完毕后,我们可以用PB的Remot e Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载。 第四点:流接口驱动的概念。暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。过程是:应用程序使用文件API 对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。所谓流接口函数有十个,包括XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_P owerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,在wince5.0中 增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件A PI有CreateFile、DeviceIoControl、 ReadFile、 WriteFile,CloseHan dle,SetFilePointer. 第五点:编写流驱动的步骤。有两种实现途径:1。写DLL,做

频率可变的任意波形发生器

深圳大学实验报告 课程名称:V erilog使用及其应用 实验名称:频率可变的任意波形发生器 学院:电子科学与技术学院 一、前言 波形发生器是一种数据信号发生器,在调试硬件时,常常需要加入一些信号,以观察电路工作是否正常,在实验与工程中都具有重要的作用。随着电子技术的发展与成熟,电子工程领域对波形发生器的要求越来越高,不仅要求波形发生器具有连续的相位变换,频率稳定等特点,还要求波形发生器可以模拟各种复杂信号,并能做到幅度、频率,相位,波形动态可调。V erilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 本实验正是基于V erilog HDL语言对波形发生器的功能进行描述,并进行仿真,从而了解与掌握波形发生器的内部工作原理,并进一步熟悉与掌握V erilog HDL语言,将课堂所学知识进行实践。

二、实验原理 总体设计方案及其原理说明: DDS是一种把数字信号通过数/模转换器转换成模拟信号的合成技术。它由相位累加器、相幅转换函数表、D/A转换器以及内部时序控制产生器等电路组成。 参考频率f_clk为整个合成器的工作频率,输入的频率字保存在频率寄存器中,经N位相位累加器,累加一次,相位步进增加,经过内部ROM波形表得到相应的幅度值,经过D/A转换和低通滤波器得到合成的波形。△P为频率字,即相位增量;参考频率为f_clk;相位累加 器的长度为N位,输出频率f_out为: F_out——输出信号的频率;

Wince6.0驱动开发

Wince6.0驱动开发 (1) 在WINCE600\PLATFORM\LPC32XX \SRC\DRIVERS目录下新建一个目录MyDriver. (2) 在MyDriver目录下新建5个文件。 a) MyDriver.c 实现流接口函数的具体代码。 b) MyDriver.h 为MyDriver.h的头文件。 c) MyDriver.def 定义导出的函数名称。 d) makefile 与其它驱动的相同,不用改。 e) sources 链接和编绎文件。 (3) 前缀定义为MYD (4)文件内容完成后,在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\src\drivers\MyDriver,然后单击鼠标右键,在弹出的菜单中选择“Build”,开始编绎驱动,完成后,在WINCE600\PLATFORM\LPC321XX\target\ARMV4I\retail下可找到MyDriver.dll. (5) 驱动加载的方法:手动,自动。 这里介绍自动加载的方法: a) 在MyDriver目录的位置找到dirs文件,在该文件中插入一行mydriver (都为小写),并在上一行后加“\”。 b) 在平台的“解决方案”的界面下,寻找FLATFORM\LPC32XX\Parameter Files\platform.bib.打开此文件,在相关位置添加mydriver(_FLATRELEASEDIR)\mydriver.dll NK SHK SHK指明该文件的属性,S—系统文件,H—隐藏文件,K—在内核中的位置固定。 c) 在Platform.req文件中相关位置添加程序如下: ;MyDriver [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MYD] “Prefix”=”MYD”

SQL数据库的基本操作

命令行 1、显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES; 2、建立数据库:mysql> CREATE DATABASE 库名; 3、建立数据表:mysql> USE 库名;mysql> CREATE TABLE 表名(字段名VARCHAR(20), 字段名CHAR(1)); 4、删除数据库:mysql> DROP DATABASE 库名; 5、删除数据表:mysql> DROP TABLE 表名; 6、将表中记录清空:mysql> DELETE FROM 表名; 7、往表中插入记录:mysql> INSERT INTO 表名VALUES ("hyq","M"); 8、更新表中数据:mysql-> UPDATE 表名SET 字段名1='a',字段名2='b' WHERE 字段名3='c'; 9、用文本方式将数据装入数据表中:mysql> load data local infile "d:/mysql.txt" into table 表名; 10、导入.sql文件命令:mysql> USE 数据库名;mysql> source d:/mysql.sql; 11、命令行修改root密码:mysql> update https://www.wendangku.net/doc/7b17172946.html,er set password=password('新密码') where user='root';mysql> flush privileges; 12.修改密码的三种方法:mysql>update user set password=password('') where user='joy_pen';mysql>flush privileges;mysql>set password for 'joy_oen'=password('');mysql>grant usage on *.* to 'joy_pen' identified by ''; 1、创建数据库 命令:create database <数据库名> 例如:建立一个名为xhkdb 的数据库mysql> create database xhkdb; 2、显示所有的数据库 命令:show databases (注意:最后有个s)mysql> show databases; 3、删除数据库 命令:drop database <数据库名> 例如:删除名为xhkdb的数据库mysql> drop database xhkdb; 4、连接数据库 命令:use <数据库名> 例如:如果xhkdb数据库存在,尝试存取它:mysql> use xhkdb; 屏幕提示:Database changed 5、当前选择(连接)的数据库mysql> select database(); 6、当前数据库包含的表信息:mysql> show tables; (注意:最后有个s) 三、表操作,操作之前应连接某个数据库 1、建表 命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]); mysql> create table MyClass( > id int(4) not null primary key auto_increment, > name char(20) not null, > sex int(4) not null default ''0'', > degree double(16,2)); 2、获取表结构 命令:desc 表名,或者show columns from 表名 mysql>DESCRIBE MyClass mysql> desc MyClass;

开发wince驱动步骤

开发wince驱动步骤: software:VS20005+wince6.0+BSP hardware:AT91SAM9261开发板(MCUZONE)1在vs2005新建一个驱动工程DemoDrv。

2编写好所有DemoDrv的源文件,例如“.cpp”or“.c”or“.REG”文件,特别注意source文件编写,然后单独编译DemoDrv看有无错误,这样避免全部编译NK导致时间太久。然后立即看到编译结果。若编译成功,会在$:\WINCE600\PLATFORM\AT91SAM9261EK\target目录有相应的DemoDrv.dll文件。(在实现文件“.c”需添加串口抛出信息以便调试)在如图所示:

3在目录$:\WINCE600\PLATFORM\AT91SAM9261EK\FILES找到配置文件:platform.reg 和platform.bib文件。 platform.bib文件添加: IF BSP_AT91SAM9261EK_DemoDrv DemoDrv.dll$(_FLATRELEASEDIR)\DemoDrv.dll NK SHK ENDIF BSP_AT91SAM9261EK_LED platform.reg文件添加: IF BSP_AT91SAM9261EK_DemoDrv #include"$(_TARGETPLATROOT)\SRC\DRIVERS\DemoDrv\DemoDrv.reg" ENDIF BSP_AT91SAM9261EK_LED 添加后分别保存。 4在$:\WINCE600\PLATFORM\AT91SAM9261EK\CATALOG目录下at91sam9261ek.PbcXml 文件打开: 添加文件: Item:ADENEO:BSP_AT91SAM9261EK_ DemoDrv Driver DemoDrv Driver for AT91SAM9261EK boards DemoDrv Driver for AT91SAM9261EK boards BspSpecific BSP_AT91SAM9261EK_DemoDrv Cpu:ARMV4I DemoDrv.dll Device Drivers\DemoDrv 保存文件 5新建NK工程文件或者手动方式更改之前NK工程文件,例如之前工程文件:E:\BSP\BSP\trunk\sample9261\Wince600\AT91SAM9261EK_ARMV4I\PBInitEnv.bat添加 set BSP_AT91SAM9261EK_DemoDrv=1

如何使用函数信号发生器

如何使用函数信号发生器 认识函数信号发生器 信号发生器一般区分为函数信号发生器及任意波形发生器,而函数波形发生器在设计上又区分出模拟及数字合成式。众所周知,数字合成式函数信号源无论就频率、幅度乃至信号的信噪比(S/N)均优于模拟,其锁相环( PLL)的设计让输出信号不仅是频率精准,而且相位抖动(phase Jitter)及频率漂移均能达到相当稳定的状态,但毕竟是数字式信号源,数字电路与模拟电路之间的干扰,始终难以有效克服,也造成在小信号的输出上不如模拟式的函数信号发. 这是通用模拟式函数信号发生器的结构,是以三角波产生电路为基础经二极管所构成的正弦波整型电路产生正弦波,同时经由比较器的比较产生方波,换句话说,如果以恒流源对电容充电,即可产生正斜率的斜波。同理,右以恒流源将储存在电容上的电荷放电即产生负斜率的斜波,电路结构如下: 当I1 =I2时,即可产生对称的三角波,如果I1 > >I2,此时即产生负斜率的锯齿波,同理I1 < < I2即产生正斜率锯齿波。 再如图二所示,开关SW1的选择即可让充电速度呈倍数改变,也就是改变信号的频率,这也就是信号源面板上频率档的选择开关。同样的同步地改变I1及I2,也可以改变频率,这也就是信号源上调整频率的电位器,只不过需要简单地将原本是电压信号转成电流而已。 而在占空比调整上的设计有下列两种思路: 改变电平的幅度,亦即改变方波产生电路比较器的参考幅度,即可达到改变脉宽而频率不变的特性,但其最主要的缺点是占空比一般无法调到20%以下,导致在采样电路实验时,对瞬时信号所采集出来的信号有所变动,如果要将此信号用来作模数(A/D)转换,那么得到的数字信号就发生变动而无所适从。但不容否认的在使用上比较好调。 2、占空比变,频率跟着改变,其方法如下: 将方波产生电路比较器的参考幅度予以固定(正、负可利用电路予以切换),改变充放电斜率,即可达成。 这种方式的设计一般使用者的反应是“难调”,这是大缺点,但它可以产生10%以下的占空比却是在采样时的必备条件。 以上的两种占空比调整电路设计思路,各有优缺点,当然连带的也影响到是否能产生“像样的”锯齿波。 接下来PA(功率放大器)的设计。首先是利用运算放大器(OP) ,再利用推拉式(push-pull)放大器(注意交越失真Cross-distortion的预防)将信号送到衰减网路,这部分牵涉到信号源输出信号的指标,包含信噪比、方波上升时间及信号源的频率响应,好的信号源当然是正弦波信噪比高、方波上升时间快、三角波线性度要好、同时伏频特性也要好,(也即频率上升,信号不能衰减或不能减太大),这部分电路较为复杂,尤其在高频时除利用电容作频率补偿外,也牵涉到PC板的布线方式,一不小心,极易引起振荡,想设计这部分电路,除原有的模拟理论基础外尚需具备实际的经验,“Try Error”的耐心是不可缺少的。 PA信号出来后,经过π型的电阻式衰减网路,分别衰减10倍(20dB)或100倍(40dB),此时一部基本的函数波形发生器即已完成。(注意:选用π型衰减网络而不是分压电路是要让输出阻抗保持一定)。 一台功能较强的函数波形发生器,还有扫频、VCG、TTL、 TRIG、 GATE及频率计等功能,其设

数据库与表的基本操作

第四章数据库与表的基本操作 实验4-1 数据库及表的操作 (一)实验目的 1.掌握创建数据库的基本操作方法。 2.熟练掌握创建表结构和输入记录的操作方法。 3.熟练掌握修改表结构、浏览和修改表记录数据的操作。 4.熟练掌握建立索引的操作。 5.掌握创建表间联系的操作。 (二)实验内容及步骤 1.创建数据库 【实例4-1】在实验2-1所建立的“教学管理.pjx”项目中,创建一个“学生成绩.dbc”数据库。 操作步骤如下: (1)打开“教学管理.pjx”项目。 (2)在“项目管理器”窗口中,选择“数据库”,然后单击“新建”按钮,打开“新建数据库”对话框,单击其中的“新建数据库”按钮,打开“创建”对话框,如图4-1所示。 图4-1“创建”对话框 (3)在“保存在”文本框中,选择保存数据库的文件夹“程序VX”;在“数据库名”文本框中,输入数据库名称“学生成绩”。 (4)单击“保存”按钮,即在指定位置建立一个“学生成绩.dbc”数据库文件。 此时,在VFP主窗口中弹出一个“数据库设计器”窗口,同时还激活了“数据库设计器”工具栏,如图4-2所示。

18 数据库应用学习与实训指导 图4-2“数据库设计器”窗口 2.创建数据表 【实例4-2】在“教学管理.pjx”项目中,创建学生表(Student.dbf)、成绩表(Grade.dbf)、课程表(Course.dbf)、授课表(Teach.dbf)和教师表(Teacher.dbf)。各个表的结构和数据记录如图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9、图4-10、图4-11和图4-12所示。 图4-3学生表(Student.dbf)的结构 图4-4学生表(Student.dbf)的记录浏览窗口

33210A任意波形发生器技术资料

Keysight 33210A 10 MHz 函数/任意波形发生器 技术资料 –10 MHz 正弦波和方波 –脉冲、斜波、三角波、噪声和直流波形 –提供14 位、50 MSa/s、8 K 点任意波形发生器选件 –AM、FM 和PWM 调制类型 –线性和对数扫描以及猝发脉冲 –幅度范围为10 mVpp 至10 Vpp –图形模式便于观察验证信号设置 –含有USB、GPIB 和LAN 接口 –完全符合LXI C 类规范

价格合理, 性能优异 Keysight 33210A 函数/任意波形发生器是 332XX 产品家族的最新成员。它用直接数字合成 (DDS) 技术生成稳定、精确和低失真正弦波信号,以及具有快速上升和下降时间的 10 MHz 方波和达 100 kHz 的线性斜波。对于用户定义波形,选件002 提供14 位,50 MSa/s 8 K 点任意波形发生器。 脉冲生成 33210A 能生成高达 5 MHz 的可变边沿时间脉冲。33210A 的脉冲还具有可变的周期、脉冲宽度和幅度,对于需要灵活脉冲信号的各种应用是很理想的设备。 定制波形生成(选件002) 您能用 33210A 的可选 8K 点任意波形发生器 (选件 002) 生成复杂的定制波形。33210A 具有14 位分辨率和50 MSa/s 采样率,为您提供生成所需波形的灵活性。非易失性存储器中可保存4 个波形。 有了K eysight IntuiLink 任意波形软件,您就能轻松地使用波形编辑器生成、编辑和下载复杂波形。您也可使用I ntuiLink 捕获示波器波形,并把它作为输出发送至33210A。如欲了解 IntuiLink 的更多信息,请访问https://www.wendangku.net/doc/7b17172946.html,/?nd/intuilink 易于使用的功能 33210A 的前面板操作简捷而友好。只需 使用一、两个按键,您就能访问所有主要 功能。旋钮或数字键可用来调节频率、幅 度、偏置及其他参数。您甚至还能直接输 入 Vpp、Vrms、dBm 或高低电平值。计时 参数可以用赫兹(Hz) 或秒为单位输入。 内部 AM、FM 和 PWM 调制使仪器能轻松 地调制波形,而不需要单独的调制源。线 性和对数扫描也是内置功能,扫描速率 可在 1ms 至 500s 范围内选择。猝发模式 允许用户选择每次触发的周期数。GPIB、 LAN 和USB 接口均为标准配置,您还能获 得SCPI 命令的完全编程功能。 外部频率基准(选件001) 33210A 外部频率基准使您能同步于外 部10 MHz 时钟、另一台33210A、Keysight 33220A 或33250A。相位调整可从前面板 或通过计算机接口进行,以实现精确的相 位校准和调节。 测量特征 频率范围 1 mHz 至5 MHz 脉冲宽度 (周期≤10 s) 40 ns 最小值 10 ns 分辨率 可变边沿时间20 ns 至100 ns 过冲<2%

WinCE流驱动程序设计概述

微 处 理 机 M I CROPROCESS ORS W inCE 流驱动程序设计概述 顾峥浩,王自强,聂文华 (南京大学电子科学与工程系,南京210093) 摘 要:介绍了W inCE 操作系统下流驱动的设计方法,并在I ntel 公司的DBPXA255开发板下提供了关于8位数码管LED 的设计实例。 关键词:W inCE;流驱动;DBPXA255中图分类号:TP316.7 文献标识码:B 文章编号:1002-2279(2007)03-0081-03 The D e s i gn o f S tream I n te rface D ri ve r fo r W i nC E G U Zheng -hao,WANG Zi -qiang,N I E W en -hua (D epart m ent of Electronics and Engineering,N anjing U niversity,N anjing 210093,China ) Abstract:This paper intr oduces the strea m interface driver of W inCE,and p resents a sa mp le driver f or the Hex LED s of I ntel ’s DBPXA255. Key words:W inCE;Strea m interface driver;DBPXA255 1 引 言 W inCE 是一款由微软公司推出的面向嵌入式 领域的操作系统,被广泛应用于手机、P DA 、平板电 脑以及各种工控领域中。由于嵌入式设备硬件平台的多样性,针对不同的硬件编写驱动程序,从而使W inCE 上层屏蔽底层硬件的多样性就显得尤为重 要。 W inCE 的驱动按类型分有四种,分别为本地驱动(Native device driver )、流驱动、US B 驱动和网络驱动。其中流驱动由于接口简单、支持硬件设备最多,因而最为常用。下面将结合DBPXA255开发板中流驱动的一个简单实例,详细说明其设计方法。 2 流驱动开发的基本知识 2.1 开发W inCE 驱动的基本工具 驱动程序属于板级支持包(BSP )开发的一部分,可以使用微软的Platfor m Builder 工具进行设计。该工具将驱动编译成动态库,并整合到CE 系统中去。如果成功,则会得到一个NK .bin 的文件,此文件即为按照你的硬件平台定制的内核镜像,将其下载到嵌入式设备中就可以运行W inCE 了。笔者使用的是其.Net 版本。2.2 DBPXA255开发板 PXA255是I ntel 公司推出的取代Str ong AR M S A1110的新一代嵌入式应用处理器,属于ar m 系 列,它拥有Thumb 压缩指令、64位长乘法指令、增强型DSP 指令等先进特性,并集成了众多的外部接口,支持L inux 、W inCE 、Pal m OS 、Sy mbian OS 等主流嵌入式操作系统。DBPXA255开发板基于该型处理器,添加了一些外设如触摸屏、声卡接口等,在嵌入式开发中有着广泛的应用。2.3 W inCE 设备驱动程序的加载 大部分W inCE 驱动程序在系统引导的时候被设备管理器加载,加载信息被放在注册表的特定子键中,一般被设定为“HKEY _LOCAL _MACH I N E \DR I V ERS\BuiltI n ”。例如音频设备(W ave Dev )的加载信息: [HKEY _LOCAL _MACH I N E \D rivers \BuiltI n \W ave Dev\] "Prefix"="WAV ""D ll"="wavedev .dll" "I ndex"=dword:1"O rder"=dword:0 Prefix 的值代表设备的前缀名,用于标识与特 定名称设备相关联的文件流访问接口,必须由三个大写字母组成。在这里它的值为WAV ,那么设备的打开、关闭例程就为WAV_Open 和WAV_Cl ose 。 “D ll ”的值代表该设备驱动程序所在的动态库的名称,这里系统将在“wavedev.dll"中查找对 作者简介:顾峥浩(1981-),男,江苏无锡人,硕士研究生,主研方向:W inCE 、L inux 下嵌入式开发及应用。收稿日期:2005-03-02   第3期 2007年6月     No .3 Jun .,2007

任意波形发生器

1绪论 1.1任意波形发生器的发展历程 任意波形发生器(Arbitrary Wave Generator)是在1975年开发成功的,从此,信号发生器产品增加了一个新品种。在任意波形发生器作为测量用信号激励源进入市场之前,为了产生非正弦波信号,已使用函数发生器提供三角波、斜波、方波和余弦波等几种特殊波形。声音和振动分析需要复杂调制的信号源,以便仿真真实的信号,只有借助任意波形发生器,例如医疗仪器测试往往需要心电波形,任意波形发生器很容易产生各种非标准的振动信号。 早期的任意波形发生器主要着重音频频段,现在的任意波形发生器已扩展到射频频段,它与数字示波器(DSO)密切配合,只要数字示波器捕获的信号,任意波形发生器就能复制出同样的波形。在电路构成上,数字示波器是模拟/数字转换,任意波形发生器是数字/模拟的逆转换,目前任意波形发生器的带宽达到2GHz,足够仿真许多移动通信、卫星电视的复杂信号。 生产数字示波器的仪器公司一般都供应任意波形发生器,如安捷伦、力科、泰克公司,也有只生产任意波形发生器的公司,如雷科、斯坦福公司。仪器有台式、PC机虚拟、VXI总线、PXI总线等多种方式,大部分产品只有1路输出,有的高达16路输出。仪器采样率从最低的100KS/s到4GS/s,相当实时带宽50kHz到最高的2GHz。产生任意波形的方法主要有两种:即存储器和直接数字合成(DDS),前者电路比较简单,分两种形式:相位累加器式与计数器式,但需要较深的存储容量。任意波形发生器的波形定义主要有面板设定、方程式设定、波形下载、软件设定、数字示波器下载、内置编辑器等多种。 1.2任意波形发生器的发展趋势及应用 任意波形发生器的应用非常广泛,在原理上可仿真任意波形,只要数字示波器或其它记录仪捕捉到的波形,任意波形发生器都可复制出,特别有用的是仿真单次偶发的信号,例如地震波形、汽车碰撞波形等等。 任意波形发生器的发展趋势是更高取样率,更高分辨率和更大存储量,目前实时带宽超过1GHz的产品比较少,而且分辨率只有8位,不能满足快速发展的移动通信和高速网络的测量要求。与数字存储示波器相比,任意波形发生器的全面指标存在明显差距,前者的取样率达到20GS/s和带宽6GHz,后者的取样率是4.8GS/s 和带宽2GHz。任意波形发生器首先要赶上数字存储示波器,然后再往前发展,因为在电路构成方面,任意波形发生器的核心部件是高速数/模转换器,它的工艺潜力还很大,显然缺少的是市场需求。 任意波形发生器在通信系统、测试系统等方面得到广泛应用。任意波形发生器的另一重要应用领域是低频,例如心电图、汽车点火、防撞气囊、医疗仪器等。

相关文档