程序设计论文范文

2019-10-27 版权声明

程序设计论文

程序设计论文篇1

摘要该文探讨Windows3.1的中断机制,并结合DPMI接口给出一种中断程序设计方法,以越过系统和应用程序的消息队列,处理外部实时事件。

一、前言

Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。

对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。

本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。

二、Windows的消息机制

Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。

Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。

图1

三、Windows的保护模式及中断机制

1.Windows的保护模式

保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描述器表。保护模式与实模式有许多不同。其中显著的差异是访问内存的机制不同。

2.中断机制

(1)实模式中断

为了便于理解,我们先回顾实模式中断。

在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。

①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。

②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。

③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。

④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。

(2)保护模式中断

保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。

①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。

它仍然由BIOS启动例程设置,由DOS填充到RAM中。

②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I

DT结构见图2。

图2

③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模

式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口DPMI

Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT2FH和INT31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。

//windowsasycommunication

//byLiXiuming

//lastmodifiedonJune25,1996

#include〈windows.h〉

#include〈dos.h〉

voidinterruptfarDataReceive();

voidinterruptfar(*old-vector)();

unsignedchardatacom-r[1024],datacom-s[1024];

intinflag=0;

unsignedints8259;

intInitCom1()

{//串口1初使化

s8259=inportb(0x21);//读入8259当前状态并保存

outportb(0x21,s8259&0xe8);//初始化8259,允许0x0c号中断

outportb(0x3fb,0x83);

outportb(0x3f8,0x0c);

outportb(0x3f9,0x00);

outportb(0x3fb,0x03);

outportb(0x3fc,0x08);//允许中断信号送到8259A,以便能中断

outportb(0x3f9,0x01);//0x01,中断允许

return1;

}

voidinterruptfarDataReceive()

{//中断接收子程序

staticinti=0;//静态局部变量

charrechar=0;//每中断一次,i自动加1

rechar=inportb(0x3f8);//从数据口读出发送过来的数据

if(inflag==0)

{

if(rechar!=s&&i==0)//帧起始

{

i=0;

gotoll;

}

datacom-r[i++]=rechar;//存入datacom-r[](通信缓冲区)

if(rechar==e)//帧结束

{

inflag=1;

i=0;

}

}

ll:outportb(0x20,0x20);//回送中断结束标志

}

//调用DPMI

//保存旧的0CH号保护模式中断向量

//设置新的保护模式中断服务例程

voidInitCom(void)

{

asm{

cli

movax,204h

movbl,0ch

int31h

sti

}

old-vector=MK-FP(-CX,-DX);//保存

asm{cli//设置新的0x0c中断服务例程

movax,205h

movbl,0ch

movcx,segdatareceive

movdx,offsetdatareceive

int31h

sti

}

InitCom1();

}

//恢复8259状态

//恢复0CH保护模式向量

voidRestoreComm(void)

{

outportb(0x21,s8259);

asm{

cli

movax,205h

movbl,0ch

movcx,segold-vector

movdx,offsetold-vector

int31h

sti

}

}

在窗口第一次被创建时会传送它WM-CREATE消息,这时调用InitCom()即可。在主窗口关闭时,即主窗口中收到WM-DESTROY消息时,调用RestoreComm()恢复原来的状态。

这样在对串口初始化,设置中断服务例程后,通信事件发生时,会立即跳入中断子程序中执行,越过系统的消息队列,达到实时处理通信事件的目的。而数据处理模块可通过全局标志flag访问全局的数据通信缓冲区获取实时数据。这种实现方式与基于消息机制的Windows通信API实现相比具有实时性强的特点,因为它超过Windows系统的两极消息机制。

上述程序已在实际系统中得到应用。在Windows3.1支持下,同时运行三个Windows任务:服务器SERVER(内有实时串行通信,多个网络数据子服务),客户CLIENT,FOXPRO数据库系统。整个系统运行良好。切换到WIN95平台下(支持0.9版DPMI),系统也运行良好。

参考文献

1张豫夫、曹建文译.【澳】BarryKauler著.Windows汇编语言及系统程序设计.北京大学出版社,1995

2赵人任等译.【美】MikeKlein者.Windows程序员使用指南(一).北京:清华出版社,1995

3刘林、陈红编译.80386硬件与接口技术.北京:北京希望电脑公司,1991

程序设计论文篇2

1、&符号表示为引用的效果

