陸宇霆,臧珠萍,歐陽文斌,曾培峰
(東華大學(xué)a.計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院;b.信息科學(xué)與技術(shù)學(xué)院,上海 201620)
解釋型單片機(jī)應(yīng)用程序的研究*
陸宇霆a,臧珠萍a,歐陽文斌b,曾培峰a
(東華大學(xué)a.計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院;b.信息科學(xué)與技術(shù)學(xué)院,上海 201620)
采用配置文件定義系統(tǒng)處理和功能,提出一個組態(tài)簡單、易于功能調(diào)整和系統(tǒng)升級的解釋型單片機(jī)系統(tǒng).按照業(yè)務(wù)邏輯編寫的腳本文件以XML格式存儲于SD(Secure Digital)卡中,腳本程序被單片機(jī)讀入內(nèi)存后,經(jīng)解釋器解釋,調(diào)用系統(tǒng)軟件中相應(yīng)API(App lication Program Interface)函數(shù),執(zhí)行指定功能.建立在硬件層和系統(tǒng)軟件層之上的單片機(jī)解釋系統(tǒng),對業(yè)務(wù)邏輯的編寫、更改和實(shí)現(xiàn)更為方便.
腳本;解釋型;應(yīng)用程序;單片機(jī);XML
傳統(tǒng)的單片機(jī)應(yīng)用軟件主要為編譯型,具有執(zhí)行效率高、運(yùn)行速度快的特點(diǎn),但是編程人員需具備較強(qiáng)的編程知識和業(yè)務(wù)知識,程序的編寫、編譯、調(diào)試和下載是一個相對比較復(fù)雜的過程.
如果應(yīng)用軟件由腳本語言編寫,通過解釋器逐行讀取、逐行解釋執(zhí)行,雖然相對于編譯型軟件運(yùn)行速度較慢,但是腳本程序直觀易懂、結(jié)構(gòu)簡單,與單片機(jī)系統(tǒng)的底層硬件無關(guān),在不同的平臺上只要有相應(yīng)的解釋器支持就可以實(shí)現(xiàn)相同功能,大大增強(qiáng)了應(yīng)用軟件的平臺無關(guān)性和可移植性,因而在對運(yùn)行速度要求不高的系統(tǒng)中有一定的應(yīng)用價值.
近年來單片機(jī)技術(shù)發(fā)展迅速,運(yùn)算速度和內(nèi)存空間不斷提升,這使得解釋型應(yīng)用軟件在單片機(jī)應(yīng)用中有了用武之地.新型的單片機(jī)測控裝置具有可裁剪的微型腳本語言解釋器,使其可以運(yùn)行簡單的腳本語言,提高了單片機(jī)的使用靈活性、可擴(kuò)展性和自動化程度[1].文獻(xiàn)[2]給出了基于嵌入式操作系統(tǒng)瀏覽器的JavaScrip t語言解釋器的設(shè)計(jì)與實(shí)現(xiàn)方法,提出并實(shí)現(xiàn)了一種擴(kuò)展的算符優(yōu)先算法.在單片機(jī)中使用解釋語言編寫程序的結(jié)構(gòu),即將系統(tǒng)內(nèi)對輸入、輸出部件的控制及其他所需動作,用相應(yīng)的“指令代碼”表示,主體程序?qū)Υa進(jìn)行“解釋”,并執(zhí)行相應(yīng)的動作[3].文獻(xiàn)[4]采用xml描述業(yè)務(wù)邏輯,并實(shí)現(xiàn)基于xml腳本的業(yè)務(wù)解釋器.
單片機(jī)控制系統(tǒng)中的軟件按功能分為操作控制模塊、文件讀取與存儲模塊、通信模塊、系統(tǒng)自檢模塊[5].在設(shè)計(jì)操作控制模塊中的人機(jī)交互圖形界面時,通常采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,對顯示的圖形在功能上進(jìn)行自頂向下、逐步細(xì)化的模塊劃分[6];具體實(shí)現(xiàn)時,采用液晶顯示屏顯示系統(tǒng)的工作狀態(tài),設(shè)置按鈕并實(shí)現(xiàn)相關(guān)邏輯判斷,提供檢測、顯示和按鍵控制的方法[7-8].文獻(xiàn)[9]提供 SD卡(Secure Digital Memory Card)以及 C8051F020芯片中SPI接口(Serial Peripheral Interface)的結(jié)構(gòu)和工作原理,擴(kuò)展了單片機(jī)存儲的方式.
目前單片機(jī)系統(tǒng)中模塊豐富且技術(shù)成熟,系統(tǒng)結(jié)構(gòu)多以編譯型為主,采用解釋型的很少.基于單片機(jī)技術(shù)的發(fā)展、解釋型程序的優(yōu)點(diǎn)以及XML技術(shù)的應(yīng)用,本文提出一種解釋型單片機(jī)系統(tǒng)的實(shí)現(xiàn)方法,討論系統(tǒng)的結(jié)構(gòu)、腳本文件的設(shè)計(jì)和提高系統(tǒng)速度的方法.
系統(tǒng)由3個層次4個部分組成,如圖1所示,分別為腳本文件、解釋器、系統(tǒng)軟件和相關(guān)硬件.用戶根據(jù)所需業(yè)務(wù)邏輯通過PC機(jī)編寫XML格式的腳本文件,腳本文件存儲在基于 FA T文件系統(tǒng)的SD卡中,單片機(jī)以SPI模式讀寫SD卡中的腳本文件,腳本文件經(jīng)過解釋器解釋,調(diào)用系統(tǒng)軟件中相應(yīng)的應(yīng)用程序接口(Application Program Interface,API)函數(shù),進(jìn)行運(yùn)算并驅(qū)動控制系統(tǒng)硬件.
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System architecture
系統(tǒng)軟件提供實(shí)時監(jiān)控程序、相關(guān)硬件的驅(qū)動程序以及通用的API函數(shù).系統(tǒng)的硬件可以根據(jù)用戶的需求進(jìn)行設(shè)計(jì),基本配置為單片機(jī)、液晶顯示模塊、SD卡讀寫模塊和輸入輸出模塊.
腳本文件編寫包括確定系統(tǒng)需要的業(yè)務(wù)邏輯、人機(jī)交互界面相關(guān)的數(shù)據(jù),以實(shí)現(xiàn)系統(tǒng)要求完成的功能.腳本文件分為表達(dá)、處理和數(shù)據(jù)3個部分.
表達(dá)部分:將系統(tǒng)處理的數(shù)據(jù)以一定的格式顯示給用戶,為用戶提供良好的人機(jī)交互接口.
處理部分:各種信息和數(shù)據(jù)的處理邏輯,即系統(tǒng)的業(yè)務(wù)邏輯的描述.處理部分的調(diào)用基于消息響應(yīng)機(jī)制,即對系統(tǒng)的相應(yīng)消息進(jìn)行處理.
數(shù)據(jù)部分:為處理部分和表達(dá)部分提供相關(guān)數(shù)據(jù).根據(jù)數(shù)據(jù)的作用范圍,分為全局?jǐn)?shù)據(jù)與局部數(shù)據(jù)兩部分.
腳本文件對這3個部分分別建立模板,并根據(jù)模板生成對象.所有的對象可以通過屬性和內(nèi)容進(jìn)行描述,屬性和內(nèi)容的分配由文件的結(jié)構(gòu)決定.
對象屬性包括通用屬性和專用屬性.通用屬性的名稱(Name)屬性是對象間相互區(qū)別的唯一主鍵;類型(Type)屬性用于區(qū)分對象的種類.不同類型的對象,有其相應(yīng)的專用屬性描述,通過解釋器對其進(jìn)行相應(yīng)的處理.
腳本解釋器是單片機(jī)系統(tǒng)軟件與腳本文件之間聯(lián)系的橋梁.腳本解釋器對腳本程序進(jìn)行順序讀取及解釋,根據(jù)解釋的內(nèi)容調(diào)用系統(tǒng)軟件中相應(yīng)的API函數(shù),進(jìn)行數(shù)據(jù)的處理以及對系統(tǒng)硬件的控制.
腳本解釋器的工作流程如圖2所示.系統(tǒng)基于事件驅(qū)動,首先讀入腳本,完成初始化后,系統(tǒng)監(jiān)控程序進(jìn)入循環(huán)掃描狀態(tài),等待事件觸發(fā).一旦有事件發(fā)生,即對相應(yīng)腳本進(jìn)行檢測,決定是否對當(dāng)前事件進(jìn)行消息響應(yīng).
圖2 解釋器工作流程Fig.2 Interpreter operating process
系統(tǒng)的大量信息都通過人機(jī)交互界面與用戶交流,不同的顯示信息具有不同的顯示頁面,因此,腳本文件由多個頁面構(gòu)成.鑒于單片機(jī)系統(tǒng)資源的限制,將SD卡中的腳本文件以頁面為單位存儲,每一個頁面獨(dú)立保存在一個文件中,其優(yōu)點(diǎn)是調(diào)用某一個頁面時只需讀取對應(yīng)的頁面腳本文件,無需對所有的文件進(jìn)行操作,從而提高了系統(tǒng)的處理速度.對系統(tǒng)的共享數(shù)據(jù),則以全局變量的方式定義,并單獨(dú)保存在一個文件中.
表達(dá)部分的功能是將用戶需要的、經(jīng)過處理的數(shù)據(jù),通過表達(dá)模板和頁面生成器,把數(shù)據(jù)和表達(dá)形式相結(jié)合,發(fā)送給用戶瀏覽.
表達(dá)部分包括頁面、靜態(tài)文本、動態(tài)文本、靜態(tài)按鈕和動態(tài)按鈕類型對象,每一個對象都有兩個通用屬性:即名稱屬性和類型屬性.名稱屬性用于區(qū)別其他頁面,并實(shí)現(xiàn)在其他地方調(diào)用這個頁面.類型屬性表示對象的功能.除頁面外,其他4種類型對象都有顯示位置(Position)專用屬性,該屬性給出顯示的內(nèi)容相對于所屬頁面左上角的起始位置坐標(biāo) x和y.下面分別描述上述5種類型對象以及所用到的其他專用屬性.
2.1.1 頁面
頁面(Disp)是用戶與系統(tǒng)進(jìn)行信息交換的一種手段.
頁面范圍(Rectangle)屬性.該屬性規(guī)定頁面的尺寸,頁面默認(rèn)為長方形,頁面的范圍由頁面左上角 x1,y1和頁面右下角 x2,y2的4個坐標(biāo)確定.
頁面的內(nèi)容由頁面包含的對象構(gòu)成,對象類型有靜態(tài)文本、動態(tài)文本、靜態(tài)按鈕和動態(tài)按鈕,用以顯示系統(tǒng)的狀態(tài)和接受用戶的輸入.
2.1.2 靜態(tài)文本
靜態(tài)文本(Lable)用于顯示頁面中固有的、不變化的文字.
顯示內(nèi)容(Value)屬性.該屬性描述頁面上需要顯示文字的內(nèi)容,通常對應(yīng)頁面的標(biāo)題、對話框的名稱、按鈕的名稱等信息.
2.1.3 動態(tài)文本
動態(tài)文本(Edit)用于顯示頁面中隨系統(tǒng)狀態(tài)變化實(shí)時更新的文字.
顯示資源(Source)屬性.該屬性描述頁面上顯示內(nèi)容的來源,以數(shù)據(jù)對應(yīng)的變量名來引用.這些動態(tài)文本主要反映系統(tǒng)實(shí)時的數(shù)據(jù)變化、輸入輸出狀態(tài)的變化信息.
如果觸發(fā)頁面刷新(Refresh)事件,解釋器會對當(dāng)前頁面的動態(tài)對象重新解釋顯示,即動態(tài)文本對象重新讀取顯示資源內(nèi)容并在頁面相應(yīng)位置重繪.為了節(jié)省系統(tǒng)資源,此時的靜態(tài)文本對象不采取重繪動作.頁面刷新事件可以通過點(diǎn)擊按鈕進(jìn)行觸發(fā),也可以在任務(wù)對象中創(chuàng)建定時刷新任務(wù)進(jìn)行觸發(fā).
2.1.4 靜態(tài)按鈕
靜態(tài)按鈕(Static Button)是頁面中可接受用戶固定操作的文字或圖形元素,在頁面中操作和位置固定不變的按鈕.
顯示內(nèi)容(Value)屬性.該屬性描述按鈕上顯示的內(nèi)容.
按鈕擴(kuò)展(Expansion)屬性.該屬性可以對按鈕進(jìn)行橫向或縱向的擴(kuò)展,擴(kuò)大按鈕的響應(yīng)范圍,方便用戶的操作.
當(dāng)點(diǎn)擊觸摸液晶屏?xí)r,系統(tǒng)接收點(diǎn)擊消息,消息包括被點(diǎn)擊點(diǎn)的坐標(biāo),通過坐標(biāo)與當(dāng)前頁面中按鈕對象的坐標(biāo)相比對,確認(rèn)是否有按鈕被點(diǎn)擊.如果有按鈕被點(diǎn)擊,則觸發(fā)相應(yīng)的按鈕點(diǎn)擊(OnClick)事件,然后對按鈕對象的內(nèi)容部分進(jìn)行解釋執(zhí)行,完成指定的功能.按鈕對象的內(nèi)容由所調(diào)用的函數(shù)對象組合構(gòu)成,而函數(shù)對象來自系統(tǒng)軟件提供的API函數(shù)與驅(qū)動控制函數(shù).
2.1.5 動態(tài)按鈕
動態(tài)按鈕(Dynamic Button)是頁面中可接受用戶動態(tài)操作的文字或圖形元素,在頁面中操作和位置可變的按鈕.
顯示資源(Source)屬性.該屬性描述按鈕上顯示內(nèi)容的來源.
按鈕擴(kuò)展(Expansion)屬性.該屬性的作用與靜態(tài)按鈕中的按鈕擴(kuò)展屬性相同.
動態(tài)按鈕給用戶提供多種選擇性操作和控制.在數(shù)據(jù)部分中,結(jié)構(gòu)體變量將按鈕的顯示資源和按鈕中函數(shù)所需的參數(shù)組合起來,數(shù)組變量將結(jié)構(gòu)體變量組合起來.在頁面中,按鈕對象屬性與數(shù)組變量中結(jié)構(gòu)體變量對象屬性相關(guān)聯(lián).改變數(shù)組變量的下標(biāo)就可以選定相應(yīng)的結(jié)構(gòu)體變量,進(jìn)而實(shí)現(xiàn)按鈕的動態(tài)顯示和動態(tài)操作.
處理部分主要對各種信息和數(shù)據(jù)按一定的邏輯進(jìn)行判斷并進(jìn)行處理.處理部分包括函數(shù)類型和任務(wù)類型對象.
函數(shù)對象的可選專用屬性有參數(shù)(Parameter)屬性和返回(Return)屬性.參數(shù)屬性可以是常量與變量,返回屬性一般為變量.
系統(tǒng)軟件層提供了功能豐富的API函數(shù),這些函數(shù)采用編譯方式實(shí)現(xiàn).編寫腳本程序時只需考慮如何使用API函數(shù)來實(shí)現(xiàn)業(yè)務(wù)邏輯.這樣既方便修改業(yè)務(wù)邏輯,又提高了腳本的執(zhí)行速度.
任務(wù)對象的可選專用屬性有定時(Time)屬性和頻率(Frequency)屬性.定時屬性表示到定時屬性值指定的時刻系統(tǒng)產(chǎn)生定時事件;頻率屬性表示每次到達(dá)頻率屬性值指定時間的倍數(shù)時刻產(chǎn)生頻率事件.
任務(wù)對象的內(nèi)容由所調(diào)用的函數(shù)對象組合構(gòu)成.
系統(tǒng)的狀態(tài)以及系統(tǒng)處理的中間過程需以數(shù)據(jù)形式保存下來,本文在腳本和內(nèi)存中各開辟一個專用區(qū)域存放數(shù)據(jù).
數(shù)據(jù)部分包括基本類型、構(gòu)造類型對象.基本類型有整型、字符型、浮點(diǎn)型等;構(gòu)造類型有數(shù)組類型、結(jié)構(gòu)體類型等.
基本類型對象的專用屬性僅包括內(nèi)容(Value)屬性,即變量的具體內(nèi)容.
構(gòu)造類型對象具有多層結(jié)構(gòu),首層包括通用屬性名稱和類型,考慮到腳本結(jié)構(gòu),增加子一層結(jié)構(gòu),將所包含的對象作為內(nèi)容,實(shí)現(xiàn)結(jié)構(gòu)與概念的統(tǒng)一.數(shù)組類型對象由一系列相同類型對象組成;結(jié)構(gòu)體類型對象是由不同類型對象組成的集合.
根據(jù)對象定義位置的不同,可分為全局變量和局部變量;按存儲介質(zhì)的不同,可分為腳本變量和內(nèi)存變量.全局變量是各個頁面對象都能訪問的變量;局部變量是本頁面對象能訪問的變量.腳本變量是存儲于腳本文件區(qū)的數(shù)據(jù);內(nèi)存變量是腳本文件為了提高訪問速度在單片機(jī)內(nèi)存中申請的內(nèi)存變量.
腳本中的全局變量和局部變量不涉及內(nèi)存的申請與釋放,全局變量的作用域?yàn)樗许撁?局部變量的作用域?yàn)槠涠x所在的頁面.處理原則是先局部后全局,如果全局變量和局部變量同名則僅考慮局部變量.腳本文件的讀寫比較慢,如果對系統(tǒng)有速度上的要求,可以在系統(tǒng)中申請內(nèi)存變量,以實(shí)現(xiàn)某些高速數(shù)據(jù)的交換和處理.
根據(jù)前述腳本文件的實(shí)現(xiàn)方法,下面給出一個具體的應(yīng)用實(shí)例.腳本文件分成兩個區(qū)域:
(1)全局區(qū)域.全局區(qū)域中申請了內(nèi)存變量以及任務(wù)對象,任務(wù)對象在系統(tǒng)初始化時調(diào)用系統(tǒng)時間函數(shù),且與內(nèi)存變量strHour和strMinute關(guān)聯(lián).
(2)頁面區(qū)域,其下對象是局部的.頁面區(qū)域中設(shè)計(jì)了一個大小為5×10字符、名為InitDisp的頁面,頁面中申請了結(jié)構(gòu)體數(shù)組類型和字符類型的腳本變量.
示例的實(shí)現(xiàn)效果如圖3所示.在第0行第6個字節(jié)(即 Position="6,0")顯示靜態(tài)文本“東華大學(xué)”;在第2行第0個字節(jié)顯示動態(tài)按鈕“頁面1”,該動態(tài)按鈕顯示的內(nèi)容來源于結(jié)構(gòu)體數(shù)組變量Op t[byDrift].Value的內(nèi)容,點(diǎn)擊它會運(yùn)行頁面跳轉(zhuǎn)函數(shù),進(jìn)入Op t[byDrift].Uri內(nèi)容所指示的頁面;在第2行第10個字節(jié)顯示靜態(tài)按鈕“Change”,點(diǎn)擊它則運(yùn)行增加函數(shù),使腳本字符變量byD rift增加1,進(jìn)而改變動態(tài)按鈕所顯示的內(nèi)容;在第4行第0個字節(jié)顯示靜態(tài)文本“當(dāng)前時間:時 分”;在第4行第10個字節(jié)顯示動態(tài)文本,顯示內(nèi)容來自全局變量strHour,為系統(tǒng)時間的小時;在第4行第14個字節(jié)顯示動態(tài)文本,顯示內(nèi)容來自全局變量strMinute,為系統(tǒng)時間的分鐘.
圖3 示例顯示畫面Fig.3 Demonstration display frame
具體代碼如下所示:
選定單片機(jī)后,提高解釋型單片機(jī)系統(tǒng)的速度主要以提高存儲讀寫速度和程序解釋速度來實(shí)現(xiàn),具體方法如下:
(1)腳本程序調(diào)用的API函數(shù)固化在單片機(jī)ROM中,腳本文件不定義函數(shù).
(2)對定頻率事件,例如采集外設(shè)數(shù)據(jù)、申請任務(wù)對象和內(nèi)存變量.任務(wù)對象一旦被解釋器解釋后,就在系統(tǒng)中產(chǎn)生常駐的定時或者定頻率任務(wù),按照固定的時間或者固定的頻率進(jìn)行事件驅(qū)動,不需要被反復(fù)解釋.內(nèi)存變量區(qū)別于在腳本中的全局變量與局部變量,內(nèi)存變量在單片機(jī)內(nèi)部申請,對其進(jìn)行操作無需進(jìn)行多次腳本文件的操作(包括查找、定位和讀寫).
(3)一個腳本程序由多個頁面構(gòu)成,每一個頁面構(gòu)成一個文件,文件名取自頁面的名稱,FA T文件系統(tǒng)為文件名建立索引,頁面的切換通過相應(yīng)的頁面文件索引切換完成.
(4)讀取頁面文件至單片機(jī)內(nèi)存后對內(nèi)存中腳本進(jìn)行解釋.單片機(jī)對內(nèi)存的讀寫速度快于對SD卡的讀寫速度.
本文研究了單片機(jī)系統(tǒng)中解釋型應(yīng)用程序的實(shí)現(xiàn)方法.從數(shù)據(jù)、處理、表達(dá)3個方面闡明了腳本文件的具體實(shí)現(xiàn),并提出了如何提高解釋型單片機(jī)系統(tǒng)的處理速度.本文提出的解釋型程序執(zhí)行方法,效率不如編譯方式高,適用于對業(yè)務(wù)邏輯需頻繁更改但是對實(shí)時性要求不高的系統(tǒng).隨著單片機(jī)處理性能的提高,解釋型程序的執(zhí)行速度也會相應(yīng)提高,它的應(yīng)用場合一定會不斷擴(kuò)大.
[1] 何嶺松,賴紅.用于單片機(jī)測控裝置的微型腳本解釋器[J].測試技術(shù)學(xué)報(bào),2006,20(2):118-122.
[2] 張軍林,陽富民,胡貫榮.JavaScript語言解釋器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2003,30:124-125.
[3] 孫力,鮑健.嵌入式單片機(jī)應(yīng)用系統(tǒng)程序結(jié)構(gòu)[J].量子電子學(xué)報(bào),2000,17(3):279-281.
[4] 王開西,鄒華,楊放春.基于 XML腳本的增值業(yè)務(wù)解釋器的研究[J].北京郵電大學(xué)學(xué)報(bào),2004,27(S2):74-78.
[5] 項(xiàng)功宏,陳奇.基于單片機(jī)的提花機(jī)控制系統(tǒng)的設(shè)計(jì)[J].機(jī)床與液壓,2005(12):153-155.
[6] 王妍,張群.雙容水槽微機(jī)控制系統(tǒng)顯示軟件設(shè)計(jì)[J].遼寧大學(xué)學(xué)報(bào),2001,28(3):234-237.
[7] 邱士安.基于C8051F020單片機(jī)的控制系統(tǒng)應(yīng)用[J].大慶石油學(xué)院學(xué)報(bào),2006,30(5):72-74.
[8] 李艷,張琛星,李明輝.基于A T89C51單片機(jī)的鍋爐液位控制系統(tǒng)[J].自動控制,2006,25(4):54-57.
[9] 李長有,武學(xué)東,孫步勝,等.基于C8051F020的SD卡主控制器設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23(9-2):120-122.
[10] 張延園.JavaScript程序設(shè)計(jì)及應(yīng)用[M].西安:西北工業(yè)大學(xué)出版社,1997.
Research of Interpreted Programming for MCU Application
LU Yu-tinga,ZANG Zhu-pinga,OU YANG Wen-binb,ZENG Pei-fenga
(a.College of Computer Science and Technology;b.College of Information Science and Technology,Donghua University,Shanghai 201620,China)
The processing and functions are defined by configuration files,an interpreted MCU(Micro controller Unit)system which is easily configured for function modifications or system version up is proposed.The business logic is defined by scrip t files in XML format and stored in SD(Secure Digital)card.The scrip t is moved into memory,and read by XML parser.The defined functions are executed by corresponding API(Application Program Interface)function calling.The MCU interpreted system based on the hardware and the system software is convenient for business logic definition,modification,and implementation.
script ; interpreted ; application ; microcontroller unit(MCU);xml
TP 314
A
2009-10-19
陸宇霆(1985—),男,上海人,碩士,研究方向?yàn)閱纹瑱C(jī)系統(tǒng).E-mail:luyutingemail@gmail.com
臧珠萍(聯(lián)系人),女,講師,E-mail:zpzang@dhu.edu.cn
1671-0444(2010)03-0258-05