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