对于引用的定义可以归纳为符号的类型和符号的使用方式,在符号的类型中就符号的使用标示:标示符号&+引用名称=代码的名称;例如:printc;if&chart=if;标示出不同的定义,if就是标示符号的引用,也就是所谓的名称改变。符号的分析图为(图1)所示。在这里必须要以下的说明:&符号在标示中只是以标示名称的形式存在,不作为任何的含义;&符号在引用的过程中,对于初始的代码变化不会起到改变的作用,也不会促使代码发生任何性质上的变化;在引用过程中,对于引用前和引用后&符号使用的两个名称在作用上是相同的,也就是说名称只是一个代号,在程序使用中也是为了区分代码改变的标准,这就不能再进行代码的改名;代码的重新命名不是定义上发生任何的变化,所以在数据库当中的代码性质不会进行更新,只有在程序顺利运行后以及程序出现了调试过程后,新定义的使用&符号的代码才能被列入新的程序数据库当中。

2、程序设计中&符号的使用

C++程序中&符号出现的情况是标示为引用,对于函数的变化中会起到一定的作用,虽然不改变代码的性质,但是对于函数的定义还是会出现一定的影响。&符号改变的数学函数的参数变化,对于参数的定义域起到了重要的作用。在C语言中的函数值的变化,其中关于main函数的变化之最多,也是在程序研究中使用&符号最多、最为关键的因素之一。在对于main函数的&符号使用中,首先要弄清楚函数的最初原型,对于函数的表达意义要有初步的了解,并且能够合理的使用程序的改变方程式,对于main中的函数参数中&符号也有着不同的规范要求。在main可编辑函数中,agent是表示函数中参数的含义,&符号是表示为函数的变化地址,同时&符号也表达出函数中参数的个数,把agent最为函数参数的指导性参数值进行分析判断,统计&符号可以得到函数相关数组的即时数组信息。在操作系统中,函数中&符号的配置启动中,完全取决于操作系统的函数变化,对于操作中函数的初始变化值有着严格的要求,并在运行初始阶段进行函数的归零处理,后期在每个不同函数变换的模块当中,提取出不同数值的数据参数,来指导计算机程序的有效运行状态。通过改变符号的方式可以对于程序的效率有一定的提升。由上述例子看出,在函数中传引用和传指针的效果是相同的。这样,被调函数中的形参实际上就是主调函数中的实参或目标变量的别名,因此被调函数中所有对形参的操作实际上就是对相应的主调函数中目标变量的操作,一般传递的数据较多时,采用引用时程序的效率较高。虽然使用指针传递地址也能达到相同的效果,但因为在被调函数中还要为形参分配存储单元,而且在主调函数的实参必须使用变量的地址,这种方式必将导致程序阅读性较差,而使用引用便显得简单易懂,而且程序结构也更清晰。常引用声明方式:const类型标识符&引用名=目标变量名;在这种引用方式中,由于目标变量的值的修改不能通过引用来间接修改,因此可以很好地保护目标变量的值,使得引用有了很好的安全性,即相当于目标为const型的变量。当参数需要定义为引用型是,如果实际需要容许尽可能定义为const,这样可以保证代码的健壮性,同时也能带来其它的好处。在函数的定义过程中对于代码的变量指标在初始定义之后,在对变量的变化值进行记录,该代码指针变量便指向初始化指针变量的目标变量。通常情况下规定,具体操作过程时,对代码的指针的操作实际是对其所指向变量的间接操作。程序设计过程中使用指针可以让系统的程序的可读性降低,在操作起来也相对的困难。而由于引用本身就是目标变量的别名,编程中对引用的操作就是对目标变量的直接操作。引用其实也是一种指针,只不过其操作方式与指针不相同,指针可以一对多进行映射,而引用却只能一对一的进行,也就是一个参数对应一个代码指针数值,即&符号中的数字不能被改变,因此在对于符号的使用中,鉴于引用比指针更容易进行操控和编辑。

3、结语

C++程序当中由于不同的编程要求,现实出的具体含义就会有所不同,有些程序代码的不同是通过性质的改变,有些代码的变化是存在于不同符号发生的变化,对于符号的重要性我们在文章之中详细的介绍了,也通过举例的方式来对符号的作用和程序语言中对于符号的检测做出了详细的分析。对于使用&符号中的优劣也提出了相关的意见,对于&符号在C语言中的定义和使用方法上有这不同的介绍,如何使得符号的完整和正确性对于编程的作用提出了具体的操作方案,充分发挥出&符号在使用中的作用,尽量降低程序语言给操作人员带来的麻烦,更好的适应计算机编程,进一步完善C++程序设计中的方案设计。

