<?xml version="1.0" encoding="utf-8" ?>



<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="zh_CN">
<title><![CDATA[wushenghua'职业博客]]></title>
<link rel="alternate" type="text/html" href="http://wushenghua.blog.bokee.net"/>
<modified>2009-03-12T12-38-40 CST</modified>
<tagline type="text/html" mode="escaped"><![CDATA[热衷于团队的管理及开发]]></tagline>
<generator url="http://www.bokee.net/" version="2.0">bokee.net</generator>
<copyright>Copyright (c) 2005,  wushenghua</copyright>


<entry>
<title>项目控管</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2728656.html"/>
<issued>2009-03-12T12-38-40 CST</issued> 
<created>2009-03-12T12-38-40 CST</created>
<modified>2009-03-12T12-38-40Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2728656</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>团队管理</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[整体思路是：首先对项目进行需求分析，有效的需求分析方法是需求分析人员、项目经理、研发经理和测试负责人分别阅读规范和原始需求，特别是需求分析负责人和项目经理，需要对需求进行深入的分析研究，然后开会讨论，消除对需求的误解和遗漏，讨论结束后编写功能列表说明文件和需求规格说明书并评审；对于规范中不明确的问题集中后由测试负责人（或需求分析负责人）直接和移动总规范负责人直接交流，确保不会因为规范的理解不正确导致项目实现和需求不一致。需求分析完成后，编写项目计划书和测试计划书；项目计划、测试计划编写前先开会讨论，由模块负责人估算工作量，能确定的问题和时间安排都在讨论中确定下来，然后根据工作量和工程需求制定项目计划和测试计划。研发在编码前需要进行概要设计和周详设计，研发工程师在编码前对系统的总体设计架构、各自所负责的模块有一个清晰的设计思路，经评审后确认模块的设计是否合理；研发在编码完成后在提交测试前必须进行单元测试和联调测试，提交给测试的软件是个可运行的产品。测试工作中，在项目设计或编码阶段，测试负责人对项目进行测试设计，指导测试实施有依可循，在编写案例的过程中会遇见非常多和流程和细节处理相关的问题，和研发一起讨论也有助于提前发现问题和完善代码；在测试实施阶段，测试人员记录所发现的问题，并协助研发及时解决，在测试过程中所遇见的问题，测试负责人进行记录和分析，在每个阶段完成后提交经分析后的测试阶段报告，在软件测试阶段报告中总结分析了测试过程中所发现的问题并对这些问题提出解决建议，在后续的研发和测试中进行改进和调整，确保项目能够按时保质发布。为了节约资源，计划或设计都是以邮件的形式进行评审；对于存在严整分歧的问题，组织一个小型会议进行讨论有效解决问题，小型讨论会是解决问题的一种有效途径，所有问题都能通过face-to-face的交流达到共识。软件的管理和版本管理则由Build Master负责，确保软件得到良好的控制。在整个项目实施的过程中，需要有一个PPQA对流程进行检查和监督。]]>
</content>
</entry>

<entry>
<title>一种机器人视觉系统模块的设计</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2698905.html"/>
<issued>2009-03-05T23-23-24 CST</issued> 
<created>2009-03-05T23-23-24 CST</created>
<modified>2009-03-05T23-23-24Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2698905</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>单片机及ARM</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[<strong>一、概述</strong>
<p>　　视觉技术是近几十年来发展的一门新兴技术。机器视觉可以代替人类的视觉从事检验、目标跟踪、机器人导向等方面的工作,特别是在那些需要重复、迅速的从图象中获取精确信息的场合。尽管在目前硬件和软件技术条件下,机器视觉功能还处于初级水平,但其潜在的应用价值引起了世界各国的高度重视,发达国家如美国、日本、德国、法国等都投入了大量的人力物力进行研究,近年来已经在机器视觉的某些方面获得了突破性的进展,机器视觉在车辆安全技术、自动化技术等应用中也越来越显示出其重要价值。本文根据最新的CMOS图像采集芯片设计了一种通用的视觉系统模块,经过编制不同的图像处理、模式识别算法程序本模块可以应用到足球机器人,无人车辆等各种场合。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>　<strong>　二、设计原理</strong></p>
<p>　　系统原理框图如图1所示。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.laogu.com/news/upload/img1/8824_4136_1.jpg" border="0" alt="" /></p>
<p>　　系统包含5个主要芯片：图像采集芯片OV7620,高速微处理器SH4,大规模可编程阵列FPGA,和串口通讯控制芯片MAX232。FPGA内部编程设立两个双口RAM,产生图像传感器所需的点频,行场同步等信号,以及控制双口RAM的存储时序。SH4负责对OV7620通过I2C进行配置,读取双口RAM的图像数据,进行处理,并通过串口实现图像资料的上传或控制步进电机等其他设备。</p>
<p>　<strong>　三、图像采集模块</strong></p>
<p>　　系统模块以CMOS图像传感器OV7620为核心,还包括一个聚光镜头和其他一些辅助元器件比如27MHZ的晶振,电阻电容等。</p>
<p>　　COMS图像传感器是近几年发展较快的新型图像传感器,由于采用了相同COMS技术,因此可以将像素阵列与外围支持电路集成在同一块芯片上,是一个完整的图像系统(Camera on Chip)。本系统采用的是Ommnvision公司推出的一块CMOS彩色图像传感器OV7620,分辨率为640x480。它能工作在逐行扫描方式下,也能工作在隔行扫描方式下。它不仅能输出彩色图像,也可用作黑白图像传感器。这块芯片支持的图像输出格式有很多种：1)YCrCb4:2:2 16 bit/8 bit格式;2)ZV端口输出格式;3)RGB原始数据16 bit/8 bit;4)CCIR601/CCIR656格式。其功能包括有对比度、亮度、饱和度、白平衡及自动曝光、同步信号位置及极性输出,帧速率和输出格式等都可以通过I2C 总线进行编程配置片内寄存器控制。</p>
<p>　　聚光镜头选用桑来斯公司生产的DSL103镜头。此镜头体积小,适合嵌入式视觉传感器的应用场合。</p>
<p>　　<strong>四、FPGA接口模块</strong></p>
<p>　　FPGA采用Xilinx公司的xc2s100,这款芯片内部集成了10000个逻辑门。接口程序采用VHDL(Very High Speed Integrated Circuit Hardware Description Language)书写。为了提高数据的传输速率,在xc2s100 内部分配了2个双口RAM缓冲区,其大小为127KB,每个双口RAM存储1行的图像数据。两组双口RAM进行奇偶行计数器进行切换。当一行存储完毕后,立即向SH4传生一个读取该行数据的中断的申请信号。FPGA内部结构如图2所示。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.laogu.com/news/upload/img1/8824_4136_2.jpg" border="0" alt="" /></p>
<p>　　这里主要问题在于FPGA内部的双口RAM读写操作共用同一数据总线和地址总线,当同时进行读写操作的时候就会产生时序问题导致写入或读出的数据错误。在这两个过程中为了防止数据和地址总线冲突,在FPGA内部设计了一个中央总线仲裁器。根据公共数据传输的先后顺序,中央仲裁器先接受图像传感器的总线请求,当图像存储到RAM之中后,中央仲裁器才响应单片机系统的读信号请求。</p>
<p>　　这里给出双口RAM的构造及读写控制程序：</p>
<p>&nbsp;&nbsp;&nbsp; Entity dual_port_ram is<br />　　Generic(d_width:integer:=2;<br />　　Mem_depth:integer:=8);<br />　　Port(clk:in STD_LOGIC;<br />　　CS:in STD_LOGIC;<br />　　We: in STD_LOGIC;<br />　　Indata: in STD_LOGIC_VECTOR(7 downto 0);<br />　　Outdata:out STD_LOGIC_VECTOR(7 downto 0);<br />　　Raddr,waddr:in STD_LOGIC_VECTOR(1 downto 0));<br />　　End dual_port_ram ;<br />　　Architecture data of dual_port_ram is<br />　　Type mem_type is array(3 downto 0) of<br />　　STD_LOGIC_VECTOR(7 downto 0);<br />　　Signal mem:mem_type;<br />　　Begin<br />　　Process(clk,we,waddr)<br />　　Begin <br />　　If(rising_edge(clk))then<br />　　If(we=''1'')then<br />　　Mem(conv_integer(waddr))&lt;=indata;<br />　　End if;<br />　　End process;<br />　　Process(raddr,clk)<br />　　Begin<br />　　If(rising_edge(clk))then<br />　　If(CS=''0'')then<br />　　Outdata&lt;=mem(conv_integer(raddr));<br />　　End if;<br />　　End if;<br />　　End process;<br />　　End data;</p>
<p>　　在MAX Plux II中的波形仿真图如图3所示：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.laogu.com/news/upload/img1/8824_4136_3.jpg" border="0" alt="" /></p>
<p><strong>　　五、单片机模块</strong></p>
<p>　　本系统采用SH4芯片作为处理器：SH4单片机是日立公司推出的一款低功耗、高性能,RISC(精简指令集计算机)结构的全32位单片机。其处理速度可高达60M IPS一100MIPS,能在2.25v电压下工作,功耗仅400MW片内集成有32位乘法器、4路5KB CACHE、存取器管理单元MMU和其它一些通用接口及时钟电路等。日立公司为SH4系列单片机提供了c及c++语言集成编译工具HIM(Hitachi IntegrationManag)。利用它可以将日立C、C++格式的源程序编译链接为汇编程序或目标机器码.</p>
<p>　　图像传感器芯片OV7620具有灵活的可编程功能,可通过I2C总线对其进行编程来设置各功能寄存器。由于单片机没有内部硬件I2C总线接口,所以只有采用软件模拟的方法实现I2C总线接口功能。取作为SH4的两个I/O引脚作为I2C总线的SCL和SDA总线器件接口,示例程序如下：</p>
<p>　　unsigned char rdiic (unsigned char addr);读取数据<br />　　void iic_init();初始化<br />　　void iic_start();起始信号<br />　　void iic_stop ();结束信号<br />　　void delay4u();延时</p>
<p>　　举例</p>
<p>iic_init();/*初始化总线寄存器*/<br />　　rstcamera ();/*复位OV7620内部寄存器*/<br />　　wriic (0x11,0x15); /*设置OV7620内部寄存器0x11 的值为0x15*/<br />　　delay4ux6(); <br />　　wriic (0x28,0x60);&nbsp;&nbsp; /*设置OV7620内部寄存器0x28 的值为0x60 */<br />　　delay4ux6();</p>
<p>　　本模块采用了人类可以识别的ASCII串口通讯协议从而可以通过上位机方便的和人进行交互通信。当连接到一台计算机上,本模块可通过串口上传整幅原始图像数据,用来进行系统调试或更高级得图像处理。</p>
<p>　　<strong>六、结束语</strong></p>
<p>　　本文采用大规模集成电路芯片组成了一个简洁,低价的图像采集处理系统。本系统经过编制不同的图像处理算法程序可以应用在足球机器人,农产品检查机器人等不同场合。但其也有些不足,比如SH4处理器,运算速度不够快,只能运行一些相对简单的算法,不支持以太网接口等。下一步工作计划采用双CPU结构,其中DSP专职处理图像数据,ARM负责网络通信,以及对机器人行为的控制等。这样就可将机器人的&ldquo;眼睛&rdquo;通过以太网连接成一个复杂的协同处理的视觉系统,以适应更为复杂的场景的需要。</p>]]>
</content>
</entry>

