虽然使用ATL开发COM 应用是一件非常简单的事情,但是在ATL简单易用的界面后面却包含着复杂的技术。
面对ATL生成的大量代码,我们即使不去深入地了解这些代码的含义也可以开发出COM应用来,但是如果我们要充分地挖掘ATL的潜力,开发出更灵活、强大的COM应用,则必须对ATL使用的基本技术有所了解。研究ATL的实质最好的教材就是由Visual C++提供的ATL源代码。
本文这一部分只是对ATL中用到的最基本的技术进行简单的介绍。简单地说来,ATL中所使用的基本技术包括以下几个方面:COM技术C++模板类技术(Template)C++多继承技术(Multi-Inheritance)COM技术是理解ATL的基础,使用ATL进行开发要对COM技术的基本概念有最低限度的了解。
由于COM是一项非常复杂庞大的技术体系,限于本文的篇幅,这里不再赘述。对于本文中提到的COM基本概念也不做过多的解释,请读者参阅有关的参考书籍。
作为ATL最核心的实现技术的模板是对标准C++语言的扩展,但是在大多数的C++编程环境中,人们很少使用它,这是因为模板的功能虽然很强,但是它内部机制比较复杂,需要比较多的C++知识和经验才能灵活地使用它。在MFC中的CObjectArray等功能类就是由模板来定义的。
完全通过模板来定义程序的整体类结构,ATL是迄今为止做得最为成功的。所谓模板类简单地说是对类的抽象。
我们知道C++语言用类定义了构造对象(这里指C++对象而不是COM对象)的方式,对象是类的实例,而模板类定义的是类的构造方式,使用模板类定义实例化的结果产生的是不同的类。因此可以说模板类是“类的类”。
在C++语言中模板类的定义格式如下:注意:;是左右尖括号,可能无法正常显示。 templateclassMyTemp{MyTemp(){};~MyTemp(){};intMyFunc(inta);}………….IntMyTemp::MyFunc(inta){}首先使用C++的关键字“template”来声明一个模板类的定义。
在关键字后面是用尖括号括起来的类型参数。正是根据这个类型参数,编译器才能在编译过程中将模板类的具体定义转化为一个实际的类的定义,即生成一个新的类。
接下来的定义方式与普通的类定义十分相似,只是在类的函数定义中都要带有类型参数的说明。下面的程序段说明了模板类的用法: typedefMyTempmyclassfromtemp;myclassfromtempm;inta=m.Myfunc⑽;通常在使用模板类时为了方便起见,使用一个关键字“typedef”为新定义出来的类取一个名字。
在上面的程序段中假设“MyClass”是一个由用户定义的类,通过将这个类的名字作为类型参数传递给模板类,我们可以创建一个新的类,这个类的行为将以模板类的定义为基础,例如它具有模板类定义的所有成员函数,同时这个类又是对模板类行为的一种修改,这种修改是通过用户提供的类型参数来实现的。赋予模板类以不同的类型参数,则得到行为框架相似但具体行为不同的一组类的集合。
有了新的类的定义以后,我们可以象使用普通类一样来创建一个类的实例,即一个新的对象,并且调用这个对象的成员函数。模板类是对标准C++语言的最新扩展,虽然它的功能很强大,但是要想使用好模板类需要相当多的关于语言和编程的经验和知识,而且错误地使用模板类又会对程序的结构和运行效率带来大的副作用,因此一般的编程环境和编程书籍对模板类的使用都采取谨慎的态度。
而ATL的核心就是由几十个模板类构成的,通过研究ATL的源代码可以使我们对模板类的使用有比较深刻全面的认识。多继承技术同模板一样,是C++语言中极具争议性的技术。
使用多继承技术可以使程序的设计和实现更加灵活,但是,由于多继承的复杂性和自身概念上的一些问题,使多继承在各种面向对象的语言环境中得到的支持都非常有限。例如Small Talk根本就不允许多继承,同样MFC也不支持多继承技术。
多继承最大的问题是所谓的“钻石结构”。例如下面的代码: classA{。
..};classB:publicA{。};classC:publicA{。
..};classD:publicC,B{。
..}由于类D同时从类C和B继承,因此在下面的语句中就会发生歧义: D*pD=newD;(A*)pD->Func(。);由于类D通过类C和类B 分别继承了类A,这里的强制转化就会发生歧义。
ATL使用了C++最新规范中加入的两个运算符号static_cast、dynamic_cast代替简单的强制转化,从而消除多继承带来的歧义。使用这两个运算符号,我们可以在对象运行过程中获取对象的类型信息。
上面的代码可以采用下面的方式修改: D*pD=newD;static_cast(static_cast(pD))->Func(。);为什么模板类和多继承技术会成为ATL主要的工具呢?原因在于,采用模板可以在编译过程中快速的生成具有用户定制功能的类,这对于COM这样一个复杂的技术体系在实现效率上得到了很大的提高。
通过使用模板类,用户可以把精力集中在自己开发的类的基本逻辑上,在完成了自己的类的设计以后,通过继承不同的模板类,生成不同的类,就可以快速地实现COM的功能,同时又避免了采用单继承结构造成的大量功能冗余。总之,正是由于在设计实现过程中采用了模板类和多继承技术,才使ATL成为一个小巧灵活的COM。
锂离子电池的基本知识 便携式电子产品以电池作为电源。
随着便携式产品的迅猛发展,各种电池的用量大增,并且开发出许多新型电池。除大家较熟悉的高性能碱性电池、可充电的镍镉电池、镍氢电池外,还有近年来开发的锂电池。
这里主要介绍有关锂电池的基本知识。这包括它的特性、主要参数、型号的意义、应用范围及使用注意事项等。
锂是一种金属元素,其化学符号为Li(其英文名为lithium),是一种银白色、十分柔软、化学性能活泼的金属,在金属中是最轻的。它除了应用于原子能工业外,可制造特种合金、特种玻璃(电视机上用的荧光屏玻璃)及锂电池。
在锂电池中它用作电池的阳极。 锂电池也分成两大类:不可充电的及可充电的两类。
不可充电的电池称为一次性电池,它只能将化学能一次性地转化为电能,不能将电能还原回化学能(或者还原性能极差)。而可充电的电池称为二次性电池(也称为蓄电池)。
它能将电能转变成化学能储存起来,在使用时,再将化学能转换成电能,它是可逆的,如电能化学能锂电池的主要特点。 锂电池的最大特点是比能量高。
什么是比能量呢?比能量指的是单位重量或单位体积的能量。比能量用Wh/kg或Wh/L来表示。
Wh是能量的单位,W是瓦、h是小时;kg是千克(重量单位),L是升(体积单位)。这里举一个例来说明:5号镍镉电池的额定电压为1.2V,其容量为800mAh,则其能量为0.96Wh(1。
锂离子电池(Li-ion Batteries)是锂电池发展而来。
所以在介绍Li-ion之前,先介绍锂电池。举例来讲,以前照相机里用的扣式电池就属于锂电池。
锂电池的正极材料是二氧化锰或亚硫酰氯,负极是锂。电池组装完成后电池即有电压,不需充电.这种电池也可能充电,但循环性能不好,在充放电循环过程中,容易形成锂枝晶,造成电池内部短路,所以一般情况下这种电池是禁止充电的。
后来,日本索尼公司发明了以炭材料为负极,以含锂的化合物作正极,在充放电过程中,没有金属锂存在,只有锂离子,这就是锂离子电池。当对电池进行充电时,电池的正极上有锂离子生成,生成的锂离子经过电解液运动到负极。
而作为负极的碳呈层状结构,它有很多微孔,达到负极的锂离子就嵌入到碳层的微孔中,嵌入的锂离子越多,充电容量越高。同样,当对电池进行放电时(即我们使用电池的过程),嵌在负极碳层中的锂离子脱出, 又运动回正极。
回正极的锂离子越多,放电容量越高。我们通常所说的电池容量指的就是放电容量。
在Li-ion的充放电过程中,锂离子处于从正极→负极→正极的运动状态。Li-ion Batteries就像一把摇椅,摇椅的两端为电池的两极,而锂离子就象运动员一样在摇椅来回奔跑。
所以Li-ion Batteries又叫摇椅式电池。
锂电池原理
锂离子电池的正极材料通常有锂的活性化合物组成,负极则是特殊分子结构的碳.常见的正极材料主要成分为 LiCoO2 ,充电时,加在电池两极的电势迫使正极的化合物释出锂离子,嵌入负极分子排列呈片层结构的碳中.放电时,锂离子则从片层结构的碳中析出,重新和正极的化合物结合.锂离子的移动产生了电流.
化学反应原理虽然很简单,然而在实际的工业生产中,需要考虑的实际问题要多得多:正极的材料需要添加剂来保持多次充放的活性,负极的材料需要在分子结构级去设计以容纳更多的锂离子;填充在正负极之间的电解液,除了保持稳定,还需要具有良好导电性,减小电池内阻.
虽然锂离子电池很少有镍镉电池的记忆效应,记忆效应的原理是结晶化,在锂电池中几乎不会产生这种反应.但是,锂离子电池在多次充放后容量仍然会下降,其原因是复杂而多样的.主要是正负极材料本身的变化,从分子层面来看,正负极上容纳锂离子的空穴结构会逐渐塌陷、堵塞;从化学角度来看,是正负极材料活性钝化,出现副反应生成稳定的其他化合物.物理上还会出现正极材料逐渐剥落等情况,总之最终降低了电池中可以自由在充放电过程中移动的锂离子数目.
过度充电和过度放电,将对锂离子电池的正负极造成永久的损坏,从分子层面看,可以直观的理解,过度放电将导致负极碳过度释出锂离子而使得其片层结构出现塌陷,过度充电将把太多的锂离子硬塞进负极碳结构里去,而使得其中一些锂离子再也无法释放出来.这也是锂离子电池为什么通常配有充放电的控制电路的原因.
不适合的温度,将引发锂离子电池内部其他化学反应生成我们不希望看到的化合物,所以在不少的锂离子电池正负极之间设有保护性的温控隔膜或电解质添加剂.在电池升温到一定的情况下,复合膜膜孔闭合或电解质变性,电池内阻增大直到断路,电池不再升温,确保电池充电温度正常.
而深充放能提升锂离子电池的实际容量吗?专家明确地告诉我,这是没有意义的.他们甚至说,所谓使用前三次全充放的“激活”也同样没有什么必要.然而为什么很多人深充放以后 Battery Information 里标示容量会发生改变呢 ? 后面将会提到.
锂离子电池一般都带有管理芯片和充电控制芯片.其中管理芯片中有一系列的寄存器,存有容量、温度、ID 、充电状态、放电次数等数值.这些数值在使用中会逐渐变化.我个人认为,使用说明中的“使用一个月左右应该全充放一次”的做法主要的作用应该就是修正这些寄存器里不当的值,使得电池的充电控制和标称容量吻合电池的实际情况.
充电控制芯片主要控制电池的充电过程.锂离子电池的充电过程分为两个阶段,恒流快充阶段(电池指示灯呈黄色时)和恒压电流递减阶段 ( 电池指示灯呈绿色闪烁.恒流快充阶段,电池电压逐步升高到电池的标准电压,随后在控制芯片下转入恒压阶段,电压不再升高以确保不会过充,电流则随着电池电量的上升逐步减弱到 0 ,而最终完成充电.
电量统计芯片通过记录放电曲线(电压,电流,时间)可以抽样计算出电池的电量,这就是我们在 Battery Information 里读到的 wh. 值.而锂离子电池在多次使用后,放电曲线是会改变的,如果芯片一直没有机会再次读出完整的一个放电曲线,其计算出来的电量也就是不准确的.所以我们需要深充放来校准电池的芯片.
锂离子电池作为一种化学电源,指分别用两个能可逆地嵌入与脱嵌锂离子的化合物作为正负极构成的二次电池。
当电池充电时,锂离子从正极中脱嵌,在负极中嵌入,放电时反之。锂离子电池是物理学、材料科学和化学等学科研究的结晶。
锂离子电池所涉及的物理机理,目前是以固体物理中嵌入物理来解释的,嵌入(intercalation)是指可移动的客体粒子(分子、原子、离子)可逆地嵌入到具有合适尺寸的主体晶格中的网络空格点上。电子输运锂离子电池的正极和负极材料都是离子和电子的混合导体嵌入化合物。
电子只能在正极和负极材料中运动。已知的嵌入化合物种类繁多,客体粒子可以是分子、原子或离子.在嵌入离子的同时,要求由主体结构作电荷补偿,以维持电中性。
电荷补偿可以由主体材料能带结构的改变来实现,电导率在嵌入前后会有变化。锂离子电池电极材料可稳定存在于空气中与其这一特性息息相关。
嵌入化合物只有满足结构改变可逆并能以结构弥补电荷变化才能作为锂离子电池电极材料。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.339秒