作者:李丽萍 单位:云南经济管理职业学院

程序设计论文篇3

近年来,计算机产品的应用领域越来越广,数字信号处理器的发展表现得尤为明显。DSP芯片制造商和DSP板开发商利用自身的优势不断开发出多DSP结构的产品来满足这种需求。通常的DSP设备是与嵌入式系统相结合,来实时地完成某一特定任务。随着信号采集速度和处理速度的要求越来越高,许多领域都需要进行多处理器运算,其中包括医学、图像处理、军事、工业控制、电信等许多领域。多处理器系统可以根据所需实现的功能和处理器的性能来调节处理结点的数目,使系统达到最佳的性能价格比。

实际上,只有从芯片开始仔细设计,才能方便地实现多处理器系统的调节功能。这里选用的是AD公司新出品的SHARC级处理器ADSP21160。

ADSP21160具有很大的片内存储区、多重内部总线结构、独立的I/O子系统;具有构造多处理器系统的所有特点,能够真正支持处理器数目的可调节功能,十分适合组成高性能浮点的多DSP系统。

VxWorks是目前世界上用户数量最大的实时操作系统。这使它除了具有优越的技术性能之外,还具有丰富的应用软件支持、良好的技术服务和可靠的系统稳定性。由于它具有以上优点,本系统中选用了VxWorks作为MVME167的操作系统。

一、ADSP21160的特点

ADSP21160是AD公司采用超级哈佛结构的一种新产品。21160的汇编代码与2106x兼容,处理器具有SIMD(单指令流多数据流)功能;而2106x只具有SISD(单指令流单数据流)功能。为了充分利用这种新的功能,一些指令做了一些改变。ADSP21160包括1个100/150MHz的运算核、双端片内SRAM、1个支持多处理器的集成在片内的I/O处理器和多重内部总线以消除I/O瓶颈。

ADSP21160的汇编源代码与2106x兼容。SIMD计算结构:2个32bit的计算单元,其中每一个单元包括乘法器、ALU、移位寄存器及寄存器文件。具有完备的与设备接口功能。包括独立的I/O处理器、4Mbit的片内双端SRAM、可直接连接的多处理器特性及端口(串口、连接口、外总线及JTAG)。

ADSP21160包括2个运算处理单元,具有SIMD功能。处理单元指的是PEX和PEY。PEX始终是有效的,而PEY的有效是通过设置MODE1寄存器中的PEYEN位来实现的。当PEY模式有效时,同一条指令在2个处理器单元中都得到执行,但每一个处理器单元中的操作数不同。

SIMD模式在存储区和处理器单元之间的数据传输也是很有作用的。当使用SIMD模式,通过加倍数据带宽来保证处理器单元的操作。在SIMD模式,当使用DAGs来传输数据时,存储区每次访问所传输的是两个数据值。

ADSP21160包括4Mbit的片内SRAM,分为两块,每一块2Mbit。可以定义为不同字长的指令和数据存储。每一个存储块的双端口结构可以使存储块独立地被运算核处理和I/O处理器访问。21160的存储区最大可以容纳128K的32bit数据,或256K的16bit数据,或85K的48bit指令,或其他混合字长的数据,但总和最大为4Mbit。所有存储区可以16、32、48、64bit字长的字访问。外端口支持处理器与片外存储器及外设的接口,片外的4G地址空间属于21160的统一地址空间。

外端口支持同步、异步及同步BURST访问。DMA控制器的操作相对处理器运算核是独立和不可见的,即DMA操作可与执行指令同时进行。DMA传输可以在内部存储区与外部存储区、设备或主机之间进行。21160共有14个DMA通道,其中:连接口(linkport)占6个;串口占4个;外端口(externalport)占4个。21160可以通过DMA传输来下载程序,异步设备也可以通过DMA请求/应答线来控制2个DMA通道。

21160具有许多特点支持多DSP系统。外端口与连接口支持多处理器系统的直接连接,外端口支持统一的地址空间,允许DSP之间互相访问。片内具有分布式总线仲裁逻辑,最多支持6片21160和主机连接。外端口的最大数据传输率为400MB/s,广播写信号可以同时发

