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