<entry>
<title>DSP芯片的选择</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678596.html"/>
<issued>2009-03-02T12-17-28 CST</issued> 
<created>2009-03-02T12-17-28 CST</created>
<modified>2009-03-02T12-17-28Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678596</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>单片机及ARM</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用系统，选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片是非常重要的一个环节。只有选定了</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片，才能进一步设计其外围电路及系统的其他电路。总的来说，</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的选择应根据实际的应用系统需要而确定。不同的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用系统由于应用场合、应用目的等不尽相同，对</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的选择也是不同的。一般来说，选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片时应考虑到如下诸多因素。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的运算速度。运算速度是</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的一个最重要的性能指标，也是选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片时所需要考虑的一个主要因素。</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的运算速度可以用以下几种性能指标来衡量：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(1) </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指令周期：即执行一条指令所需的时间，通常以</span><span lang="EN-US"><font face="Times New Roman">ns</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（纳秒）为单位。如</span><span lang="EN-US"><font face="Times New Roman">TMS320LC549-80</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在主频为</span><span lang="EN-US"><font face="Times New Roman">80MHz</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时的指令周期为</span><span lang="EN-US"><font face="Times New Roman">12.5ns</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(2) MAC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时间：即一次乘法加上一次加法的时间。大部分</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片可在一个指令周期内完成一次乘法和加法操作，如</span><span lang="EN-US"><font face="Times New Roman">TMS320LC549-80</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">MAC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时间就是</span><span lang="EN-US"><font face="Times New Roman">12.5ns</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(3) FFT</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行时间：即运行一个</span><span lang="EN-US"><font face="Times New Roman">N</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点</span><span lang="EN-US"><font face="Times New Roman">FFT</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序所需的时间。由于</span><span lang="EN-US"><font face="Times New Roman">FFT</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运算涉及的运算在数字信号处理中很有代表性，因此</span><span lang="EN-US"><font face="Times New Roman">FFT</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运算时间常作为衡量</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片运算能力的一个指标；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(4) MIPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：即每秒执行百万条指令。如</span><span lang="EN-US"><font face="Times New Roman">TMS320LC549-80</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的处理能力为</span><span lang="EN-US"><font face="Times New Roman">80 MIPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，即每秒可执行八千万条指令；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: 39.2pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(5)<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：即每秒执行百万次操作。如</span><span lang="EN-US"><font face="Times New Roman">TMS320C40</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运算能力为</span><span lang="EN-US"><font face="Times New Roman">275 MOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(6) MFLOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：即每秒执行百万次浮点操作。如</span><span lang="EN-US"><font face="Times New Roman">TMS320C31</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在主频为</span><span lang="EN-US"><font face="Times New Roman">40MHz</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时的处理能力为</span><span lang="EN-US"><font face="Times New Roman">40 MFLOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: 39.9pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">(7)<span style="mso-tab-count: 1">&nbsp; </span>BOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：即每秒执行十亿次操作。如</span><span lang="EN-US"><font face="Times New Roman">TMS320C80</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的处理能力为</span><span lang="EN-US"><font face="Times New Roman">2 BOPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的价格。</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的价格也是选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片所需考虑的一个重要因素。如果采用价格昂贵的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片，即使性能再高，其应用范围肯定会受到一定的限制，尤其是民用产品。因此根据实际系统的应用情况，需确定一个价格适中的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片。当然，由于</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片发展迅速，</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的价格往往下降较快，因此在开发阶段选用某种价格稍贵的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片，等到系统开发完毕，其价格可能已经下降一半甚至更多。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的硬件资源。不同的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片所提供的硬件资源是不相同的，如片内</span><span lang="EN-US"><font face="Times New Roman">RAM</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">ROM</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数量，外部可扩展的程序和数据空间，总线接口，</span><span lang="EN-US"><font face="Times New Roman">I/O</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口等。即使是同一系列的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片（如</span><span lang="EN-US"><font face="Times New Roman">TI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">TMS320C54X</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列），系列中不同</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片也具有不同的内部硬件资源，可以适应不同的需要。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的运算精度。一般的定点</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的字长为</span><span lang="EN-US"><font face="Times New Roman">16</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，如</span><span lang="EN-US"><font face="Times New Roman">TMS320</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列。但有的公司的定点芯片为</span><span lang="EN-US"><font face="Times New Roman">24</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，如</span><span lang="EN-US"><font face="Times New Roman">Motorola</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司的</span><span lang="EN-US"><font face="Times New Roman">MC56001</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等。浮点芯片的字长一般为</span><span lang="EN-US"><font face="Times New Roman">32</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，累加器为</span><span lang="EN-US"><font face="Times New Roman">40</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">5</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的开发工具。在</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统的开发过程中，开发工具是必不可少的。如果没有开发工具的支持，要想开发一个复杂的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统几乎是不可能的。如果有功能强大的开发工具的支持，如</span><span lang="EN-US"><font face="Times New Roman">C</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言支持，则开发的时间就会大大缩短。所以，在选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的同时必须注意其开发工具的支持情况，包括软件和硬件的开发工具。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">6</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的功耗。在某些</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用场合，功耗也是一个需要特别注意的问题。如便携式的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设备、手持设备、野外应用的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设备等都对功耗有特殊的要求。目前，</span><span lang="EN-US"><font face="Times New Roman">3.3V</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">供电的低功耗高速</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片已大量使用。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">7</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．其他。除了上述因素外，选择</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片还应考虑到封装的形式、质量标准、供货情况、生命周期等。有的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片可能有</span><span lang="EN-US"><font face="Times New Roman">DIP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">PGA</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">PLCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">PQFP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等多种封装形式。有些</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统可能最终要求的是工业级或军用级标准，在选择时就需要注意到所选的芯片是否有工业级或军用级的同类产品。如果所设计的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统不仅仅是一个实验系统，而是需要批量生产并可能有几年甚至十几年的生命周期，那么需要考虑所选的</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片供货情况如何，是否也有同样甚至更长的生命周期等。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在上述诸多因素中，一般而言，定点</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的价格较便宜，功耗较低，但运算精度稍低。而浮点</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片的优点是运算精度高，且</span><span lang="EN-US"><font face="Times New Roman">C</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言编程调试方便，但价格稍贵，功耗也较大。例如</span><span lang="EN-US"><font face="Times New Roman">TI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">TMS320C2XX/C54X</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列属于定点</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片，低功耗和低成本是其主要的特点。而</span><span lang="EN-US"><font face="Times New Roman">TMS320C3X/C4X/C67X</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属于浮点</span><span lang="EN-US"><font face="Times New Roman">DSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">芯片，运算精度高，用</span><span lang="EN-US"><font face="Times New Roman">C</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言编程方便，开发周期短，但同时其价格和功耗也相对较高。</span></font></p>
<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">应用系统的运算量是确定选用处理能力为多大的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">芯片的基础。运算量小则可以选用处理能力不是很强的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">芯片，从而可以降低系统成本。相反，运算量大的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">系统则必须选用处理能力强的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">芯片，如果</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">芯片的处理能力达不到系统要求，则必须用多个</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: &quot;Times New Roman&quot;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">DSP</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">芯片并行处理。</span>]]>
</content>
</entry>