送到各片21160。6个连接口提供了另一种方法实现多处理器之间的通信。连接口的最高传输速率为600MB/s。

整个系统基于VME总线。VME总线系统作为最早的国际通用开放式总线,自1981年起,经历了近20年的发展。其影响不断扩大,功能不断完善,现已成为性能最好、应用最广的国际总线标准之一。

根据设计要求,采用了4片ADSP21160。片外共享内存SRAM可以被主机和各片DSP直接访问;EPROM用来存放初始化程序和各片DSP要运行的程序,在系统上电后这些程序被下载到各片DSP中;LEDs用来显示插件的状态,如reset、normal等。每一片都有1个连接口连到插件的前面板,这样前端采集来的数据就可以很方便地传输到多DSP上,而且也使数据的传输模式更加灵活。

连接口(linkport)是SHARC系列DSP芯片的一个特点。ADSP21160共有6个8bit连接口提供额外的I/O服务。在100MHz时钟下运行时,每个连接口可达100MB/s。连接口尤其适合多处理器间点到点的连接。连接口可以独立地同时操作,通过连接口的数据封装成48/32bit字长后,可以从片内存储区直接被运算核读取或DMA传输。每一个连接口有它自己的双缓冲I/O寄存器,数据传输可编程,硬件由时钟/应答握手线控制。4片DSP使用连接口实现DSP间两两互连。

21160的主机接口可以很方便地与标准微处理器总线(16/32bit)相连,几乎不需要额外硬件。主机通过21160的外端口对其进行访问,存储区地址映射为统一的地址空间。4个DMA通道可以用于主机接口,代码和数据传输的软件开销很小,主处理器通过HBR、HBG和REDY信号线与21160进行通信,主机可以对片内存储区进行直接读写。

二、开发环境Tornado

VxWorks的开发环境是WindRiver公司提供的Tornado。Tornado采用主机-目标机开发方式,主机系统可采用运行SunSolaris、HP-UX以及Win95/NT的工作站或个人计算机,VxWorks则运行在Intelx86、MC68K、PowerPC或SPARC等处理器上。Tornado支持各种主机-目标机连接方式,如以太网、串行线、在线仿真器和ROM仿真器。

Tornado的体系结构使得许多强有力的开发工具可以用于各种目标机系统和各种主机-目标机连接方式下,而不受制于目标机的资源和通信机制。同时VxWorks具有良好的可剪裁性。因此它适用于各种嵌入式环境的开发,小到资源极其有限的个人手持式设备如PDA(PersonalDigitalAssistant);大到多处理机系统,如VME系统。

Tornado可提供一个直观的、可视化的、用户可扩充的开发环境,极大缩短了开发周期。同时,由于Tornado是一个完全的开放系统,使得集成第三方开发工具变得十分容易。

主机与目标机之间的通信是通过运行各自处理器上的进程来完成的,使主机上的开发工具和目标机的操作系统可以完全脱离相互连接的方式。

为了摆脱主机-目标机通信带宽和目标机资源的限制,Tornado将传统的目标机方的工具迁移到主机上,如shell、loader和符号表等。这样,系统不再需要额外的时间和带宽在主机和目标机之间交换信息,降低了对连接带宽的需求,也避免了目标机的资源(如内存)被工具或符号表大量占用,使得应用程序拥有更多的系统资源。同时这种迁移也使得各种主机开发工具独立于目标机存在,从而使同一主机平台上的工具可以用于所有的目标机系统。

作为一个应用软件开发环境,Tornado提供了友好的可视化开发界面、交叉编译环境、源码级调试工具、目标机命令解释器和目标机状态监视器等多种应用工具,为应用软件开发提供了一个高效而可靠的平台。

三、程序设计

我们选用的DSP开发工具是AD公司提供的VisualDSP。这是一个集成开发环境,支持对SHARC系列DSP芯片的开发。实时操作系统VxWorks的开发工具是WindRiver公司的Tornado集成开发工具。VisualDSP可以C语言或汇编语言编

写的DSP代码,最新版本的VisualDSP还支持C++。它还有1个优点,就是可以编译多片DSP的源代码,并产生下载文件,这就可以很方便地进行多DSP系统的软件模拟。

