雖然使用ATL開(kāi)發(fā)COM 應用是一件非常簡(jiǎn)單的事情,但是在A(yíng)TL簡(jiǎn)單易用的界面后面卻包含著(zhù)復雜的技術(shù)。
面對ATL生成的大量代碼,我們即使不去深入地了解這些代碼的含義也可以開(kāi)發(fā)出COM應用來(lái),但是如果我們要充分地挖掘ATL的潛力,開(kāi)發(fā)出更靈活、強大的COM應用,則必須對ATL使用的基本技術(shù)有所了解。研究ATL的實(shí)質(zhì)最好的教材就是由Visual C++提供的ATL源代碼。
本文這一部分只是對ATL中用到的最基本的技術(shù)進(jìn)行簡(jiǎn)單的介紹。簡(jiǎn)單地說(shuō)來(lái),ATL中所使用的基本技術(shù)包括以下幾個(gè)方面:COM技術(shù)C++模板類(lèi)技術(shù)(Template)C++多繼承技術(shù)(Multi-Inheritance)COM技術(shù)是理解ATL的基礎,使用ATL進(jìn)行開(kāi)發(fā)要對COM技術(shù)的基本概念有最低限度的了解。
由于COM是一項非常復雜龐大的技術(shù)體系,限于本文的篇幅,這里不再贅述。對于本文中提到的COM基本概念也不做過(guò)多的解釋?zhuān)堊x者參閱有關(guān)的參考書(shū)籍。
作為ATL最核心的實(shí)現技術(shù)的模板是對標準C++語(yǔ)言的擴展,但是在大多數的C++編程環(huán)境中,人們很少使用它,這是因為模板的功能雖然很強,但是它內部機制比較復雜,需要比較多的C++知識和經(jīng)驗才能靈活地使用它。在MFC中的CObjectArray等功能類(lèi)就是由模板來(lái)定義的。
完全通過(guò)模板來(lái)定義程序的整體類(lèi)結構,ATL是迄今為止做得最為成功的。所謂模板類(lèi)簡(jiǎn)單地說(shuō)是對類(lèi)的抽象。
我們知道C++語(yǔ)言用類(lèi)定義了構造對象(這里指C++對象而不是COM對象)的方式,對象是類(lèi)的實(shí)例,而模板類(lèi)定義的是類(lèi)的構造方式,使用模板類(lèi)定義實(shí)例化的結果產(chǎn)生的是不同的類(lèi)。因此可以說(shuō)模板類(lèi)是“類(lèi)的類(lèi)”。
在C++語(yǔ)言中模板類(lèi)的定義格式如下:注意:;是左右尖括號,可能無(wú)法正常顯示。 templateclassMyTemp{MyTemp(){};~MyTemp(){};intMyFunc(inta);}………….IntMyTemp::MyFunc(inta){}首先使用C++的關(guān)鍵字“template”來(lái)聲明一個(gè)模板類(lèi)的定義。
在關(guān)鍵字后面是用尖括號括起來(lái)的類(lèi)型參數。正是根據這個(gè)類(lèi)型參數,編譯器才能在編譯過(guò)程中將模板類(lèi)的具體定義轉化為一個(gè)實(shí)際的類(lèi)的定義,即生成一個(gè)新的類(lèi)。
接下來(lái)的定義方式與普通的類(lèi)定義十分相似,只是在類(lèi)的函數定義中都要帶有類(lèi)型參數的說(shuō)明。下面的程序段說(shuō)明了模板類(lèi)的用法: typedefMyTempmyclassfromtemp;myclassfromtempm;inta=m.Myfunc⑽;通常在使用模板類(lèi)時(shí)為了方便起見(jiàn),使用一個(gè)關(guān)鍵字“typedef”為新定義出來(lái)的類(lèi)取一個(gè)名字。
在上面的程序段中假設“MyClass”是一個(gè)由用戶(hù)定義的類(lèi),通過(guò)將這個(gè)類(lèi)的名字作為類(lèi)型參數傳遞給模板類(lèi),我們可以創(chuàng )建一個(gè)新的類(lèi),這個(gè)類(lèi)的行為將以模板類(lèi)的定義為基礎,例如它具有模板類(lèi)定義的所有成員函數,同時(shí)這個(gè)類(lèi)又是對模板類(lèi)行為的一種修改,這種修改是通過(guò)用戶(hù)提供的類(lèi)型參數來(lái)實(shí)現的。賦予模板類(lèi)以不同的類(lèi)型參數,則得到行為框架相似但具體行為不同的一組類(lèi)的集合。
有了新的類(lèi)的定義以后,我們可以象使用普通類(lèi)一樣來(lái)創(chuàng )建一個(gè)類(lèi)的實(shí)例,即一個(gè)新的對象,并且調用這個(gè)對象的成員函數。模板類(lèi)是對標準C++語(yǔ)言的最新擴展,雖然它的功能很強大,但是要想使用好模板類(lèi)需要相當多的關(guān)于語(yǔ)言和編程的經(jīng)驗和知識,而且錯誤地使用模板類(lèi)又會(huì )對程序的結構和運行效率帶來(lái)大的副作用,因此一般的編程環(huán)境和編程書(shū)籍對模板類(lèi)的使用都采取謹慎的態(tài)度。
而ATL的核心就是由幾十個(gè)模板類(lèi)構成的,通過(guò)研究ATL的源代碼可以使我們對模板類(lèi)的使用有比較深刻全面的認識。多繼承技術(shù)同模板一樣,是C++語(yǔ)言中極具爭議性的技術(shù)。
使用多繼承技術(shù)可以使程序的設計和實(shí)現更加靈活,但是,由于多繼承的復雜性和自身概念上的一些問(wèn)題,使多繼承在各種面向對象的語(yǔ)言環(huán)境中得到的支持都非常有限。例如Small Talk根本就不允許多繼承,同樣MFC也不支持多繼承技術(shù)。
多繼承最大的問(wèn)題是所謂的“鉆石結構”。例如下面的代碼: classA{。
..};classB:publicA{。};classC:publicA{。
..};classD:publicC,B{。
..}由于類(lèi)D同時(shí)從類(lèi)C和B繼承,因此在下面的語(yǔ)句中就會(huì )發(fā)生歧義: D*pD=newD;(A*)pD->Func(。);由于類(lèi)D通過(guò)類(lèi)C和類(lèi)B 分別繼承了類(lèi)A,這里的強制轉化就會(huì )發(fā)生歧義。
ATL使用了C++最新規范中加入的兩個(gè)運算符號static_cast、dynamic_cast代替簡(jiǎn)單的強制轉化,從而消除多繼承帶來(lái)的歧義。使用這兩個(gè)運算符號,我們可以在對象運行過(guò)程中獲取對象的類(lèi)型信息。
上面的代碼可以采用下面的方式修改: D*pD=newD;static_cast(static_cast(pD))->Func(。);為什么模板類(lèi)和多繼承技術(shù)會(huì )成為ATL主要的工具呢?原因在于,采用模板可以在編譯過(guò)程中快速的生成具有用戶(hù)定制功能的類(lèi),這對于COM這樣一個(gè)復雜的技術(shù)體系在實(shí)現效率上得到了很大的提高。
通過(guò)使用模板類(lèi),用戶(hù)可以把精力集中在自己開(kāi)發(fā)的類(lèi)的基本邏輯上,在完成了自己的類(lèi)的設計以后,通過(guò)繼承不同的模板類(lèi),生成不同的類(lèi),就可以快速地實(shí)現COM的功能,同時(shí)又避免了采用單繼承結構造成的大量功能冗余。總之,正是由于在設計實(shí)現過(guò)程中采用了模板類(lèi)和多繼承技術(shù),才使ATL成為一個(gè)小巧靈活的COM。
鋰離子電池的基本知識 便攜式電子產(chǎn)品以電池作為電源。
隨著(zhù)便攜式產(chǎn)品的迅猛發(fā)展,各種電池的用量大增,并且開(kāi)發(fā)出許多新型電池。除大家較熟悉的高性能堿性電池、可充電的鎳鎘電池、鎳氫電池外,還有近年來(lái)開(kāi)發(fā)的鋰電池。
這里主要介紹有關(guān)鋰電池的基本知識。這包括它的特性、主要參數、型號的意義、應用范圍及使用注意事項等。
鋰是一種金屬元素,其化學(xué)符號為L(cháng)i(其英文名為lithium),是一種銀白色、十分柔軟、化學(xué)性能活潑的金屬,在金屬中是最輕的。它除了應用于原子能工業(yè)外,可制造特種合金、特種玻璃(電視機上用的熒光屏玻璃)及鋰電池。
在鋰電池中它用作電池的陽(yáng)極。 鋰電池也分成兩大類(lèi):不可充電的及可充電的兩類(lèi)。
不可充電的電池稱(chēng)為一次性電池,它只能將化學(xué)能一次性地轉化為電能,不能將電能還原回化學(xué)能(或者還原性能極差)。而可充電的電池稱(chēng)為二次性電池(也稱(chēng)為蓄電池)。
它能將電能轉變成化學(xué)能儲存起來(lái),在使用時(shí),再將化學(xué)能轉換成電能,它是可逆的,如電能化學(xué)能鋰電池的主要特點(diǎn)。 鋰電池的最大特點(diǎn)是比能量高。
什么是比能量呢?比能量指的是單位重量或單位體積的能量。比能量用Wh/kg或Wh/L來(lái)表示。
Wh是能量的單位,W是瓦、h是小時(shí);kg是千克(重量單位),L是升(體積單位)。這里舉一個(gè)例來(lái)說(shuō)明:5號鎳鎘電池的額定電壓為1.2V,其容量為800mAh,則其能量為0.96Wh(1。
鋰離子電池(Li-ion Batteries)是鋰電池發(fā)展而來(lái)。
所以在介紹Li-ion之前,先介紹鋰電池。舉例來(lái)講,以前照相機里用的扣式電池就屬于鋰電池。
鋰電池的正極材料是二氧化錳或亞硫酰氯,負極是鋰。電池組裝完成后電池即有電壓,不需充電.這種電池也可能充電,但循環(huán)性能不好,在充放電循環(huán)過(guò)程中,容易形成鋰枝晶,造成電池內部短路,所以一般情況下這種電池是禁止充電的。
后來(lái),日本索尼公司發(fā)明了以炭材料為負極,以含鋰的化合物作正極,在充放電過(guò)程中,沒(méi)有金屬鋰存在,只有鋰離子,這就是鋰離子電池。當對電池進(jìn)行充電時(shí),電池的正極上有鋰離子生成,生成的鋰離子經(jīng)過(guò)電解液運動(dòng)到負極。
而作為負極的碳呈層狀結構,它有很多微孔,達到負極的鋰離子就嵌入到碳層的微孔中,嵌入的鋰離子越多,充電容量越高。同樣,當對電池進(jìn)行放電時(shí)(即我們使用電池的過(guò)程),嵌在負極碳層中的鋰離子脫出, 又運動(dòng)回正極。
回正極的鋰離子越多,放電容量越高。我們通常所說(shuō)的電池容量指的就是放電容量。
在Li-ion的充放電過(guò)程中,鋰離子處于從正極→負極→正極的運動(dòng)狀態(tài)。Li-ion Batteries就像一把搖椅,搖椅的兩端為電池的兩極,而鋰離子就象運動(dòng)員一樣在搖椅來(lái)回奔跑。
所以L(fǎng)i-ion Batteries又叫搖椅式電池。
鋰電池原理
鋰離子電池的正極材料通常有鋰的活性化合物組成,負極則是特殊分子結構的碳.常見(jiàn)的正極材料主要成分為 LiCoO2 ,充電時(shí),加在電池兩極的電勢迫使正極的化合物釋出鋰離子,嵌入負極分子排列呈片層結構的碳中.放電時(shí),鋰離子則從片層結構的碳中析出,重新和正極的化合物結合.鋰離子的移動(dòng)產(chǎn)生了電流.
化學(xué)反應原理雖然很簡(jiǎn)單,然而在實(shí)際的工業(yè)生產(chǎn)中,需要考慮的實(shí)際問(wèn)題要多得多:正極的材料需要添加劑來(lái)保持多次充放的活性,負極的材料需要在分子結構級去設計以容納更多的鋰離子;填充在正負極之間的電解液,除了保持穩定,還需要具有良好導電性,減小電池內阻.
雖然鋰離子電池很少有鎳鎘電池的記憶效應,記憶效應的原理是結晶化,在鋰電池中幾乎不會(huì )產(chǎn)生這種反應.但是,鋰離子電池在多次充放后容量仍然會(huì )下降,其原因是復雜而多樣的.主要是正負極材料本身的變化,從分子層面來(lái)看,正負極上容納鋰離子的空穴結構會(huì )逐漸塌陷、堵塞;從化學(xué)角度來(lái)看,是正負極材料活性鈍化,出現副反應生成穩定的其他化合物.物理上還會(huì )出現正極材料逐漸剝落等情況,總之最終降低了電池中可以自由在充放電過(guò)程中移動(dòng)的鋰離子數目.
過(guò)度充電和過(guò)度放電,將對鋰離子電池的正負極造成永久的損壞,從分子層面看,可以直觀(guān)的理解,過(guò)度放電將導致負極碳過(guò)度釋出鋰離子而使得其片層結構出現塌陷,過(guò)度充電將把太多的鋰離子硬塞進(jìn)負極碳結構里去,而使得其中一些鋰離子再也無(wú)法釋放出來(lái).這也是鋰離子電池為什么通常配有充放電的控制電路的原因.
不適合的溫度,將引發(fā)鋰離子電池內部其他化學(xué)反應生成我們不希望看到的化合物,所以在不少的鋰離子電池正負極之間設有保護性的溫控隔膜或電解質(zhì)添加劑.在電池升溫到一定的情況下,復合膜膜孔閉合或電解質(zhì)變性,電池內阻增大直到斷路,電池不再升溫,確保電池充電溫度正常.
而深充放能提升鋰離子電池的實(shí)際容量嗎?專(zhuān)家明確地告訴我,這是沒(méi)有意義的.他們甚至說(shuō),所謂使用前三次全充放的“激活”也同樣沒(méi)有什么必要.然而為什么很多人深充放以后 Battery Information 里標示容量會(huì )發(fā)生改變呢 ? 后面將會(huì )提到.
鋰離子電池一般都帶有管理芯片和充電控制芯片.其中管理芯片中有一系列的寄存器,存有容量、溫度、ID 、充電狀態(tài)、放電次數等數值.這些數值在使用中會(huì )逐漸變化.我個(gè)人認為,使用說(shuō)明中的“使用一個(gè)月左右應該全充放一次”的做法主要的作用應該就是修正這些寄存器里不當的值,使得電池的充電控制和標稱(chēng)容量吻合電池的實(shí)際情況.
充電控制芯片主要控制電池的充電過(guò)程.鋰離子電池的充電過(guò)程分為兩個(gè)階段,恒流快充階段(電池指示燈呈黃色時(shí))和恒壓電流遞減階段 ( 電池指示燈呈綠色閃爍.恒流快充階段,電池電壓逐步升高到電池的標準電壓,隨后在控制芯片下轉入恒壓階段,電壓不再升高以確保不會(huì )過(guò)充,電流則隨著(zhù)電池電量的上升逐步減弱到 0 ,而最終完成充電.
電量統計芯片通過(guò)記錄放電曲線(xiàn)(電壓,電流,時(shí)間)可以抽樣計算出電池的電量,這就是我們在 Battery Information 里讀到的 wh. 值.而鋰離子電池在多次使用后,放電曲線(xiàn)是會(huì )改變的,如果芯片一直沒(méi)有機會(huì )再次讀出完整的一個(gè)放電曲線(xiàn),其計算出來(lái)的電量也就是不準確的.所以我們需要深充放來(lái)校準電池的芯片.
鋰離子電池作為一種化學(xué)電源,指分別用兩個(gè)能可逆地嵌入與脫嵌鋰離子的化合物作為正負極構成的二次電池。
當電池充電時(shí),鋰離子從正極中脫嵌,在負極中嵌入,放電時(shí)反之。鋰離子電池是物理學(xué)、材料科學(xué)和化學(xué)等學(xué)科研究的結晶。
鋰離子電池所涉及的物理機理,目前是以固體物理中嵌入物理來(lái)解釋的,嵌入(intercalation)是指可移動(dòng)的客體粒子(分子、原子、離子)可逆地嵌入到具有合適尺寸的主體晶格中的網(wǎng)絡(luò )空格點(diǎn)上。電子輸運鋰離子電池的正極和負極材料都是離子和電子的混合導體嵌入化合物。
電子只能在正極和負極材料中運動(dòng)。已知的嵌入化合物種類(lèi)繁多,客體粒子可以是分子、原子或離子.在嵌入離子的同時(shí),要求由主體結構作電荷補償,以維持電中性。
電荷補償可以由主體材料能帶結構的改變來(lái)實(shí)現,電導率在嵌入前后會(huì )有變化。鋰離子電池電極材料可穩定存在于空氣中與其這一特性息息相關(guān)。
嵌入化合物只有滿(mǎn)足結構改變可逆并能以結構彌補電荷變化才能作為鋰離子電池電極材料。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.339秒