<entry>
<title>CORBA IDL部份语法</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678550.html"/>
<issued>2009-03-02T12-03-38 CST</issued> 
<created>2009-03-02T12-03-38 CST</created>
<modified>2009-03-02T12-03-38Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678550</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[<p><font face="宋体"><span lang="EN-US">定义变量或结构体、方法名称时不要使用&quot;_&quot;打头。</span></font></p>
<p><font face="宋体"><span lang="EN-US">octet 8</span>位<span lang="EN-US">8</span>位数保证传递过程中不变（<span lang="EN-US">char</span>不是）<span lang="EN-US"> </span></font></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; TEXT-INDENT: 7pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">提供两个模板类型：<span lang="EN-US">sequence</span>（序列）和<span lang="EN-US">string</span>（字符串）。象数组一样，要用<span lang="EN-US">typedef</span>指定<span lang="EN-US">sequence</span>和<span lang="EN-US">string</span>类型的名字 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">一个序列是一个可变长度成员清单，成员可以为任何<span lang="EN-US">IDL</span>类型。它象一维数组，但长度是不定的。它可以是有界的也可以是无界的，要看序列类型定义时指定的最大长度。例如，下面定义一个有界序列类型： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">typedef sequence UpToTenByte</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">； </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">这个类型的实例是一个长度小于等<span lang="EN-US">10</span>的字节序列。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">下一行定义了一个无界限的字节序列类型： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">typedef sequence <octet></octet>SomeBytes; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">这个类型的实例可以是任意长度的字节序列。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">string</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">是一个字符序列。象序列一样，它可以是有界的： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">typedef string&lt;15&gt; Moniker; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">或无界的： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">typedef string Description; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">当定义一个有界字符串类型时，记住任何<span lang="EN-US">null</span>结束符不算在串长度之内。使用<span lang="EN-US">string</span>面不要用字符数组。字符数组中未初始化的成员在翻译过程中可能引起问题。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">结构类型 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">文件也可以定义结构类型，用关键字<span lang="EN-US">struct, union</span>和<span lang="EN-US">enum</span>。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">下边有一个结构类型定义的例子： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">struct StructName { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">char charMember; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">unsigned short AnotherMember; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">注意：这里没有<span lang="EN-US">typedef</span>。对<span lang="EN-US">struct</span>用<span lang="EN-US">typedef</span>是不好的习惯，因为它会定义两个类型名字。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">enum</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">（枚举）类型定义示例： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">enum Pet {cat, dog, fish, bird, rat, horse, gerbil}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">中的<span lang="EN-US">union</span>必须是可区分（<span lang="EN-US">discriminated</span>）的。即，用一个标记字段<span lang="EN-US">(tag field)</span>说明联合的哪些成员是当前被赋值的： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">union Reference switch (short) { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">case 1 : { Title: string; Author: string; } </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">case 2: URL: string; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">case 3: TopicID: long; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><a name="常量"></a><u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">常量</span></u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体"> </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">文件可以定义常量，这些常量可用于界面和类型的定义。用关键字<span lang="EN-US">const</span>定义常量： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">const unsigned long LengthOfNameString = 15; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">文件可以定义类型为<span lang="EN-US">long, unsigned long, unsigned short,char boolean,float,double,string</span>的常量。注意，<span lang="EN-US">IDL</span>不支持<span lang="EN-US">octet</span>型的常量。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">整数常量可以用<span lang="EN-US">10</span>、<span lang="EN-US">8</span>、<span lang="EN-US">16</span>进制形式说明。<a name="界面"></a>界面 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">文件中的界面描述了<span lang="EN-US">CORBA</span>对象提供的功能。它封装客户使用界面所需的全部信息。每个界面对应<span lang="EN-US">CORBA</span>服务器上的一个类，其定义近似于类的定义： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example1 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">readonly attribute string Name; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">attribute long Value; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">long AddToValue(in long Summand, out long Result); </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">界面用关键字<span lang="EN-US">interface</span>定义。在界面定义内部是一个</span><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体"><a href="http://www.lslnet.com/linux/docs/linux-2847.htm#属性"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; TEXT-DECORATION: none"><span lang="EN-US">属性</span></span></a></span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">和</span><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体"><a href="http://www.lslnet.com/linux/docs/linux-2847.htm#方法"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; TEXT-DECORATION: none"><span lang="EN-US">方法</span></span></a></span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">的清单。所有的属性和方法都是公开的（<span lang="EN-US">public</span>）。这里没有私有<span lang="EN-US">(private)</span>或保护<span lang="EN-US">(protected)</span>的概念，因为这些应该在实现部分处理而不应在对象的公开界面里。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><a name="属性"></a><u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">属性</span></u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体"> </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">界面没有成员变量。属性（<span lang="EN-US">Attributes</span>）象<span lang="EN-US">Cbuilder</span>的<span lang="EN-US">property</span>（这种说法并不暗示值的存储方法相同）而不象成员变量。用关键字<span lang="EN-US">attribute</span>定义。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">如果不允许客户写属性，定义时要加<span lang="EN-US">readonly</span>前缀。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">Readonly attribute float Balance; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">注意：尽管<span lang="EN-US">attribute</span>的行为表现得象<span lang="EN-US">properties</span>，但它们并不是用<span lang="EN-US">Cbuilder</span>的<span lang="EN-US">properties</span>（不可移植）实现的。相反，属性（<span lang="EN-US">attributes</span>）被编译成与属性同名的<span lang="EN-US">getter</span>（及可选的<span lang="EN-US">setter</span>）方法。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><a name="方法"></a><u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">方法</span></u><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体"> </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">方法定义必须包括返回值类型。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">另外，它们必须在每个参数中用关键字<span lang="EN-US">in,out,inout</span>提供用法说明，每个参数都必须命名。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">通常，方法调用在服务器对象处理调用时是阻塞的<span lang="EN-US">(blocked)</span>。然而，<span lang="EN-US">IDL</span>语法允许一个方法申明为<span lang="EN-US">oneway</span>，如果调用者确实不需要等待响应的话。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">Oneway void SendInformation(long Value); </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">重复的方法名是非法的，因为<span lang="EN-US">CORBA</span>是可用于支持方法重载的编程语言的。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">注释： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">界面中可以加注释，用和<span lang="EN-US">C++</span>相同的<span lang="EN-US">//</span>。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">// this is a comment </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">类型定义 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">界面可以包括类型定义： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example2 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">struct Example2Struct { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">string Name; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">long Value; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">// </span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">&hellip;其它定义部分 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">在同一界面中的定义可以用名字<span lang="EN-US">(Example2Struct)</span>引用这些类型，但该界面外的定义必须使用范围限定符（<span lang="EN-US">Example2::Example2Struct</span>）。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">异常 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">除了<span lang="EN-US">attributes, methods, types, </span>界面还可以包括用户定义异常处理： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface ExceptionExample { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">exception ValueOutOfBounds { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">long value; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">void SetValue(in long Value) </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">raises (ValueOutOfBounds); </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">} </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">} </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">SetValue</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">方法指出它可能抛出<span lang="EN-US">ValueOutOfBounds</span>异常。这个例子显示一个成员的一个异常，它可以帮助调试。然而，界面也可以包括无成员包括的花括号<span lang="EN-US">{}</span>里的异常。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">上下文（<span lang="EN-US">Contexts</span>） </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">方法可以附带<span lang="EN-US">context</span>子句。客户可以维护一个或多个<span lang="EN-US">CORBA</span>上下文对象，它提供标识符（<span lang="EN-US">indentifier</span>）到字符串<span lang="EN-US">(string)</span>值的映射。一个<span lang="EN-US">IDL</span>方法可以用关键字<span lang="EN-US">context</span>申明对特定标识符的映射必须提供给它的客户： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface ContextExample { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">long SomeMethod(in long Value, in char Letter) </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">raises (/* */) </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">context(</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">&ldquo;<span lang="EN-US">value1<span lang="EN-US"><span lang="EN-US">&rdquo;</span></span>, </span>&ldquo;<span lang="EN-US">value2<span lang="EN-US"><span lang="EN-US">&rdquo;</span></span>); </span></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">ContextExample</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">的调用者必须传送一个<span lang="EN-US">context</span>对象作为参数。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">模块（<span lang="EN-US">Modules</span>） </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">IDL</span><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">文件将一些定义结合成模块。模块的概念和名字空间（<span lang="EN-US">namespace</span>）是一样的：它允许定义组合成逻辑单元并预防命名空间冲突。一个模块定义一个名字空间，就象这样： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">module SyntaxExamples { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example1 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">// definitions here </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example2 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">// definitions here </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">模块外的定义访问模块内的定义必须加范围界定符（<span lang="EN-US">SyntaxExamples::Example1</span>）。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">继承<span lang="EN-US">(Inheritance) </span></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">正如<span lang="EN-US">C++</span>类，<span lang="EN-US">IDL</span>界面可以作为其它类的后代而建立。子代界面继承祖先界面的属性和方法： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Ancestor{ </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">//definitions here </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Desendant:Ancestor { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">// more definitions here </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">注意：因为没有界面相关的实现部分，衍生界面重载相应类方法时不得再在成员函数中列出。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">界面支持多继承，但所有祖先界面都不能有包含相同名字的定义。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">所有的<span lang="EN-US">IDL</span>界面都是隐含继承了<span lang="EN-US">CORBA</span>界面<span lang="EN-US">Object</span>。这意味着一个类型为<span lang="EN-US">Object</span>的参数可以接受任何<span lang="EN-US">CORBA</span>对象。 </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">提前引用（<span lang="EN-US">Forward references</span>） </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">如果两个界面互相引用，<span lang="EN-US">IDL</span>文件必须一个包含对其中一个的提前引用，即一个界面可以引用<span lang="EN-US">IDL</span>文件中其后部分的定义。如下所示： </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example2; // forwar reference </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example1 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">//definitions </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">readonly attribute Example2 TheOtherOne; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">interface Example2 { </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">//definitions </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">Example1 ReturnTheOtherOne(); </span></p>
<p class="MsoNormal" style="MARGIN-TOP: 4.5pt; LINE-HEIGHT: 22pt; TEXT-ALIGN: left" align="left"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 宋体">}; </span></p>]]>
</content>
</entry>

<entry>
<title>开发工作步骤及内容</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678502.html"/>
<issued>2009-03-02T11-55-35 CST</issued> 
<created>2009-03-02T11-55-35 CST</created>
<modified>2009-03-02T11-55-35Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678502</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>团队管理</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">一、新项目</span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">开发</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">在进行开发时，开发部确定一名项目负责人协调和监督项目整体开发。具体的项目开发如下：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">1</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、需求分析</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">项目负责人与市场部等相关部门的有关人员或客户讨论，确定需求。包括以下几方面：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">A)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">需求与规格说明</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">项目负责人向客户或市场部了解需求。需求包括功能需求和非功能需求。非功能包括性能、价格、系统尺寸重量以及功耗等。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">B)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">确认需求</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">了解需求之后，对开发的进行可行性分析与风险评估。与客户或市场部确认需求。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">C)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">需求说明</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">完成以下两个步骤后，由项目负责人编写《需求说明书》。需求说明书必须包括：项目名称、目的、功能、性能等。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">D)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">需求的内部一致性</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">在写完需求分析以后，对其内部一致进行检查。检查是否有遗忘或不切实际的需求。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">2</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、体系结构设计</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">由项目负责人组建项目开发组进行讨论，提出《体系结构说明书》。《体系结构说明书》内容如下：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l0 level1 lfo1; tab-stops: 0cm"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: StarSymbol">u<span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">将系统分解成模块。一个系统的开发可能包括：硬件开发、软件开发和结构设计。不同部分可由不同的人完成，也可能由项目负责人独立完成。项目负责人主要职责是协调监督开发组成员的开发工作。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l0 level1 lfo1; tab-stops: 0cm"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: StarSymbol">u<span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">规定各模块设计以及它们之间的衔接标准。一方面是软件、硬件和结构之间的衔接。如结构设计中机柜或机壳的大小、固定点等对印刷电路板的影响，硬件环境对软件开发的影响。另一方面是软件、硬件或结构自身各部分的衔接。对于硬件开发，规定芯片、总线以及电路板等。对于软件开发，规定软件架构、数据库、开发语言、界面、通讯协议等。对于结构设计，规定机柜或机壳的大小、固定点、工艺性、接插件等。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l0 level1 lfo1; tab-stops: 0cm"><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: StarSymbol">u<span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">规定需要编写具体的设计文档的类型，要求文档能作为开发组成员之间沟通的方式和其他人接手开发工作的资料。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">3</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、开发进度规划</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">对开发项目进行阶段分解和人员安排，提交《开发进度安排表》。项目负责人规划、监督、控制和汇报项目开发进度。根据《开发进度安排表》把各个模块的开发任务分配给项目组成员，并分发《开发任务表》给项目组成员。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">4</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、设计硬件构件和软件构件</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">硬件设计。包括原理图设计和</span><span lang="EN-US"><font face="宋体, MS Song">PCB</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">图绘制。硬件设计需结合结构设计。在原理图设计过程中，要进行必要试验。完成原理图设计后，通过会审才进入</span><span lang="EN-US"><font face="宋体, MS Song">PCB</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">图绘制。完成</span><span lang="EN-US"><font face="宋体, MS Song">PCB</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">绘制后，通过会审后才发往厂家制板。厂家寄回电路板后进行焊接，在测试可用后交软件开发人员。要求提交开发软件名称、原理图、</span><span lang="EN-US"><font face="宋体, MS Song">PCB</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">图、接线图、元器件清单、性能指标等。如果有程序编写工作，还要提交程序结构说明和流程图。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">软件设计。不仅要编写代码，而且还要有必要的详细设计文档、开发环境说明。对于程序编写，要有主要的数据结构说明、程序结构说明、接口说明等。对于数据库设计，要有数据库设计说明。对于界面开发，要有界面设计说明、使用说明。在完成设计后，会审通过以后才编写代码。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">结构设计。设计系统的盒子、机柜等。设计完成通过会审后，联系并监督合作厂家进行制作。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">每个人对自已开发工作进行自查、自测后才提交工作成果。如果开发与使用有关的部分，要写使用说明。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span></font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">在开发过程中，如果发现前期的需求分析、体系结构设计或进度安排需要修改或补充，要提交书面的修改说明或补充说明。可能以单独的修改说明或补充说明形式，也可能把修改或补充内容直接加入原来的文档中。如果把修改或补充内容直接加入原来的文档中，文档要注明版本或最后修改时间。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">6</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、系统集成</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">将软硬件构件组装在一起，形成一个能运转的系统。项目负责人将开发组成员提交的使用说明等汇总成系统使用说明书。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">7</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、系统测试</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">测试完成后，要提交测试报告。测试报告要包括测试项目、测试数据、测试手段、测试结果等。测试按测试人的不同可分成：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l1 level1 lfo2; tab-stops: 0cm"><span lang="EN-US"><font face="宋体, MS Song" size="3">A)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">由开发者本人对自已的开发工作进行测试。测试是否有错误，是否满足本模块的功能要求。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l1 level1 lfo2; tab-stops: 0cm"><span lang="EN-US"><font face="宋体, MS Song" size="3">B)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">项目组内或部门内测试。包括对其它开发人员开发的模块进行测试和进行整体测试。整体测试检查是否有错误，是否满足需求说明书中要求。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; mso-list: l1 level1 lfo2; tab-stops: 0cm"><span lang="EN-US"><font face="宋体, MS Song" size="3">C)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">支持部测试。由支持部进行测试，查找问题，确认是否可投入生产、进行试用。主要进行功能测试和稳定性测试。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">8</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、补齐资料</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">开发完毕后，补齐资料。如：图纸、安装程序、镜像文件、使用说明、器件选型、元件选择原则等。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">9</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、系统试用</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="宋体, MS Song">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">将与生产维护有关资料交支持部，比如：生产图纸、安装程序、镜像文件器件选型、元件选择原则等。指导支持部进行生产维护。把系统安装在现场实际使用，支持部记录实际使用情况。记录内容包括：系统安装时间、版本、系统启动时间、重启时间、参数设置、出现问题及解决方法等。支持部将试用阶段中遇到问题及解决办法汇总成《常见问题及解决方法》。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">10</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">、移交并签字确认</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">A)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">将有关文档资料、图纸和源程序等开发资料交公司存档。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="宋体, MS Song">B)</font></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">生产图纸、安装程序、镜像文件、使用说明、常见问题、器件选型、元件选择原则等与生产维护有关资料交支持部。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font face="宋体, MS Song"><font size="3"><span lang="EN-US">&nbsp;</span><span lang="EN-US"><o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">二、产品或项目的</span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">改进</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">1、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">填写改进表格</span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">2、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">安排相关人员进行改进。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US" style="mso-fareast-font-family: 宋体"><font face="宋体, MS Song" size="3">3、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">提出修改方案</span><span lang="EN-US" style="mso-fareast-font-family: 宋体"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">4、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">进行产品或项目的</span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">改进</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">5、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">在自测的基础上，交支持部进行测试。测试内容包括：改进功能测试、原有功能是否还能正常、稳定性测试。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">6、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size="3"><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'">修改相关的技术资料。并且注明版本或最后修改时间。</span><span lang="EN-US"><o:p></o:p></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: 0cm; mso-list: l5 level1 lfo6; tab-stops: list 0cm left 35.45pt"><span lang="EN-US"><font face="宋体, MS Song" size="3">7、</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Bitstream Vera Serif'; mso-hansi-font-family: 'Bitstream Vera Serif'"><font size="3">反馈给改进提出者。将修改的资料进行移交并签字确认。</font></span><span lang="EN-US"><o:p></o:p></span></p>]]>
</content>
</entry>