ADSP21160阵列的设计结构使它既可以构成单指令流多数据流(SIMD)的并行处理机,也可以构成多指令流单数据流(MISD)或多指令流多数据流(MIMD)的流水线处理机,视用户的要求而定。这两种并行方案的选择,简单来说就是选择分割数据流还是分割处理工序。SIMD方案的原理如图1所示。

以下介绍我们实验室承担的水声信号处理系统。本系统以VME总线为系统开发平台,前端调理模件、模数转换模件和前端控制模件等为VME插件,采用SHARC级DSP芯片阵列完成声纳信号实时处理,基于嵌入式实时操作系统VxWorks及X窗口系统的中央控制和显示。

图2是4片DSP的任务分配图。从前端采集来的信号,经波束形成和复解调,再经过窄带滤波后的信号分为两路,一路送去进行幅度检波,一路做频域处理。幅度检波就是对复信号求模,根据信号幅度判决有无目标存在。频域处理分两种情况:当发射信号为单频脉冲时,进行功率谱估计,然后根据多普勒频移估计目标速度;当发射信号为双曲调频信号时,进行相关处理。

声纳综合数据处理主要包括主动声纳信号处理和被动声纳信号处理。其中,主动声纳信号处理又根据发射信号的不同,分为非相干处理、相干处理、功率谱处理。声纳综合数据处理主要完成:目标自动检测、目标参数测定和动目标跟踪。

四、操作流水线

操作流水线是模块内数据计算与I/O的流水线,物理上表现为CPU与I/O端口的DMA之间的并行。在前端处理中由于数据率高,通信开销很大。以通信任务最为繁重的复解调和多普勒补偿模块为例,输入数据率为2Mw/s,输出数据率为4Mw/s,高速连接口LinkPort最高速率为100Mw/s,如果采用串行传输的话,通信时间就将占用60%以上的处理时间,计算时间显然严重不足。所以必须采用并行执行,流程图如图3所示。这也是一种异步流水线方式,每次传送和计算完成都须要设置标志以通知下一操作。

结束语

在VxWorks实时操作系统下,4片ADSP21160上的程序已经通过模拟输入和系统测试。采用SHARCDSP阵列能够很好地完成声纳信号实时处理,每一片DSP至少有10%的计算裕量,基本达到设计要求。

送到各片21160。6个连接口提供了另一种方法实现多处理器之间的通信。连接口的最高传输速率为600MB/s。

整个系统基于VME总线。VME总线系统作为最早的国际通用开放式总线,自1981年起,经历了近20年的发展。其影响不断扩大,功能不断完善,现已成为性能最好、应用最广的国际总线标准之一。

根据设计要求,采用了4片ADSP21160。片外共享内存SRAM可以被主机和各片DSP直接访问;EPROM用来存放初始化程序和各片DSP要运行的程序,在系统上电后这些程序被下载到各片DSP中;LEDs用来显示插件的状态,如reset、normal等。每一片都有1个连接口连到插件的前面板,这样前端采集来的数据就可以很方便地传输到多DSP上,而且也使数据的传输模式更加灵活。

连接口(linkport)是SHARC系列DSP芯片的一个特点。ADSP21160共有6个8bit连接口提供额外的I/O服务。在100MHz时钟下运行时,每个连接口可达100MB/s。连接口尤其适合多处理器间点到点的连接。连接口可以独立地同时操作,通过连接口的数据封装成48/32bit字长后,可以从片内存储区直接被运算核读取或DMA传输。每一个连接口有它自己的双缓冲I/O寄存器,数据传输可编程,硬件由时钟/应答握手线控制。4片DSP使用连接口实现DSP间两两互连。

21160的主机接口可以很方便地与标准微处理器总线(16/32bit)相连,几乎不需要额外硬件。主机通过21160的外端口对其进行访问,存储区地址映射为统一的地址空间。4个DMA通道可以用于主机接口,代码和数据传输的软件开销很小,主处理器通过HBR、HBG和REDY信号线与21160进行通信,主机可以对片内存储区进行直接读写。

二、开发环境Tornado

VxWorks的开发环境是WindRiver公司提供的Tornado。Tornado采用主机-目标机开发方式,主机系统可采用运行SunSolaris、HP-UX以及Win95/NT的工作站或个人计算机,VxWorks则运行在Intelx86、MC68K、PowerPC或SPARC等处理器上。Tornado支持各种主机-目标机连接方式,如以太网、串行线、在线仿真器和ROM仿真器。

