嵌入式系统虚拟实验平台仿真调试技术
2016-09-18杨继森
杨继森,张 静
(重庆理工大学 机械检测技术与装备教育部工程研究中心 ,重庆 400050)
嵌入式系统虚拟实验平台仿真调试技术
杨继森,张静
(重庆理工大学机械检测技术与装备教育部工程研究中心 ,重庆400050)
为了提高嵌入式系统课程的教学质量,加强学生的嵌入式系统程序设计与调试能力的培养,根据课程教学内容设计了便携式的嵌入式系统课程虚拟实验平台,针对虚拟实验平台的程序仿真调试功能,提出了基于Proteus的远程仿真和基于GCC的本地仿真的两种在线仿真调试技术。以虚拟实验平台的行列式键盘实验项目为例,针对两种在线仿真调试技术在虚拟实验平台上分别进行了程序仿真调试演示,进一步完善了嵌入式系统课程虚拟实验平台的功能。
嵌入式系统;虚拟实验平台;仿真调试技术;Proteus;GCC
嵌入式技术是进入21世纪以来PC时代IT领域最热门的技术之一, 在各个领域都得到了广泛的应用。嵌入式技术获得了巨大的发展机遇,嵌入式系统行业展现了美好的前景[1]。国内很多高校的电子、计算机、信息技术等相关专业相继开设了嵌入式系统课程,为国家和社会培养了大批优秀的嵌入式系统人才[2-3]。重庆理工大学从2003年在原有C51单片机课程的基础上,开设了以NXP公司的ARM7微控制器LPC21XX系列为基础的嵌入式系统应用相关课程。选择该课程的除了电子类专业的学生之外,其他非电类专业的学生也相当多,每学年都有超过10个班的学生选择了嵌入式系统课程。嵌入式技术大量应用于全国大学生电子设计竞赛、“挑战杯”全国大学生课外学术科技作品竞赛、重庆市大学生单片机设计竞赛等,并取得了显著成绩。
1 课程教学现状
嵌入式系统课程的显著特点是实践性强,因此,实验教学十分重要[4-6]。目前,大多数高校都是在嵌入式系统实验箱上开展实验,这种方式可以让学生直观地了解嵌入式系统的原理,同时也存在一些不足[7-11]:1)近年来,由于高校扩招,出现学生多、实验设备相对较少的现象,学生开展实验要分组、分批,实验时间较长且与理论课程有脱节的现象;2)这类实验箱价格昂贵,功能多而全,电路复杂,学生不易看懂,只能照本宣科地按照实验指导书机械地操作,不能真正参与到嵌入式系统的软硬件设计中。
为了解决以上教学问题,更好地提高教学质量,加强学生工程实践能力的培养,设计开发了一套嵌入式系统课程虚拟实验平台[12],如图1所示。
图1 虚拟实验平台
虚拟实验平台在嵌入式系统课程教学中已经开展了近两年,反馈情况良好。1)借助虚拟实验平台,学生可将实验项目带回寝室、图书馆开展,彻底解决了实验设备少、上机困难的问题。同时也解决了嵌入式系统课程工程实践性强,有限的十几个实验学时远远不能满足实践要求的难题。2)利用虚拟实验平台,教师可以将实验项目带入课堂,在课堂上利用虚拟实验平台进行现场操作、演示,使枯燥的理论知识更加形象、生动,极大地提高了学生的学习兴趣。学生主动积极地利用课余时间开展嵌入式系统课程的学习,从教学时间与教学空间上拓展嵌入式系统课程的学习范围,使教学质量得到了提高。3)所有的课程作业都在虚拟实验平台上完成,可以即刻看到成果,学生学习兴趣大增。
在近两年的应用过程中,学生反映虚拟实验平台使用简单方便,但存在程序调试功能相对较弱的问题,程序有问题时,代码调试不方便。针对该问题,介绍了两种基于嵌入式系统虚拟实验平台的在线仿真调试技术,以进一步完善虚拟实验平台的功能,促进其在嵌入式系统课程实践中教学的作用。
2 仿真调试技术
目前,虚拟实验平台主要使用Proteus(7.10版本),软件开发采用KeilMDK(4.23版本)平台。Proteus软件是英国LabcenterElectronics公司研发集模拟电路、数字电路、模/数混合电路以及多种微控制器系统为一体的系统设计和仿真平台[13]。KeilMDK是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具,集成了业内最领先的技术,包括μvision4集成开发环境与Realview编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器的设计开发,其工作界面友好、使用简单方便,广泛应用于嵌入式技术开发中。
2.1基于Proteus的远程仿真调试技术
基于Proteus的远程仿真调试技术主要利用Proteus仿真软件提供的专有远程仿真调试插件,该插件的安装文件为“vdmagdi.exe”(版本为1.0),可以到Proteus仿真软件的官方网站进行下载。具体安装操作步骤如下。
2.1.1插件安装
安装插件“vdmagdi.exe”到KeilMDK的安装目录,该插件同时支持ARM系列和C51系列单片机。安装程序会安装两个动态链接库文件到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驱动配置项,在最后一个配置项后面按顺序新加一个驱动配置项TDRVx=VDMARMVDMARM.DLL("ProteusVSMAGDI"),其中“TDRVx”中的“x”为顺序号,个别安装程序会有所不同。将该新加驱动配置项,加入到[ARMADS]栏目下支持ARM7/9系列的处理器配置序列CPUDLL0=SARM.DLL(TDRV0,TDRV5,TDRV6,TDRV7,TDRV8,TDRV9,TDRVx)。修改完成后,保存即可,配置结果如图2所示(本主机驱动配置项为TDRV10)。
图2 修改KEIL配置文件
2.1.3软件配置
软件配置主要配置Keil软件和Proteus软件。用Keil打开实验项目工程,在目标选项配置中打开Debug调试选项,在调试选项的下拉列表中选择ProteusVSMAGDI选项,同时在setting选项中配置Proteus远端网络地址与端口号,由于Keil与Proteus同在一台主机上,故可将IPAddress配置为“localhost”或者“127.0.0.1”,Port配置为“8 000”,Logging配置为“APPCALLS”。打开虚拟实验平台,勾选Proteus仿真软件菜单栏的Debug选项下的UseRemoteDebugMonitor选项,准允Proteus启动远程仿真调试功能,配置界面如图3所示。
图3 远程仿真调试通信端口配置
2.1.4远程仿真调试
远程仿真调试功能必须同时打开程序调试软件Keil和终端仿真软件Proteus。用Keil打开实验项目工程,编译整个项目工程,生成HEX格式的二进制文件,利用Proteus打开虚拟实验平台,并通过MCU加载生成的HEX格式文件,返回到已打开的Keil实验项目工程,点击Debug选项下“Start/StopDebugSession”直接进入程序调试状态,同时Keil软件通过远程仿真功能直接启动Proteus虚拟实验平台,进入联合仿真调试状态。该实验项目为4×4行列式键盘扫描,利用上一个实验项目的液晶驱动模块,将按键值显示在液晶屏幕。键盘扫描程序如下:
#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;
}
联合仿真调试工作界面如图4所示。4×4行列式键盘连接在LPC2138的引脚P0.16~P0.23,其中P0.16~P0.19作为列扫描,P0.20~P0.23作为行扫描。在远程仿真调试状态下,Keil软件作为控制端,控制程序的执行过程。在Keil中可以查看程序中的变量、寄存器值、外设配置参数等,而程序执行状态直接在Proteus端的实验项目中体现出来。可在扫描程序中键值判断处设置断点,使程序全速运行,当按下键盘的第二号按键时,程序运行到键值判断断点位置,此时进行“单步”调试,每运行一步程序可以同时查看程序中变量的状态以及微控制器的引脚输出电平状态,可以看到,程序进行了键值计算并将计算出的键值存放在变量“key”中,变量“key”的值可以通过Watch窗口进行查看或者将鼠标放到变量上时自动以浮动窗口的形式显示其数值。程序联合仿真调试简单、方便,功能强大,能够加快项目设计开发进度。
图4 基于PROTEUS的远程仿真调试
2.2基于GCC的本地仿真调试技术
基于Proteus的远程仿真调试技术能够更好地利用Keil软件的强大仿真调试功能,但该技术需要通过驱动程序使Keil和Proteus相互配合完成。由于计算机系统及环境之间的差异性,学生在使用过程中,个别计算机进行远程仿真调试时出现目标系统无法远程连接的问题。
基于GCC的本地仿真调试技术可以完美解决该问题。GCC(GNUcompilercollection,GCC)是一套由GNU工程开发的支持多种编程语言的编译器,是以GPL许可证所发行的自由软件(开源软件)[14]。利用GCC编译器可以产生自带完整调试信息的ELF格式文件[15],直接在Proteus中进行源码级仿真调试,不再需要Keil软件的配合。具体操作步骤如下。
1)安装GCC编译器工具链。目前,常用的支持GCC工具链的软件包有SourceryG++和WinARM,本项目选择SourceryG++。SourceryG++是Codesourcery提供的GCC工具链编译器,Codesourcery针对不同的用户提供的多个版本的SourceryG++,这里选择免费的轻量级精简版本SourceryG++LiteEdition。可以到Codesourcery的官方网络注册下载新版本的SourceryG++LiteEdition[16],按缺省选项在计算机中安装SourceryG++。
2)配置编译环境。Keil软件给用户提供了使用第三方编译工具的途径。利用Keil软件打开实验项目工程,点击菜单栏“Project”菜单下的“Manage”下的“Components,Environment,Books”。在打开的组件环境配置对话框中选择“Folders/Extensions”选项,点选“UseGCC”选择,并在GNU-Tool_Prefix编辑框中输入GCC工具链的前缀“arm-none-eabi-”,在GNU-ToolFolder编辑框中选择SourceryG++LiteEdition的安装目录,配置界面如图5所示。
图5 GCC工具链配置
3)本地仿真调试。建立基于GCC的实验项目工程,编译生成ELF格式文件,利用Proteus打开虚拟实验平台,并通过MCU加载生成的ELF格式文件。直接在Proteus中点击Step选项进入源码级程序仿真调试。实验项目同样为4×4行列式键盘扫描,利用串行接口模块将按键值显示在仿真平台的虚拟终端上。本地仿真调试工作界面如图6所示。
图6 基于GCC的本地仿真调试
本地仿真调试技术利用ELF格式文件的自带完整调试信息,不再需要Keil软件作为远程控制端进行程序仿真调试控制。Proteus软件Debug选项下的ARM7选项提供了包括“SourceCode”“Variables”“CPURegisters”等6个子窗口。在SourceCode子窗口可以看到程序源代码,并提供了“StepInto”“StepOver”“StepOut”等多种常用的程序代码调试功能。用户可以任意设置断点,并进行多种方式的代码调试。Variables窗口可以实时地显示当前程序中的变量值, 以方便用户进行查看。其他的CPURegisters窗口、RAM窗口等都为用户提供了方便查看各类参数的技术手段,使用非常简单、方便。
3 结束语
嵌入式系统虚拟实验平台不仅解决了嵌入式系统课程实验设备相对较少,学生实践训练环节薄弱的问题,而且能够随时随地让学生进入实验项目,走进教学的课堂,从时间与空间2个方面拓展教学范围,提高教学质量。经过近2年的不断改进、使用,目前功能已经相对比较完善,逐渐得到了学生的认可。基于Proteus的远程仿真调试技术与基于GCC的本地仿真调试技术的引入将使虚拟实验平台的程序调试功能进一步得到提高,易用性、方便性进一步得到加强。使虚拟实验平台在嵌入式系统课程教学中作用越来越大,促进教学质量的进一步提升。
[1]王汝传,孙力娟.物联网技术导论[M].北京:清华大学出版社,2011.
[2]许童羽,陈春玲,孙国凯.面向卓越工程师培养目标的嵌入式系统课程实践教学改革[J].高等农业教育,2013(4):74-76.
[3]杨卫军,罗积军,樊莉,等.伯克利嵌入式系统课程教学的特色与启示[J].实验室研究与探索,2012,31(5):147-149.
[4]李秀娟,张晓东,鲁可,等.“嵌入式系统”开放实验室建设与实践[J].实验室研究与探索,2011,30(5):156-158.
[5]梁宏.搭建实验实践一体化平台深化实验实践教学改革[J].实验技术与管理,2013,30(5):1-4.
[6]陈佳闻.嵌入式实验教学系统开发与应用[J].山东农业大学学报(自然科学版),2011,42(3):448-450.
[7]冯其红,胡伟,王增宝.改革实验教学模式培养大学生的工程实践能力[J].实验室研究与探索,2013,32(2):130-132.
[8]杜月林.构建多层次全方位实验平台体系培养高素质创新型人才[J].实验室研究与探索,2013,32(3):202-204.
[9]权宁一,权晓林.嵌入式系统专业实验教学改革的探索与实践[J].实验技术与管理,2011,28(3):146-147.
[10]汪灿华,陈庆梅,张康,等.虚拟实验平台在嵌入式系统实验中的应用[J].实验室研究与探索,2012,31(10):67-69.
[11]孙爱晶,范九伦,赵小强.卓越背景下实践教学方法改革与学生工程实践能力培养[J].中国大学教学,2013(6):79-80.
[12]杨继森,杨奕,张静.虚拟实验平台在嵌入式系统教学改革中的应用[J].实验室研究与探索,2011,30(2):51-54.
[13]周灵彬,匡载华,张靖武.基于Proteus的电子产品仿真设计[J].电子技术应用,2010(9):74-76.
[14]胡恩华.GCC技术参考大全[M].北京:清华大学出版社,2004.
[15]付逢春.GNU工具链在软件构建中的应用[J].软件导刊,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
重庆市高等教育教学改革研究项目(143013);重庆理工大学高等教育教学改革研究重大项目(2014ZD10);重庆理工大学高等教育教学改革研究项目(2015YB11)。
杨继森(1977-),男,博士,副教授,主要从事嵌入式系统及智能仪器方面的教学与研究工作。
G424;TP301
Adoi:10.3969/j.issn.1672-4550.2016.04.019