<entry>
<title>图像旋转与缩放</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678430.html"/>
<issued>2009-03-02T11-43-15 CST</issued> 
<created>2009-03-02T11-43-15 CST</created>
<modified>2009-03-02T11-43-15Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678430</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[#include &quot;cv.h&quot;<br />#include &quot;highgui.h&quot;<br />#include &quot;math.h&quot;<br />int main (int argc, char **argv)<br />{<br />&nbsp; IplImage *src = 0;<br />&nbsp; IplImage *dst = 0;<br /><br />&nbsp; /* the first command line parameter must be image file name */<br />&nbsp; if ((argc == 2) &amp;&amp; (src = cvLoadImage (argv[1], -1)) != 0)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int delta = 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int angle = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int opt = 0;		// 1： 旋转加缩放<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0:&nbsp; 仅仅旋转<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double factor;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dst = cvCloneImage (src);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvNamedWindow (&quot;src&quot;, 1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvShowImage (&quot;src&quot;, src);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (;;)<br />	{<br />	&nbsp; float m[6];<br />	&nbsp; // Matrix m looks like:<br />	&nbsp; //<br />	&nbsp; // [ m0&nbsp; m1&nbsp; m2 ] ===&gt;&nbsp; [ A11&nbsp; A12&nbsp;&nbsp; b1 ]<br />	&nbsp; // [ m3&nbsp; m4&nbsp; m5 ]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ A21&nbsp; A22&nbsp;&nbsp; b2 ]<br />	&nbsp; //<br />	&nbsp; CvMat M = cvMat (2, 3, CV_32F, m);<br />	&nbsp; int w = src-&gt;width;<br />	&nbsp; int h = src-&gt;height;<br />	&nbsp; if (opt)		// 旋转加缩放<br />	&nbsp;&nbsp;&nbsp; factor = (cos (angle * CV_PI / 180.) + 1.0) * 2;<br />	&nbsp; else			//&nbsp; 仅仅旋转<br />	&nbsp;&nbsp;&nbsp; factor = 1;<br />	&nbsp; m[0] = (float) (factor * cos (-angle * 2 * CV_PI / 180.));<br />	&nbsp; m[1] = (float) (factor * sin (-angle * 2 * CV_PI / 180.));<br />	&nbsp; m[3] = -m[1];<br />	&nbsp; m[4] = m[0];<br />	&nbsp; // 将旋转中心移至图像中间<br />	&nbsp; m[2] = w * 0.5f;<br />	&nbsp; m[5] = h * 0.5f;<br />	&nbsp; //&nbsp; dst(x,y) = A * src(x,y) + b<br />	&nbsp; cvZero (dst);<br />	&nbsp; cvGetQuadrangleSubPix (src, dst, &amp;M);<br />	&nbsp; cvNamedWindow (&quot;dst&quot;, 1);<br />	&nbsp; cvShowImage (&quot;dst&quot;, dst);<br />	&nbsp; if (cvWaitKey (1) == 27)	//ESC<br />	&nbsp;&nbsp;&nbsp; break;<br />	&nbsp; angle = (int) (angle + delta) % 360;<br />	}			// for-loop<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; return 0;<br />}<br /><br />]]>
</content>
</entry>

<entry>
<title>读视频文件和运动问题检测</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678427.html"/>
<issued>2009-03-02T11-42-44 CST</issued> 
<created>2009-03-02T11-42-44 CST</created>
<modified>2009-03-02T11-42-44Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678427</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[#include &lt;stdio.h&gt;<br /><br />#include &lt;cv.h&gt;<br />#include &lt;cxcore.h&gt;<br />#include &lt;highgui.h&gt;<br /><br />int main( int argc, char** argv )<br />{<br />&nbsp; //声明IplImage指针<br />&nbsp; IplImage* pFrame = NULL; <br />&nbsp; IplImage* pFrImg = NULL;<br />&nbsp; IplImage* pBkImg = NULL;<br /><br />&nbsp; CvMat* pFrameMat = NULL;<br />&nbsp; CvMat* pFrMat = NULL;<br />&nbsp; CvMat* pBkMat = NULL;<br />&nbsp; <br />&nbsp; CvCapture* pCapture = NULL;<br />&nbsp; <br />&nbsp; int nFrmNum = 0;<br /><br />&nbsp; //创建窗口<br />&nbsp; cvNamedWindow(&quot;video&quot;, 1);<br />&nbsp; cvNamedWindow(&quot;background&quot;,1);<br />&nbsp; cvNamedWindow(&quot;foreground&quot;,1);<br />&nbsp; //使窗口有序排列<br />&nbsp; cvMoveWindow(&quot;video&quot;, 30, 0);<br />&nbsp; cvMoveWindow(&quot;background&quot;, 360, 0);<br />&nbsp; cvMoveWindow(&quot;foreground&quot;, 690, 0);<br /><br /><br /><br />&nbsp; if( argc &gt; 2 )<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;Usage: bkgrd [video_file_name]\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp; //打开摄像头<br />&nbsp; if (argc ==1)<br />&nbsp;&nbsp;&nbsp; if( !(pCapture = cvCaptureFromCAM(-1)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />	fprintf(stderr, &quot;Can not open camera.\n&quot;);<br />	return -2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp; //打开视频文件<br />&nbsp; if(argc == 2)<br />&nbsp;&nbsp;&nbsp; if( !(pCapture = cvCaptureFromFile(argv[1])))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />	fprintf(stderr, &quot;Can not open video file %s\n&quot;, argv[1]);<br />	return -2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp; <br />&nbsp; //逐帧读取视频<br />&nbsp; while(pFrame = cvQueryFrame( pCapture ))<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nFrmNum++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果是第一帧，需要申请内存，并初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nFrmNum == 1)<br />	{<br />	&nbsp; pBkImg = cvCreateImage(cvSize(pFrame-&gt;width, pFrame-&gt;height),&nbsp; IPL_DEPTH_8U,1);<br />	&nbsp; pFrImg = cvCreateImage(cvSize(pFrame-&gt;width, pFrame-&gt;height),&nbsp; IPL_DEPTH_8U,1);<br /><br />	&nbsp; pBkMat = cvCreateMat(pFrame-&gt;height, pFrame-&gt;width, CV_32FC1);<br />	&nbsp; pFrMat = cvCreateMat(pFrame-&gt;height, pFrame-&gt;width, CV_32FC1);<br />	&nbsp; pFrameMat = cvCreateMat(pFrame-&gt;height, pFrame-&gt;width, CV_32FC1);<br /><br />	&nbsp; //转化成单通道图像再处理<br />	&nbsp; cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);<br />	&nbsp; cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);<br /><br />	&nbsp; cvConvert(pFrImg, pFrameMat);<br />	&nbsp; cvConvert(pFrImg, pFrMat);<br />	&nbsp; cvConvert(pFrImg, pBkMat);<br />	}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />	{<br />	&nbsp; cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);<br />	&nbsp; cvConvert(pFrImg, pFrameMat);<br />	&nbsp; //高斯滤波先，以平滑图像<br />	&nbsp; //cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);<br />	&nbsp; <br />	&nbsp; //当前帧跟背景图相减<br />	&nbsp; cvAbsDiff(pFrameMat, pBkMat, pFrMat);<br /><br />	&nbsp; //二值化前景图<br />	&nbsp; cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);<br /><br />	&nbsp; //进行形态学滤波，去掉噪音&nbsp; <br />	&nbsp; //cvErode(pFrImg, pFrImg, 0, 1);<br />	&nbsp; //cvDilate(pFrImg, pFrImg, 0, 1);<br /><br />	&nbsp; //更新背景<br />	&nbsp; cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);<br />	&nbsp; //将背景转化为图像格式，用以显示<br />	&nbsp; cvConvert(pBkMat, pBkImg);<br /><br />	&nbsp; //显示图像<br />	&nbsp; cvShowImage(&quot;video&quot;, pFrame);<br />	&nbsp; cvShowImage(&quot;background&quot;, pBkImg);<br />	&nbsp; cvShowImage(&quot;foreground&quot;, pFrImg);<br /><br />	&nbsp; //如果有按键事件，则跳出循环<br />	&nbsp; //此等待也为cvShowImage函数提供时间完成显示<br />	&nbsp; //等待时间可以根据CPU速度调整<br />	&nbsp; if( cvWaitKey(2) &gt;= 0 )<br />	&nbsp;&nbsp;&nbsp; break;<br /><br /><br />	}<br /><br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; <br /><br /><br />&nbsp; //销毁窗口<br />&nbsp; cvDestroyWindow(&quot;video&quot;);<br />&nbsp; cvDestroyWindow(&quot;background&quot;);<br />&nbsp; cvDestroyWindow(&quot;foreground&quot;);<br /><br />&nbsp; //释放图像和矩阵<br />&nbsp; cvReleaseImage(&amp;pFrImg);<br />&nbsp; cvReleaseImage(&amp;pBkImg);<br /><br />&nbsp; cvReleaseMat(&amp;pFrameMat);<br />&nbsp; cvReleaseMat(&amp;pFrMat);<br />&nbsp; cvReleaseMat(&amp;pBkMat);<br /><br />&nbsp; cvReleaseCapture(&amp;pCapture);<br /><br />&nbsp; return 0;<br />}<br /><br />]]>
</content>
</entry>

<entry>
<title>离散傅立叶变换</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678417.html"/>
<issued>2009-03-02T11-41-18 CST</issued> 
<created>2009-03-02T11-41-18 CST</created>
<modified>2009-03-02T11-41-17Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678417</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[#include &lt;cxcore.h&gt;<br />#include &lt;cv.h&gt;<br />#include &lt;highgui.h&gt;<br /><br />// Rearrange the quadrants of Fourier image so that the origin is at<br />// the image center<br />// src &amp; dst arrays of equal size &amp; type<br />void cvShiftDFT(CvArr * src_arr, CvArr * dst_arr )<br />{<br />&nbsp;&nbsp;&nbsp; CvMat * tmp;<br />&nbsp;&nbsp;&nbsp; CvMat q1stub, q2stub;<br />&nbsp;&nbsp;&nbsp; CvMat q3stub, q4stub;<br />&nbsp;&nbsp;&nbsp; CvMat d1stub, d2stub;<br />&nbsp;&nbsp;&nbsp; CvMat d3stub, d4stub;<br />&nbsp;&nbsp;&nbsp; CvMat * q1, * q2, * q3, * q4;<br />&nbsp;&nbsp;&nbsp; CvMat * d1, * d2, * d3, * d4;<br /><br />&nbsp;&nbsp;&nbsp; CvSize size = cvGetSize(src_arr);<br />&nbsp;&nbsp;&nbsp; CvSize dst_size = cvGetSize(dst_arr);<br />&nbsp;&nbsp;&nbsp; int cx, cy;<br /><br />&nbsp;&nbsp;&nbsp; if(dst_size.width != size.width || <br />&nbsp;&nbsp;&nbsp; dst_size.height != size.height){<br />&nbsp;&nbsp;&nbsp; cvError( CV_StsUnmatchedSizes, &quot;cvShiftDFT&quot;, &quot;Source and Destination arrays must have equal sizes&quot;, __FILE__, __LINE__ ); <br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; if(src_arr==dst_arr){<br />&nbsp;&nbsp;&nbsp; tmp = cvCreateMat(size.height/2, size.width/2, cvGetElemType(src_arr));<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; cx = size.width/2;<br />&nbsp;&nbsp;&nbsp; cy = size.height/2; // image center<br /><br />&nbsp;&nbsp;&nbsp; q1 = cvGetSubRect( src_arr, &amp;q1stub, cvRect(0,0,cx, cy) );<br />&nbsp;&nbsp;&nbsp; q2 = cvGetSubRect( src_arr, &amp;q2stub, cvRect(cx,0,cx,cy) );<br />&nbsp;&nbsp;&nbsp; q3 = cvGetSubRect( src_arr, &amp;q3stub, cvRect(cx,cy,cx,cy) );<br />&nbsp;&nbsp;&nbsp; q4 = cvGetSubRect( src_arr, &amp;q4stub, cvRect(0,cy,cx,cy) );<br />&nbsp;&nbsp;&nbsp; d1 = cvGetSubRect( src_arr, &amp;d1stub, cvRect(0,0,cx,cy) );<br />&nbsp;&nbsp;&nbsp; d2 = cvGetSubRect( src_arr, &amp;d2stub, cvRect(cx,0,cx,cy) );<br />&nbsp;&nbsp;&nbsp; d3 = cvGetSubRect( src_arr, &amp;d3stub, cvRect(cx,cy,cx,cy) );<br />&nbsp;&nbsp;&nbsp; d4 = cvGetSubRect( src_arr, &amp;d4stub, cvRect(0,cy,cx,cy) );<br /><br />&nbsp;&nbsp;&nbsp; if(src_arr!=dst_arr){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( !CV_ARE_TYPES_EQ( q1, d1 )){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvError( CV_StsUnmatchedFormats, &quot;cvShiftDFT&quot;, &quot;Source and Destination arrays must have the same format&quot;, __FILE__, __LINE__ ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q3, d1, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q4, d2, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q1, d3, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q2, d4, 0);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q3, tmp, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q1, q3, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(tmp, q1, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q4, tmp, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(q2, q4, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvCopy(tmp, q2, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}<br /><br />int main(int argc, char ** argv)<br />{<br />&nbsp;&nbsp;&nbsp; const char* filename = argc &gt;=2 ? argv[1] : &quot;lena.jpg&quot;;<br />&nbsp;&nbsp;&nbsp; IplImage * im;<br /><br />&nbsp;&nbsp;&nbsp; IplImage * realInput;<br />&nbsp;&nbsp;&nbsp; IplImage * imaginaryInput;<br />&nbsp;&nbsp;&nbsp; IplImage * complexInput;<br />&nbsp;&nbsp;&nbsp; int dft_M, dft_N;<br />&nbsp;&nbsp;&nbsp; CvMat* dft_A, tmp;<br />&nbsp;&nbsp;&nbsp; IplImage * image_Re;<br />&nbsp;&nbsp;&nbsp; IplImage * image_Im;<br />&nbsp;&nbsp;&nbsp; double m, M;<br /><br />&nbsp;&nbsp;&nbsp; im = cvLoadImage( filename, CV_LOAD_IMAGE_GRAYSCALE );<br />&nbsp;&nbsp;&nbsp; if( !im )<br />&nbsp;&nbsp;&nbsp; return -1;<br /><br />&nbsp;&nbsp;&nbsp; realInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);<br />&nbsp;&nbsp;&nbsp; imaginaryInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);<br />&nbsp;&nbsp;&nbsp; complexInput = cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 2);<br /><br />&nbsp;&nbsp;&nbsp; cvScale(im, realInput, 1.0, 0.0);<br />&nbsp;&nbsp;&nbsp; cvZero(imaginaryInput);<br />&nbsp;&nbsp;&nbsp; cvMerge(realInput, imaginaryInput, NULL, NULL, complexInput);<br /><br />&nbsp;&nbsp;&nbsp; dft_M = cvGetOptimalDFTSize( im-&gt;height - 1 );<br />&nbsp;&nbsp;&nbsp; dft_N = cvGetOptimalDFTSize( im-&gt;width - 1 );<br /><br />&nbsp;&nbsp;&nbsp; dft_A = cvCreateMat( dft_M, dft_N, CV_64FC2 );<br />&nbsp;&nbsp;&nbsp; image_Re = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);<br />&nbsp;&nbsp;&nbsp; image_Im = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);<br /><br />&nbsp;&nbsp;&nbsp; // copy A to dft_A and pad dft_A with zeros<br />&nbsp;&nbsp;&nbsp; cvGetSubRect( dft_A, &amp;tmp, cvRect(0,0, im-&gt;width, im-&gt;height));<br />&nbsp;&nbsp;&nbsp; cvCopy( complexInput, &amp;tmp, NULL );<br />&nbsp;&nbsp;&nbsp; if( dft_A-&gt;cols &gt; im-&gt;width )<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvGetSubRect( dft_A, &amp;tmp, cvRect(im-&gt;width,0, dft_A-&gt;cols - im-&gt;width, im-&gt;height));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvZero( &amp;tmp );<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; // no need to pad bottom part of dft_A with zeros because of<br />&nbsp;&nbsp;&nbsp; // use nonzero_rows parameter in cvDFT() call below<br /><br />&nbsp;&nbsp;&nbsp; cvDFT( dft_A, dft_A, CV_DXT_FORWARD, complexInput-&gt;height );<br /><br />&nbsp;&nbsp;&nbsp; cvNamedWindow(&quot;win&quot;, 0);<br />&nbsp;&nbsp;&nbsp; cvNamedWindow(&quot;magnitude&quot;, 0);<br />&nbsp;&nbsp;&nbsp; cvShowImage(&quot;win&quot;, im);<br /><br />&nbsp;&nbsp;&nbsp; // Split Fourier in real and imaginary parts<br />&nbsp;&nbsp;&nbsp; cvSplit( dft_A, image_Re, image_Im, 0, 0 );<br /><br />&nbsp;&nbsp;&nbsp; // Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2)<br />&nbsp;&nbsp;&nbsp; cvPow( image_Re, image_Re, 2.0);<br />&nbsp;&nbsp;&nbsp; cvPow( image_Im, image_Im, 2.0);<br />&nbsp;&nbsp;&nbsp; cvAdd( image_Re, image_Im, image_Re, NULL);<br />&nbsp;&nbsp;&nbsp; cvPow( image_Re, image_Re, 0.5 );<br /><br />&nbsp;&nbsp;&nbsp; // Compute log(1 + Mag)<br />&nbsp;&nbsp;&nbsp; cvAddS( image_Re, cvScalarAll(1.0), image_Re, NULL ); // 1 + Mag<br />&nbsp;&nbsp;&nbsp; cvLog( image_Re, image_Re ); // log(1 + Mag)<br /><br />&nbsp;&nbsp;&nbsp; // Rearrange the quadrants of Fourier image so that the origin is at<br />&nbsp;&nbsp;&nbsp; // the image center<br />&nbsp;&nbsp;&nbsp; cvShiftDFT( image_Re, image_Re );<br /><br />&nbsp;&nbsp;&nbsp; cvMinMaxLoc(image_Re, &amp;m, &amp;M, NULL, NULL, NULL);<br />&nbsp;&nbsp;&nbsp; cvScale(image_Re, image_Re, 1.0/(M-m), 1.0*(-m)/(M-m));<br />&nbsp;&nbsp;&nbsp; cvShowImage(&quot;magnitude&quot;, image_Re);<br /><br />&nbsp;&nbsp;&nbsp; cvWaitKey(-1);<br />&nbsp;&nbsp;&nbsp; return 0;<br />} <!--/HTMLBUILERPART0--><br />]]>
</content>
</entry>

<entry>
<title>Windows下使用采集卡directshow</title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678411.html"/>
<issued>2009-03-02T11-40-34 CST</issued> 
<created>2009-03-02T11-40-34 CST</created>
<modified>2009-03-02T11-40-34Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678411</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[实验中发现opencv的cvCaptureFromCAM 使用的是vfw,采用消息机制,速度较慢,测试发现fps只有 9-12左右,太慢了.&nbsp; 发现经过使用directshow后速度提升到60帧/s. <br />在opencv group上了解到这是一个普遍问题,也许有人做过转换,却没有完整的例子与代码.在此贴出.对希望提高opencv视频分析速度的有所帮助.<br /><br />ARFrameGrabber 是这样封装后的一个类，用法如下:<br /><br />static ARFrameGrabber frameGrabber;&nbsp; //声明对象<br />IplImage ds_frame;<br />frameGrabber.Init(0, true);&nbsp; //设置支持directshow的设备编号，从0开始<br />frameGrabber.SetFlippedImage(true); //图像是否翻转<br />for(;;)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IplImage *frame =0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frameGrabber.GrabByteFrame(); //获取一帧<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTE *myBuffer = frameGrabber.GetByteBuffer(); //得到图像的缓冲 <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int width = frameGrabber.GetWidth();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int height = frameGrabber.GetHeight();&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int stride&nbsp; = (width * sizeof( RGBTRIPLE ) + 3) &amp; -4;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvInitImageHeader( &amp;ds_frame, cvSize(width, height), 8, 3,IPL_ORIGIN_BL, 4 ); //创建iplimage<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds_frame.widthStep = stride;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cvSetData( &amp;ds_frame, myBuffer, stride );&nbsp; //copy数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame = &amp;ds_frame;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 视频分析部分 */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; }<br />]]>
</content>
</entry>

<entry>
<title>创建一个 DeveloperStudio 项目来开始玩 OpenCV </title>
<link rel="alternate" type="text/html" href="http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2678397.html"/>
<issued>2009-03-02T11-38-18 CST</issued> 
<created>2009-03-02T11-38-18 CST</created>
<modified>2009-03-02T11-38-17Z</modified>
<id>tag:wushenghua.blogchina.com,2005://2678397</id>
<author>
<name>wushenghua</name>
<url>http://www.bokee.net/blogmodule/weblogcomment_index/wushenghua.html</url>
</author>
<dc:subject>程序人生</dc:subject>
<content type="text/html" mode="escaped" xml:lang="zh_CN" xml:base="http://www.bokee.net"> 
<![CDATA[为了在 Developer Studio 下创建基于 OpenCV 的项目，按如下步骤进行： <br /><br />1.在 Developer Studio 中创建新的应用程序： <br />1.选择菜单 &quot;File&quot;-&gt;&quot;New...&quot;-&gt;&quot;Projects&quot; 标签。 选择 &quot;Win32 Application&quot; 或者 &quot;Win32 console application&quot; - 后者是简单的方法，例程都采用这种类型。 <br />2.键入项目名称，并且选择保存位置。 <br />3.可以为项目创建一个单独的 workspace (&quot;Create new workspace&quot;)， <br />也可以将新的项目加入到当前的 workspace 中 (&quot;Add to current workspace&quot;)。 <br />4.单击 &quot;next&quot; 按钮。 <br />5.选择 &quot;An empty project&quot;，点击 &quot;Finish&quot;，&quot;OK&quot;。 <br />经过以上步骤，Developer Studio 会创建一个项目目录 (缺省情况下，目录名就是项目名), <br />&lt;project name&gt;.dsp 文件以及&lt;project name&gt;.dsw，.ncb 等，如果你创建自己的workspace。 <br />2.添加文件到 project 中： <br />选择菜单&quot;File&quot;-&gt;&quot;New...&quot;-&gt;&quot;Files&quot; 。 <br />选择&quot;C++ Source File&quot;, 键入文件名，点击&quot;OK&quot; 。 <br />增加 OpenCV 相关的 头文件目录： <br />---------------------------------------------------------- <br />#include &quot;cv.h&quot;<br />/* #inlcude &quot;cvaux.h&quot; // experimental stuff (if need) */<br />#include &quot;highgui.h&quot;<br />----------------------------------------------------------<br />1. <br />或者你可以拷贝部分已有的文件 (如：opencv\samples\c\morphology.c) <br />到项目目录中，打开它，并且加入到项目中 <br />(右键点击编辑视图 -&gt; &quot;Insert File into Project&quot; -&gt; &lt;your project name&gt; )。 <br />2.配置项目： <br />(1)选择菜单&quot;Project&quot;-&gt;&quot;Settings...&quot;以激活项目配置对话框 <br />(2)在左边选择你的项目。 <br />(3)调节设置，对 Release 和 Debug 配置都有效： <br />(4)选择 &quot;Settings For:&quot;-&gt;&quot;All Configurations&quot; <br />(5)选择 &quot;C/C++&quot; 标签 -&gt; &quot;Preprocessor&quot; category -&gt; &quot;Additional Include Directories:&quot;。<br />加入用逗号分隔的相对路径 (对文件 .dsp 而言) 或绝对路径 opencv\cxcore\include, <br />opencv\cv\include, opencv\otherlibs\highgui 以及可选的 <br />optionally,opencv\cvaux\include .<br />(6)选择 &quot;Link&quot; 标签 -&gt; &quot;Input&quot; category -&gt; &quot;Additional library path:&quot;. <br />加入输入库所在的路径 (cxcore[d].lib cv[d].lib hihghui[d].lib cvaux[d].lib) <br />(7)调节 &quot;Debug&quot; 配置 <br />(8)选择 &quot;Settings For:&quot;-&gt;&quot;Win32 Debug&quot;。 <br />(9)选择 &quot;Link&quot; 标签 -&gt; &quot;General&quot; category -&gt; &quot;Object/library modules&quot;。 加入空格分隔的 cvd.lib, highguid.lib, cvauxd.lib （cvauxd.lib可选） <br />(10)可以改变输出文件的名称和位置。如想把产生的 .exe 文件放置于项目目录而不是Debug/ <br />子目录下，可在 &quot;Link&quot; tab -&gt; &quot;General&quot; category -&gt; &quot;Output file name:&quot; 中键入 <br />./&lt;exe-name&gt;d.exe <br />(11)调节 &quot;Release&quot; 配置 <br />(12)选择 &quot;Settings For:&quot;-&gt;&quot;Win32 Release&quot;. <br />(13)选择 &quot;Link&quot; 标签 -&gt; &quot;General&quot; category -&gt; &quot;Object/library modules&quot;. 加入空格分隔的 cv.lib, highgui.lib, cvaux.lib （cvaux.lib可选） <br />(14)另外，你也可以改变 .exe 文件名。 键入 ./&lt;exe-name&gt;.exe 到 &quot;Link&quot; 标签 -&gt; &quot;General&quot; category -&gt; &quot;Output file name:&quot;。 <br />3.添加 dependency 项目到 workspace 中： <br />(1)从菜单中选择： &quot;Project&quot; -&gt; &quot;Insert project into workspace&quot;. <br />(2)选择 opencv\cv\make\cv.dsp. <br />(3)同上，处理opencv\cvaux\make\cvaux.dsp和 opencv\otherlibs\highgui\highgui.dsp. <br />(4)设置 dependencies： <br />(5)从菜单中选择： &quot;Project&quot; -&gt; &quot;Dependencies...&quot; <br />(6)为 &quot;cv&quot; 选择 &quot;cxcore&quot;， <br />(7)为 &quot;cvaux&quot; 选择 &quot;cv&quot;，&quot;cxcore&quot;， <br />(8)为 &quot;highgui&quot; 选择 &quot;cxcore&quot;, <br />(9)为你的整个项目选择所有的：&quot;cxcore&quot;，&quot;cv&quot;，&quot;cvaux&quot;，&quot;highgui&quot;。 <br />dependency配置保证了在源代码被改变的情况下，自动重新编译 opencv 的 <br />debug版本和二进制代码。 <br />4.就这么多。可以编译并且运行一切了。]]>
</content>
</entry>

</feed>