Tornado的体系结构使得许多强有力的开发工具可以用于各种目标机系统和各种主机-目标机连接方式下,而不受制于目标机的资源和通信机制。同时VxWorks具有良好的可剪裁性。因此它适用于各种嵌入式环境的开发,小到资源极其有限的个人手持式设备如PDA(PersonalDigitalAssistant);大到多处理机系统,如VME系统。

Tornado可提供一个直观的、可视化的、用户可扩充的开发环境,极大缩短了开发周期。同时,由于Tornado是一个完全的开放系统,使得集成第三方开发工具变得十分容易。

主机与目标机之间的通信是通过运行各自处理器上的进程来完成的,使主机上的开发工具和目标机的操作系统可以完全脱离相互连接的方式。

为了摆脱主机-目标机通信带宽和目标机资源的限制,Tornado将传统的目标机方的工具迁移到主机上,如shell、loader和符号表等。这样,系统不再需要额外的时间和带宽在主机和目标机之间交换信息,降低了对连接带宽的需求,也避免了目标机的资源(如内存)被工具或符号表大量占用,使得应用程序拥有更多的系统资源。同时这种迁移也使得各种主机开发工具独立于目标机存在,从而使同一主机平台上的工具可以用于所有的目标机系统。

作为一个应用软件开发环境,Tornado提供了友好的可视化开发界面、交叉编译环境、源码级调试工具、目标机命令解释器和目标机状态监视器等多种应用工具,为应用软件开发提供了一个高效而可靠的平台。

三、程序设计

我们选用的DSP开发工具是AD公司提供的VisualDSP。这是一个集成开发环境,支持对SHARC系列DSP芯片的开发。实时操作系统VxWorks的开发工具是WindRiver公司的Tornado集成开发工具。VisualDSP可以C语言或汇编语言编

写的DSP代码,最新版本的VisualDSP还支持C++。它还有1个优点,就是可以编译多片DSP的源代码,并产生下载文件,这就可以很方便地进行多DSP系统的软件模拟。

ADSP21160阵列的设计结构使它既可以构成单指令流多数据流(SIMD)的并行处理机,也可以构成多指令流单数据流(MISD)或多指令流多数据流(MIMD)的流水线处理机,视用户的要求而定。这两种并行方案的选择,简单来说就是选择分割数据流还是分割处理工序。SIMD方案的原理如图1所示。

以下介绍我们实验室承担的水声信号处理系统。本系统以VME总线为系统开发平台,前端调理模件、模数转换模件和前端控制模件等为VME插件,采用SHARC级DSP芯片阵列完成声纳信号实时处理,基于嵌入式实时操作系统VxWorks及X窗口系统的中央控制和显示。

图2是4片DSP的任务分配图。从前端采集来的信号,经波束形成和复解调,再经过窄带滤波后的信号分为两路,一路送去进行幅度检波,一路做频域处理。幅度检波就是对复信号求模,根据信号幅度判决有无目标存在。频域处理分两种情况:当发射信号为单频脉冲时,进行功率谱估计,然后根据多普勒频移估计目标速度;当发射信号为双曲调频信号时,进行相关处理。

声纳综合数据处理主要包括主动声纳信号处理和被动声纳信号处理。其中,主动声纳信号处理又根据发射信号的不同,分为非相干处理、相干处理、功率谱处理。声纳综合数据处理主要完成:目标自动检测、目标参数测定和动目标跟踪。

四、操作流水线

操作流水线是模块内数据计算与I/O的流水线,物理上表现为CPU与I/O端口的DMA之间的并行。在前端处理中由于数据率高,通信开销很大。以通信任务最为繁重的复解调和多普勒补偿模块为例,输入数据率为2Mw/s,输出数据率为4Mw/s,高速连接口LinkPort最高速率为100Mw/s,如果采用串行传输的话,通信时间就将占用60%以上的处理时间,计算时间显然严重不足。所以必须采用并行执行,流程图如图3所示。这也是一种异步流水线方式,每次传送和计算完成都须要设置标志以通知下一操作。

结束语

在VxWorks实时操作系统下,4片ADSP21160上的程序已经通过模拟输入和系统测试。采用SHARCDSP阵列能够很好地完成声纳信号实时处理,每一片DSP至少有10%的计算裕量,基本达到设计要求。

注:本文为网友上传,不代表本站观点,与本站立场无关。

上一篇:广告创意设计论文范文 下一篇:听力教学论文范文