楊繼森,張 靜
(重慶理工大學(xué) 機(jī)械檢測技術(shù)與裝備教育部工程研究中心 ,重慶 400050)
?
嵌入式系統(tǒng)虛擬實(shí)驗(yàn)平臺仿真調(diào)試技術(shù)
楊繼森,張靜
(重慶理工大學(xué)機(jī)械檢測技術(shù)與裝備教育部工程研究中心 ,重慶400050)
為了提高嵌入式系統(tǒng)課程的教學(xué)質(zhì)量,加強(qiáng)學(xué)生的嵌入式系統(tǒng)程序設(shè)計(jì)與調(diào)試能力的培養(yǎng),根據(jù)課程教學(xué)內(nèi)容設(shè)計(jì)了便攜式的嵌入式系統(tǒng)課程虛擬實(shí)驗(yàn)平臺,針對虛擬實(shí)驗(yàn)平臺的程序仿真調(diào)試功能,提出了基于Proteus的遠(yuǎn)程仿真和基于GCC的本地仿真的兩種在線仿真調(diào)試技術(shù)。以虛擬實(shí)驗(yàn)平臺的行列式鍵盤實(shí)驗(yàn)項(xiàng)目為例,針對兩種在線仿真調(diào)試技術(shù)在虛擬實(shí)驗(yàn)平臺上分別進(jìn)行了程序仿真調(diào)試演示,進(jìn)一步完善了嵌入式系統(tǒng)課程虛擬實(shí)驗(yàn)平臺的功能。
嵌入式系統(tǒng);虛擬實(shí)驗(yàn)平臺;仿真調(diào)試技術(shù);Proteus;GCC
嵌入式技術(shù)是進(jìn)入21世紀(jì)以來PC時代IT領(lǐng)域最熱門的技術(shù)之一, 在各個領(lǐng)域都得到了廣泛的應(yīng)用。嵌入式技術(shù)獲得了巨大的發(fā)展機(jī)遇,嵌入式系統(tǒng)行業(yè)展現(xiàn)了美好的前景[1]。國內(nèi)很多高校的電子、計(jì)算機(jī)、信息技術(shù)等相關(guān)專業(yè)相繼開設(shè)了嵌入式系統(tǒng)課程,為國家和社會培養(yǎng)了大批優(yōu)秀的嵌入式系統(tǒng)人才[2-3]。重慶理工大學(xué)從2003年在原有C51單片機(jī)課程的基礎(chǔ)上,開設(shè)了以NXP公司的ARM7微控制器LPC21XX系列為基礎(chǔ)的嵌入式系統(tǒng)應(yīng)用相關(guān)課程。選擇該課程的除了電子類專業(yè)的學(xué)生之外,其他非電類專業(yè)的學(xué)生也相當(dāng)多,每學(xué)年都有超過10個班的學(xué)生選擇了嵌入式系統(tǒng)課程。嵌入式技術(shù)大量應(yīng)用于全國大學(xué)生電子設(shè)計(jì)競賽、“挑戰(zhàn)杯”全國大學(xué)生課外學(xué)術(shù)科技作品競賽、重慶市大學(xué)生單片機(jī)設(shè)計(jì)競賽等,并取得了顯著成績。
嵌入式系統(tǒng)課程的顯著特點(diǎn)是實(shí)踐性強(qiáng),因此,實(shí)驗(yàn)教學(xué)十分重要[4-6]。目前,大多數(shù)高校都是在嵌入式系統(tǒng)實(shí)驗(yàn)箱上開展實(shí)驗(yàn),這種方式可以讓學(xué)生直觀地了解嵌入式系統(tǒng)的原理,同時也存在一些不足[7-11]:1)近年來,由于高校擴(kuò)招,出現(xiàn)學(xué)生多、實(shí)驗(yàn)設(shè)備相對較少的現(xiàn)象,學(xué)生開展實(shí)驗(yàn)要分組、分批,實(shí)驗(yàn)時間較長且與理論課程有脫節(jié)的現(xiàn)象;2)這類實(shí)驗(yàn)箱價格昂貴,功能多而全,電路復(fù)雜,學(xué)生不易看懂,只能照本宣科地按照實(shí)驗(yàn)指導(dǎo)書機(jī)械地操作,不能真正參與到嵌入式系統(tǒng)的軟硬件設(shè)計(jì)中。
為了解決以上教學(xué)問題,更好地提高教學(xué)質(zhì)量,加強(qiáng)學(xué)生工程實(shí)踐能力的培養(yǎng),設(shè)計(jì)開發(fā)了一套嵌入式系統(tǒng)課程虛擬實(shí)驗(yàn)平臺[12],如圖1所示。
圖1 虛擬實(shí)驗(yàn)平臺
虛擬實(shí)驗(yàn)平臺在嵌入式系統(tǒng)課程教學(xué)中已經(jīng)開展了近兩年,反饋情況良好。1)借助虛擬實(shí)驗(yàn)平臺,學(xué)生可將實(shí)驗(yàn)項(xiàng)目帶回寢室、圖書館開展,徹底解決了實(shí)驗(yàn)設(shè)備少、上機(jī)困難的問題。同時也解決了嵌入式系統(tǒng)課程工程實(shí)踐性強(qiáng),有限的十幾個實(shí)驗(yàn)學(xué)時遠(yuǎn)遠(yuǎn)不能滿足實(shí)踐要求的難題。2)利用虛擬實(shí)驗(yàn)平臺,教師可以將實(shí)驗(yàn)項(xiàng)目帶入課堂,在課堂上利用虛擬實(shí)驗(yàn)平臺進(jìn)行現(xiàn)場操作、演示,使枯燥的理論知識更加形象、生動,極大地提高了學(xué)生的學(xué)習(xí)興趣。學(xué)生主動積極地利用課余時間開展嵌入式系統(tǒng)課程的學(xué)習(xí),從教學(xué)時間與教學(xué)空間上拓展嵌入式系統(tǒng)課程的學(xué)習(xí)范圍,使教學(xué)質(zhì)量得到了提高。3)所有的課程作業(yè)都在虛擬實(shí)驗(yàn)平臺上完成,可以即刻看到成果,學(xué)生學(xué)習(xí)興趣大增。
在近兩年的應(yīng)用過程中,學(xué)生反映虛擬實(shí)驗(yàn)平臺使用簡單方便,但存在程序調(diào)試功能相對較弱的問題,程序有問題時,代碼調(diào)試不方便。針對該問題,介紹了兩種基于嵌入式系統(tǒng)虛擬實(shí)驗(yàn)平臺的在線仿真調(diào)試技術(shù),以進(jìn)一步完善虛擬實(shí)驗(yàn)平臺的功能,促進(jìn)其在嵌入式系統(tǒng)課程實(shí)踐中教學(xué)的作用。
目前,虛擬實(shí)驗(yàn)平臺主要使用Proteus(7.10版本),軟件開發(fā)采用KeilMDK(4.23版本)平臺。Proteus軟件是英國LabcenterElectronics公司研發(fā)集模擬電路、數(shù)字電路、模/數(shù)混合電路以及多種微控制器系統(tǒng)為一體的系統(tǒng)設(shè)計(jì)和仿真平臺[13]。KeilMDK是ARM公司目前最新推出的針對各種嵌入式處理器的軟件開發(fā)工具,集成了業(yè)內(nèi)最領(lǐng)先的技術(shù),包括μvision4集成開發(fā)環(huán)境與Realview編譯器。支持ARM7、ARM9和最新的Cortex-M3核處理器的設(shè)計(jì)開發(fā),其工作界面友好、使用簡單方便,廣泛應(yīng)用于嵌入式技術(shù)開發(fā)中。
2.1基于Proteus的遠(yuǎn)程仿真調(diào)試技術(shù)
基于Proteus的遠(yuǎn)程仿真調(diào)試技術(shù)主要利用Proteus仿真軟件提供的專有遠(yuǎn)程仿真調(diào)試插件,該插件的安裝文件為“vdmagdi.exe”(版本為1.0),可以到Proteus仿真軟件的官方網(wǎng)站進(jìn)行下載。具體安裝操作步驟如下。
2.1.1插件安裝
安裝插件“vdmagdi.exe”到KeilMDK的安裝目錄,該插件同時支持ARM系列和C51系列單片機(jī)。安裝程序會安裝兩個動態(tài)鏈接庫文件到Keil安裝目錄下的ARMBIN文件夾中,VDM51.DLL支持C51系列,VDMARM.DLL支持ARM系列。可以在Keil安裝目錄下的ARM文件夾下新建文件夾VDMARM,并將VDMARM.DLL和VDM51.DLL文件拷貝到其中。
2.1.2修改Keil配置文件
打開Keil的安裝目錄,用文本編輯器打開Keil的配置文件TOOLS.INI,找到[ARMADS]欄目下的TDRV驅(qū)動配置項(xiàng),在最后一個配置項(xiàng)后面按順序新加一個驅(qū)動配置項(xiàng)TDRVx=VDMARMVDMARM.DLL("ProteusVSMAGDI"),其中“TDRVx”中的“x”為順序號,個別安裝程序會有所不同。將該新加驅(qū)動配置項(xiàng),加入到[ARMADS]欄目下支持ARM7/9系列的處理器配置序列CPUDLL0=SARM.DLL(TDRV0,TDRV5,TDRV6,TDRV7,TDRV8,TDRV9,TDRVx)。修改完成后,保存即可,配置結(jié)果如圖2所示(本主機(jī)驅(qū)動配置項(xiàng)為TDRV10)。
圖2 修改KEIL配置文件
2.1.3軟件配置
軟件配置主要配置Keil軟件和Proteus軟件。用Keil打開實(shí)驗(yàn)項(xiàng)目工程,在目標(biāo)選項(xiàng)配置中打開Debug調(diào)試選項(xiàng),在調(diào)試選項(xiàng)的下拉列表中選擇ProteusVSMAGDI選項(xiàng),同時在setting選項(xiàng)中配置Proteus遠(yuǎn)端網(wǎng)絡(luò)地址與端口號,由于Keil與Proteus同在一臺主機(jī)上,故可將IPAddress配置為“l(fā)ocalhost”或者“127.0.0.1”,Port配置為“8 000”,Logging配置為“APPCALLS”。打開虛擬實(shí)驗(yàn)平臺,勾選Proteus仿真軟件菜單欄的Debug選項(xiàng)下的UseRemoteDebugMonitor選項(xiàng),準(zhǔn)允Proteus啟動遠(yuǎn)程仿真調(diào)試功能,配置界面如圖3所示。
圖3 遠(yuǎn)程仿真調(diào)試通信端口配置
2.1.4遠(yuǎn)程仿真調(diào)試
遠(yuǎn)程仿真調(diào)試功能必須同時打開程序調(diào)試軟件Keil和終端仿真軟件Proteus。用Keil打開實(shí)驗(yàn)項(xiàng)目工程,編譯整個項(xiàng)目工程,生成HEX格式的二進(jìn)制文件,利用Proteus打開虛擬實(shí)驗(yàn)平臺,并通過MCU加載生成的HEX格式文件,返回到已打開的Keil實(shí)驗(yàn)項(xiàng)目工程,點(diǎn)擊Debug選項(xiàng)下“Start/StopDebugSession”直接進(jìn)入程序調(diào)試狀態(tài),同時Keil軟件通過遠(yuǎn)程仿真功能直接啟動Proteus虛擬實(shí)驗(yàn)平臺,進(jìn)入聯(lián)合仿真調(diào)試狀態(tài)。該實(shí)驗(yàn)項(xiàng)目為4×4行列式鍵盤掃描,利用上一個實(shí)驗(yàn)項(xiàng)目的液晶驅(qū)動模塊,將按鍵值顯示在液晶屏幕。鍵盤掃描程序如下:
#defineC03(0x0f<<16);
#defineR03(0x0f<<20);
int32readkey(void)
{
int32key= -1;
uint32i;
PINSEL1=0x00;
IO0DIR=C03;
IO0CLR=C03;
delay(5000);
if((IO0PIN& 0xf00000) == 0xf00000)
{ //nokeydown
returnkey;
}
delay(10000);
if((IO0PIN& 0xf00000) == 0xf00000)
{//nokeydown
returnkey;
}
for(i=0;i<4;i++)
{
IO0SET=C03;
IO0CLR=1<<(i + 16);
delay(1000);
if((IO0PIN& 0xf00000) == 0xf00000)
{
continue;
}
switch(IO0PIN& 0xf00000)
{
case0xe00000:
key= 0 + i * 4;break;
case0xd00000:
key= 1 + i * 4;break;
case0xb00000:
key= 2 + i * 4;break;
case0x700000:
key= 3 + i * 4;break;
}
IO0CLR=C03;
while((IO0PIN& 0xf00000) != 0xf00000);
break;
}
returnkey;
}
聯(lián)合仿真調(diào)試工作界面如圖4所示。4×4行列式鍵盤連接在LPC2138的引腳P0.16~P0.23,其中P0.16~P0.19作為列掃描,P0.20~P0.23作為行掃描。在遠(yuǎn)程仿真調(diào)試狀態(tài)下,Keil軟件作為控制端,控制程序的執(zhí)行過程。在Keil中可以查看程序中的變量、寄存器值、外設(shè)配置參數(shù)等,而程序執(zhí)行狀態(tài)直接在Proteus端的實(shí)驗(yàn)項(xiàng)目中體現(xiàn)出來??稍趻呙璩绦蛑墟I值判斷處設(shè)置斷點(diǎn),使程序全速運(yùn)行,當(dāng)按下鍵盤的第二號按鍵時,程序運(yùn)行到鍵值判斷斷點(diǎn)位置,此時進(jìn)行“單步”調(diào)試,每運(yùn)行一步程序可以同時查看程序中變量的狀態(tài)以及微控制器的引腳輸出電平狀態(tài),可以看到,程序進(jìn)行了鍵值計(jì)算并將計(jì)算出的鍵值存放在變量“key”中,變量“key”的值可以通過Watch窗口進(jìn)行查看或者將鼠標(biāo)放到變量上時自動以浮動窗口的形式顯示其數(shù)值。程序聯(lián)合仿真調(diào)試簡單、方便,功能強(qiáng)大,能夠加快項(xiàng)目設(shè)計(jì)開發(fā)進(jìn)度。
圖4 基于PROTEUS的遠(yuǎn)程仿真調(diào)試
2.2基于GCC的本地仿真調(diào)試技術(shù)
基于Proteus的遠(yuǎn)程仿真調(diào)試技術(shù)能夠更好地利用Keil軟件的強(qiáng)大仿真調(diào)試功能,但該技術(shù)需要通過驅(qū)動程序使Keil和Proteus相互配合完成。由于計(jì)算機(jī)系統(tǒng)及環(huán)境之間的差異性,學(xué)生在使用過程中,個別計(jì)算機(jī)進(jìn)行遠(yuǎn)程仿真調(diào)試時出現(xiàn)目標(biāo)系統(tǒng)無法遠(yuǎn)程連接的問題。
基于GCC的本地仿真調(diào)試技術(shù)可以完美解決該問題。GCC(GNUcompilercollection,GCC)是一套由GNU工程開發(fā)的支持多種編程語言的編譯器,是以GPL許可證所發(fā)行的自由軟件(開源軟件)[14]。利用GCC編譯器可以產(chǎn)生自帶完整調(diào)試信息的ELF格式文件[15],直接在Proteus中進(jìn)行源碼級仿真調(diào)試,不再需要Keil軟件的配合。具體操作步驟如下。
1)安裝GCC編譯器工具鏈。目前,常用的支持GCC工具鏈的軟件包有SourceryG++和WinARM,本項(xiàng)目選擇SourceryG++。SourceryG++是Codesourcery提供的GCC工具鏈編譯器,Codesourcery針對不同的用戶提供的多個版本的SourceryG++,這里選擇免費(fèi)的輕量級精簡版本SourceryG++LiteEdition??梢缘紺odesourcery的官方網(wǎng)絡(luò)注冊下載新版本的SourceryG++LiteEdition[16],按缺省選項(xiàng)在計(jì)算機(jī)中安裝SourceryG++。
2)配置編譯環(huán)境。Keil軟件給用戶提供了使用第三方編譯工具的途徑。利用Keil軟件打開實(shí)驗(yàn)項(xiàng)目工程,點(diǎn)擊菜單欄“Project”菜單下的“Manage”下的“Components,Environment,Books”。在打開的組件環(huán)境配置對話框中選擇“Folders/Extensions”選項(xiàng),點(diǎn)選“UseGCC”選擇,并在GNU-Tool_Prefix編輯框中輸入GCC工具鏈的前綴“arm-none-eabi-”,在GNU-ToolFolder編輯框中選擇SourceryG++LiteEdition的安裝目錄,配置界面如圖5所示。
圖5 GCC工具鏈配置
3)本地仿真調(diào)試。建立基于GCC的實(shí)驗(yàn)項(xiàng)目工程,編譯生成ELF格式文件,利用Proteus打開虛擬實(shí)驗(yàn)平臺,并通過MCU加載生成的ELF格式文件。直接在Proteus中點(diǎn)擊Step選項(xiàng)進(jìn)入源碼級程序仿真調(diào)試。實(shí)驗(yàn)項(xiàng)目同樣為4×4行列式鍵盤掃描,利用串行接口模塊將按鍵值顯示在仿真平臺的虛擬終端上。本地仿真調(diào)試工作界面如圖6所示。
圖6 基于GCC的本地仿真調(diào)試
本地仿真調(diào)試技術(shù)利用ELF格式文件的自帶完整調(diào)試信息,不再需要Keil軟件作為遠(yuǎn)程控制端進(jìn)行程序仿真調(diào)試控制。Proteus軟件Debug選項(xiàng)下的ARM7選項(xiàng)提供了包括“SourceCode”“Variables”“CPURegisters”等6個子窗口。在SourceCode子窗口可以看到程序源代碼,并提供了“StepInto”“StepOver”“StepOut”等多種常用的程序代碼調(diào)試功能。用戶可以任意設(shè)置斷點(diǎn),并進(jìn)行多種方式的代碼調(diào)試。Variables窗口可以實(shí)時地顯示當(dāng)前程序中的變量值, 以方便用戶進(jìn)行查看。其他的CPURegisters窗口、RAM窗口等都為用戶提供了方便查看各類參數(shù)的技術(shù)手段,使用非常簡單、方便。
嵌入式系統(tǒng)虛擬實(shí)驗(yàn)平臺不僅解決了嵌入式系統(tǒng)課程實(shí)驗(yàn)設(shè)備相對較少,學(xué)生實(shí)踐訓(xùn)練環(huán)節(jié)薄弱的問題,而且能夠隨時隨地讓學(xué)生進(jìn)入實(shí)驗(yàn)項(xiàng)目,走進(jìn)教學(xué)的課堂,從時間與空間2個方面拓展教學(xué)范圍,提高教學(xué)質(zhì)量。經(jīng)過近2年的不斷改進(jìn)、使用,目前功能已經(jīng)相對比較完善,逐漸得到了學(xué)生的認(rèn)可?;赑roteus的遠(yuǎn)程仿真調(diào)試技術(shù)與基于GCC的本地仿真調(diào)試技術(shù)的引入將使虛擬實(shí)驗(yàn)平臺的程序調(diào)試功能進(jìn)一步得到提高,易用性、方便性進(jìn)一步得到加強(qiáng)。使虛擬實(shí)驗(yàn)平臺在嵌入式系統(tǒng)課程教學(xué)中作用越來越大,促進(jìn)教學(xué)質(zhì)量的進(jìn)一步提升。
[1]王汝傳,孫力娟.物聯(lián)網(wǎng)技術(shù)導(dǎo)論[M].北京:清華大學(xué)出版社,2011.
[2]許童羽,陳春玲,孫國凱.面向卓越工程師培養(yǎng)目標(biāo)的嵌入式系統(tǒng)課程實(shí)踐教學(xué)改革[J].高等農(nóng)業(yè)教育,2013(4):74-76.
[3]楊衛(wèi)軍,羅積軍,樊莉,等.伯克利嵌入式系統(tǒng)課程教學(xué)的特色與啟示[J].實(shí)驗(yàn)室研究與探索,2012,31(5):147-149.
[4]李秀娟,張曉東,魯可,等.“嵌入式系統(tǒng)”開放實(shí)驗(yàn)室建設(shè)與實(shí)踐[J].實(shí)驗(yàn)室研究與探索,2011,30(5):156-158.
[5]梁宏.搭建實(shí)驗(yàn)實(shí)踐一體化平臺深化實(shí)驗(yàn)實(shí)踐教學(xué)改革[J].實(shí)驗(yàn)技術(shù)與管理,2013,30(5):1-4.
[6]陳佳聞.嵌入式實(shí)驗(yàn)教學(xué)系統(tǒng)開發(fā)與應(yīng)用[J].山東農(nóng)業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,42(3):448-450.
[7]馮其紅,胡偉,王增寶.改革實(shí)驗(yàn)教學(xué)模式培養(yǎng)大學(xué)生的工程實(shí)踐能力[J].實(shí)驗(yàn)室研究與探索,2013,32(2):130-132.
[8]杜月林.構(gòu)建多層次全方位實(shí)驗(yàn)平臺體系培養(yǎng)高素質(zhì)創(chuàng)新型人才[J].實(shí)驗(yàn)室研究與探索,2013,32(3):202-204.
[9]權(quán)寧一,權(quán)曉林.嵌入式系統(tǒng)專業(yè)實(shí)驗(yàn)教學(xué)改革的探索與實(shí)踐[J].實(shí)驗(yàn)技術(shù)與管理,2011,28(3):146-147.
[10]汪燦華,陳慶梅,張康,等.虛擬實(shí)驗(yàn)平臺在嵌入式系統(tǒng)實(shí)驗(yàn)中的應(yīng)用[J].實(shí)驗(yàn)室研究與探索,2012,31(10):67-69.
[11]孫愛晶,范九倫,趙小強(qiáng).卓越背景下實(shí)踐教學(xué)方法改革與學(xué)生工程實(shí)踐能力培養(yǎng)[J].中國大學(xué)教學(xué),2013(6):79-80.
[12]楊繼森,楊奕,張靜.虛擬實(shí)驗(yàn)平臺在嵌入式系統(tǒng)教學(xué)改革中的應(yīng)用[J].實(shí)驗(yàn)室研究與探索,2011,30(2):51-54.
[13]周靈彬,匡載華,張靖武.基于Proteus的電子產(chǎn)品仿真設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2010(9):74-76.
[14]胡恩華.GCC技術(shù)參考大全[M].北京:清華大學(xué)出版社,2004.
[15]付逢春.GNU工具鏈在軟件構(gòu)建中的應(yīng)用[J].軟件導(dǎo)刊,2012(7):9-11.
[16]CODESOURCERY.SourceryG++LiteEdition[EB/OL].[2013-05-12].http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/.
Simulation Debugging Techniques for Virtual Experimental Platform in Embedded System Curriculum Reform
YANG Jisen,ZHANG Jing
(EngineeringResearchCenterofMechanicalTestingTechnologicalandEquipment,MinistryofEducation,ChongqingUniversityofTechnology,Chongqing400050,China)
Inordertoincreasetheteachingqualityofembeddedsystemcourseandcultivatetheabilitiesofembeddedsystemprogramminganddebugging,virtualexperimentalplatformforembeddedsystemcourseisdesignedbasedonthecontentofembeddedsystemcourse.Twokindsofsource-leveldebuggingtechniquesarepresentedtoenhancetheprogramdebuggingfunctionsofvirtualexperimentalplatform.OneistheremotesimulationdebuggingtechniquesbasedonPROTEUS,theotheristhelocalsimulationdebuggingtechniquesbasedonGCC.Thetwokindsofdebuggingtechniquesaredemonstratedrespectivelybytheexperimentalprojectofdeterminantkeyboardandthefunctionsofvirtualexperimentalplatformareimprovedfurther.
embeddedsystem;virtualexperimentalplatform;simulationdebuggingtechniques;Proteus;GCC
2015-04-07;修改日期: 2016-06-30
重慶市高等教育教學(xué)改革研究項(xiàng)目(143013);重慶理工大學(xué)高等教育教學(xué)改革研究重大項(xiàng)目(2014ZD10);重慶理工大學(xué)高等教育教學(xué)改革研究項(xiàng)目(2015YB11)。
楊繼森(1977-),男,博士,副教授,主要從事嵌入式系統(tǒng)及智能儀器方面的教學(xué)與研究工作。
G424;TP301
Adoi:10.3969/j.issn.1672-4550.2016.04.019