劉源楊 , 馬建輝 , 王知學(xué) , 王 崗
(1.山東省汽車電子重點(diǎn)實(shí)驗(yàn)室 山東 濟(jì)南 250014;2.山東省科學(xué)院自動(dòng)化研究所 山東 濟(jì)南 250014)
在嵌入式軟件的開發(fā)階段,需要經(jīng)過多次設(shè)計(jì)迭代并進(jìn)行充分測(cè)試以提高軟件可靠性和完善產(chǎn)品性能。采用軟件版本的形式對(duì)設(shè)計(jì)過程建立里程碑,以版本標(biāo)號(hào)的形式對(duì)各個(gè)軟件版本進(jìn)行標(biāo)識(shí)和區(qū)分,然后在計(jì)算機(jī)上以文檔管理的形式或者通過專業(yè)的版本控制工具對(duì)各個(gè)版本軟件的源代碼及其二進(jìn)制文件進(jìn)行整理及控制是一種有效的軟件開發(fā)管理方式并已被廣泛采用[1]。在開發(fā)過程中,為了提高設(shè)計(jì)效率,開發(fā)和測(cè)試并行進(jìn)行,為了測(cè)試缺陷、查找缺陷原因或定位缺陷的引入時(shí)間,可能需要對(duì)不同版本的軟件進(jìn)行測(cè)試。當(dāng)測(cè)試出某個(gè)缺陷后,需要定位當(dāng)前運(yùn)行軟件的版本號(hào)進(jìn)行進(jìn)一步分析,由于硬件版本的相對(duì)固定性,無法通過檢查硬件電路的手段來判斷當(dāng)前運(yùn)行軟件的版本,如果軟件本身包含版本信息,通過一種手段從軟件中獲得版本信息,便可以解決上述問題。本文通過采用預(yù)留的MCU IO管腳進(jìn)行軟件版本的獲取,通過在單個(gè)IO管腳上實(shí)現(xiàn)按鍵檢測(cè)與LED驅(qū)動(dòng)的復(fù)用[2],按鍵觸發(fā)嵌入式設(shè)備輸出當(dāng)前軟件版本信息,設(shè)備以特定方式LED脈沖閃爍的表現(xiàn)形式輸出版本信息。這種方式避免了對(duì)代碼二進(jìn)制文件的專業(yè)分析和數(shù)據(jù)查找,可以高效直觀得在測(cè)試現(xiàn)場(chǎng)獲取版本信息,而且因?yàn)槠浜?jiǎn)單易實(shí)現(xiàn)、占用資源少,在嵌入式設(shè)備領(lǐng)域具有廣泛的適用性。
嵌入式設(shè)備的軟件版本標(biāo)號(hào)采用帶小數(shù)點(diǎn)的浮點(diǎn)數(shù)形式,格式為 X.Y,X和Y的取值區(qū)間為[0,9],共計(jì)可包含0.1-9.9的99個(gè)版本,由于浮點(diǎn)數(shù)運(yùn)算存在誤差[3],每次軟件定版時(shí),在非易失性存儲(chǔ)器中存儲(chǔ)一個(gè)取值區(qū)間為[1,99]的整型常量VERSION來表示版本號(hào),VERSION=(X.Y)*10,從版本號(hào)常量VERSION中提取X和Y的計(jì)算公式如下:
X等于版本號(hào)常量除以10的模,Y等于版本號(hào)常量除以10的余數(shù)。
設(shè)計(jì)電路實(shí)現(xiàn)按鍵檢測(cè)和LED驅(qū)動(dòng)復(fù)用IO腳,當(dāng)IO腳為輸入方向時(shí),通過IO狀態(tài)的讀取可以檢測(cè)按鍵的按下和彈起狀態(tài),當(dāng)IO腳為輸出方向時(shí),可以設(shè)置高低電平實(shí)現(xiàn)LED的亮滅控制。具體應(yīng)用時(shí),首先設(shè)置IO腳為輸入方向,周期檢測(cè)按鍵操作,檢測(cè)到有效的按鍵按下操作后,當(dāng)按鍵彈起時(shí)將IO腳設(shè)置為輸出方向,以PWM的方式驅(qū)動(dòng)LED,首先以頻率為2 Hz、占空比為50%的PWM形式輸出X個(gè)周期的方波脈沖,然后間歇3 s,以頻率為1 Hz、占空比為50%的PWM形式輸出Y個(gè)周期的方波脈沖,進(jìn)行軟件版本的顯示[4],顯示完成后再次設(shè)置IO腳為輸入方向。
通過在按鍵按下并彈起后統(tǒng)計(jì)3 s間歇時(shí)間前后的LED閃爍次數(shù),便可以得到X和Y的數(shù)值,軟件版本號(hào)計(jì)算公式如下:
硬件電路包括按鍵、LED、限流電阻R1和上拉電阻R2四個(gè)元件,其電路如圖1所示。IO腳設(shè)置為輸入方向時(shí),按鍵按下,R1端電壓為VCC,LED截止處于熄滅狀態(tài),由于上拉電阻R2的作用,IO腳電平為高,狀態(tài)值為1,當(dāng)按鍵彈起,R1端電壓為0,LED截止,IO腳電平為低,狀態(tài)值為0。IO設(shè)置為輸出方向時(shí),在按鍵處于彈起狀態(tài)的條件下,IO電平為高時(shí),LED導(dǎo)通點(diǎn)亮,IO電平為低時(shí),LED截止熄滅,當(dāng)按鍵按下時(shí),LED截止熄滅??蛇x擇紅、黃、藍(lán)不同顏色的LED,不同顏色LED的導(dǎo)通電壓不同,決定所使用的限流電阻R1的阻值也不相同,同時(shí)調(diào)整R1阻值,可以調(diào)節(jié)LED燈的亮度[5]。
圖1 硬件電路圖Fig.1 Hardware circuit
軟件設(shè)計(jì)流程如圖2所示。首先設(shè)置該IO腳為輸入方向,以20 ms為周期讀取IO狀態(tài),正常狀態(tài)即按鍵處于彈起狀態(tài)時(shí),IO狀態(tài)為0,按下按鍵時(shí)IO狀態(tài)為1,當(dāng)檢測(cè)到IO狀態(tài)為1時(shí)啟動(dòng)對(duì)按鍵的軟件去抖處理[6],當(dāng)檢測(cè)到一次有效的按鍵按下操作后,按鍵彈起時(shí)設(shè)置IO腳為輸出方向,開始進(jìn)行LED的驅(qū)動(dòng)控制。
LED控制方式如下:首先根據(jù)公式(1)和(2)計(jì)算出軟件版本號(hào)中的X和Y,然后以頻率為2 Hz、占空比為50%的PWM方式輸出X個(gè)周期方波脈沖,此時(shí)LED周期閃爍,閃爍次數(shù)等于X,最后一個(gè)周期結(jié)束后熄滅LED,然后啟動(dòng)3 s間歇定時(shí),定時(shí)到達(dá)后以頻率為1Hz、占空比為50%的方式輸出Y個(gè)周期方波脈沖,此時(shí)LED周期閃爍次數(shù)等于Y,最后一個(gè)周期結(jié)束后熄滅LED,并再次設(shè)置管腳為輸入方向。
文中通過MCU的單個(gè)IO管腳復(fù)用實(shí)現(xiàn)按鍵檢測(cè)及LED驅(qū)動(dòng),通過按鍵的方式觸發(fā)讀取軟件版本信息操作,避免了復(fù)雜的診斷協(xié)議和診斷接口,通過LED脈沖閃爍的方式輸出軟件版本信息,直觀方便,電路設(shè)計(jì)和程序設(shè)計(jì)簡(jiǎn)單,占用軟硬件資源很少,可以方便地在不同的嵌入式設(shè)備上實(shí)現(xiàn),具有廣泛的適用性和極強(qiáng)的實(shí)用價(jià)值。
圖2 軟件設(shè)計(jì)流程圖Fig.2 Software design flow
[1]李欣,張路,謝冰,等.基于構(gòu)件的軟件版本管理系統(tǒng)[J].電子學(xué)報(bào),2000(11):119-121.LI Xin,ZHANG LU,XIE Bin,et al.Component based software version management system[J].Acta Electronica Sinica,2000,(11):119-121.
[2]高瓊,張全營(yíng).基于R5G0C314DA芯片的IO口復(fù)用[J].家電科技,2012(6):70-71.GAO Qiong,ZHANG Quan-ying.IO port reuse based on R5G0C314DA chip[J].China Appliance Technology,2012,(6):70-71.
[3]杜叔強(qiáng).淺析C語言中的浮點(diǎn)數(shù) [J].蘭州工業(yè)高等專科學(xué)校學(xué)報(bào),2010(5):26-28.DU Shu-qiang.Analysis of floating-point numbers of C language[J].Journal of Lanzhou Polytechnic College,2010,(5):26-28.
[4]山東省科學(xué)院自動(dòng)化研究所.一種獲取嵌入式軟件版本信息的方法:中國(guó),201210488667.1[P].2012-11-27.
[5]美國(guó)國(guó)家半導(dǎo)體公司.發(fā)光二極管(LED)的相關(guān)應(yīng)用及驅(qū)動(dòng)技術(shù)[J].世界電子元器件,2007,(12):94-97 National Semiconductor.Application and Driver Technology of LED[J].Global Electronics China,2007,(12):94-97
[6]魯慶賓.矩陣式鍵盤部分連擊的處理[J].電子設(shè)計(jì)工程,2011(17):34-36.LU Qing-bin.Processing of the matrix keyboard parts combo[J].Electronic Design Engineering,2011(17):34-36.