1、学习任务学习任务3 集成开发环境集成开发环境ision4应用知识应用知识学习学习学习目标学习目标了解了解ision4开发环境开发环境了解了解Keil C软件常用调试窗口软件常用调试窗口学习内容学习内容学习运行学习运行ision4的方法的方法学习学习Keil 项目创建、程序的调试知识项目创建、程序的调试知识一、运行一、运行ision4 1ision4对计算机硬件和软件配置要对计算机硬件和软件配置要求求 为了取得比较好的运行效果,最低的硬件为了取得比较好的运行效果,最低的硬件和软件配置必须满足:和软件配置必须满足:具有奔腾,奔腾具有奔腾,奔腾II或更高的个人计算机;或更高的个人计算机;操作系统为操
2、作系统为WIN98、WIN2000、WINXP等,或更高;等,或更高;RAM大于大于16MB;20MB的硬盘空余空间。的硬盘空余空间。2启动启动 可直接从桌面上双击可直接从桌面上双击uVision4 的图标或通过开始菜单程的图标或通过开始菜单程序序Keil ision4 启动启动Keil 软件的集成开发环境,启动软件的集成开发环境,启动界面如图界面如图2-1所示。几秒钟后,主画面中间的版本提示将所示。几秒钟后,主画面中间的版本提示将会消失,由文本编辑窗口所代替,如果上次退出是没有关会消失,由文本编辑窗口所代替,如果上次退出是没有关闭文件,那么将会恢复显示上次文件的编辑窗口状态,否闭文件,那么将
3、会恢复显示上次文件的编辑窗口状态,否则是空白窗口,需要打开新的编辑文件,则是空白窗口,需要打开新的编辑文件,Vision4允许同允许同时打开、浏览多个源文件。时打开、浏览多个源文件。3菜单条、工具栏和快捷键菜单条、工具栏和快捷键 下面的表格列出了下面的表格列出了Vision4菜单项命令,菜单项命令,工具栏图标,默认的快捷键以及他们的功工具栏图标,默认的快捷键以及他们的功能描述。能描述。1)编辑菜单和编辑器命令)编辑菜单和编辑器命令Edit(如表(如表2.4所所示)示)3菜单条、工具栏和快捷键菜单条、工具栏和快捷键 2)选择文本命令)选择文本命令 在在Vision4中,可以通过按住中,可以通过按
4、住Shift键和相键和相应的键盘上的方向键来选择文本。如应的键盘上的方向键来选择文本。如Ctrl+-可以移动光标到下一个词,那么,可以移动光标到下一个词,那么,Ctrl+Shift+-就是选择当前光标位置到下就是选择当前光标位置到下一个词的开始位置间的文本。当然,也可一个词的开始位置间的文本。当然,也可以用鼠标来选择文本。以用鼠标来选择文本。3菜单条、工具栏和快捷键菜单条、工具栏和快捷键 3)项目菜单)项目菜单Project和项目命令和项目命令Project(如表(如表2.5所示)所示)4)调试菜单)调试菜单Debug和调试命令(如表和调试命令(如表2.6所示)所示)5)外围器件菜单)外围器件
5、菜单Peripherals(如表(如表2.7所示)所示)6)工具菜单)工具菜单Tool(如表(如表2.8所示)所示)利用工具菜单,可以设置并运行利用工具菜单,可以设置并运行Gimpel PC-Lint、Siemens Easy-Case和用户程序。通过和用户程序。通过Customize Tools Menu菜单,可以添加需要菜单,可以添加需要的程序。的程序。二、二、Keil 项目创建项目创建 在这一节我们将学习如何输入源程序,建立工程、对工程在这一节我们将学习如何输入源程序,建立工程、对工程进行详细的设置,以及如何将源程序变为目标代码。如图进行详细的设置,以及如何将源程序变为目标代码。如图2-
6、2所示,所示,89C51单片机的单片机的P1 引脚连接引脚连接8个发光二极管。个发光二极管。其项目创建过程如下所述其项目创建过程如下所述:1Keil 工程的建立工程的建立 首先启动首先启动Keil 软件的集成开发环境,软件的集成开发环境,u Vision4启动后,启动后,程序窗口的左边有一个工程管理窗口,该窗口有程序窗口的左边有一个工程管理窗口,该窗口有4 个标签,个标签,分别是分别是Project、Books、Functions和和Templates,这,这4个标签页分别显示当前项目的文件结构、所选个标签页分别显示当前项目的文件结构、所选CPU 的附的附加说明文件、功能说明和常用程序的模板文
7、件,如果是第加说明文件、功能说明和常用程序的模板文件,如果是第一次启动一次启动Keil,那么这,那么这4个标签页全是空的。个标签页全是空的。1Keil 工程的建立工程的建立 1)源文件的建立)源文件的建立 使用菜单使用菜单“File-New”或者或者点击工具栏的新建文件按钮,点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一即可在项目窗口的右侧打开一个新的文本编缉窗口,在该窗个新的文本编缉窗口,在该窗口中输入以下汇编语言源程序,口中输入以下汇编语言源程序,或或C语言程序。语言程序。1Keil 工程的建立工程的建立例:用例:用P1口做输出口,接八位逻辑电平显示,编辑程序使发光二极口做输出口,接
8、八位逻辑电平显示,编辑程序使发光二极管从右到左轮流循环点亮。管从右到左轮流循环点亮。ORG 0000HLJMP STARTORG 0030HSTART:MOV a,#0FEh MOV R2,#8OUT:MOV P1,A RL A ACALL YS DJNZ R2,OUT LJMP STARTYS:MOV R7,#0 ;延时程序;延时程序 YS1:MOV R6,#0 DJNZ R6,$DJNZ R7,YS1 RET END1Keil 工程的建立工程的建立 选择选择File-save选项,或者单击工具栏按钮,保存文件,选项,或者单击工具栏按钮,保存文件,注意必须加上扩展名(汇编语言源程序一般用注意
9、必须加上扩展名(汇编语言源程序一般用asm 或或a51 为扩展名,为扩展名,C语言程序要用语言程序要用.c作为扩展名),这里假定将作为扩展名),这里假定将文件保存为文件保存为exam.asm。需要说明的是,源文件就是一般需要说明的是,源文件就是一般的文本文件,可以使用任意文本编辑器编写,建议使用的文本文件,可以使用任意文本编辑器编写,建议使用Ultra Edit之类的编缉软件进行源程序的输入,也可以使之类的编缉软件进行源程序的输入,也可以使用用Windows自带的记事本进行编辑。自带的记事本进行编辑。1Keil 工程的建立工程的建立 2)建立工程文件)建立工程文件 在项目开发中,并不是仅有一个
10、源程序就行了,还要为这在项目开发中,并不是仅有一个源程序就行了,还要为这个项目选择个项目选择CPU(Keil 支持数百种支持数百种CPU,而这些,而这些CPU 的的特性并不完全相同),确定编译、汇编、连接的参数,指特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,理和使用方便,Keil 使用工程(使用工程(Project)这一概念,将)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译(
11、汇编)和连接等对工程而不能对单一的源程序进行编译(汇编)和连接等操作,下面我们就一步一步地来建立工程。操作,下面我们就一步一步地来建立工程。点击点击“Project-New Project”菜单,出现一个对菜单,出现一个对话框,如图话框,如图2-7所示,要求给将要建立的工程起一个名字,所示,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字(设为你可以在编缉框中输入一个名字(设为exam),不需要),不需要扩展名,点击扩展名,点击“保存保存”按钮,出现第二个对话框,如图按钮,出现第二个对话框,如图2-8所示,这个对话框要求选择目标所示,这个对话框要求选择目标CPU(即你所用芯片的(即
12、你所用芯片的型号),型号),Keil支持的支持的CPU很多,我们选择很多,我们选择Atmel 公司的公司的89C51 芯片。点击芯片。点击ATMEL 前面的前面的“+”号,展开该层,号,展开该层,点击其中的点击其中的 89C51,然后再点击,然后再点击“确定确定”按钮,回到主按钮,回到主界面,此时,在工程窗口的文件页中,出现了界面,此时,在工程窗口的文件页中,出现了“Target 1”,前面有,前面有“+”号,点击号,点击“+”号展开。号展开。1Keil 工程的建立工程的建立图图2-7 工程保存窗口工程保存窗口图图2-8 选择目标选择目标CPU1Keil 工程的建立工程的建立 可以看到下一层的
13、可以看到下一层的“Source Group1”,这时的工程还,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击编写好的源程序加入,点击“Source Group1”使其反使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图白显示,然后,点击鼠标右键,出现一个下拉菜单,如图2-9 所示。选中其中的所示。选中其中的“Add file to Group”Source Group1”,出现一个对话框,要求寻找源文件,如图,出现一个对话框,要求寻找源文件,如图2-10,注意,该对话框下面的,注意,该对话框下面的“
14、文件类型文件类型”默认为默认为C source file(*.c),也就是以,也就是以C 为扩展名的文件,而我们的为扩展名的文件,而我们的文件是以文件是以.asm为扩展名的,所以在列表框中找不到为扩展名的,所以在列表框中找不到exam.asm,要将文件类型改掉,点击对话框中,要将文件类型改掉,点击对话框中“文件类文件类型型”后的下拉列表,找到并选中后的下拉列表,找到并选中“Asm Source File(*.s*;*.src;*.a*)”,这样,在列表框中就可以找到,这样,在列表框中就可以找到exam.asm文件了。文件了。1Keil 工程的建立工程的建立 图图2-9 加入文件加入文件 图图2
15、-10 选择加入文件类型选择加入文件类型1Keil 工程的建立工程的建立 双击双击exam1.asm 文件,将文件加入项目,注意,在文件文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,加入项目后,该对话框并不消失,等待继续加入其它文件,但开始时常会误认为操作没有成功而再次双击同一文件,但开始时常会误认为操作没有成功而再次双击同一文件,这时会出现如图这时会出现如图2-11所示的对话框,提示你所选文件已在所示的对话框,提示你所选文件已在列表中,此时应点击列表中,此时应点击“确定确定”,返回前一对话框,然后点,返回前一对话框,然后点击击“Close”即可返回主界
16、面,返回后,点击即可返回主界面,返回后,点击“Source Group 1”前的加号,会发现前的加号,会发现exam.asm 文件已在其中。文件已在其中。双击文件名,即打开该源程序,如图双击文件名,即打开该源程序,如图2-12所示。所示。2工程的详细设置工程的详细设置 工程建立好以后,还要对工程进行进一步的设置,以满足工程建立好以后,还要对工程进行进一步的设置,以满足要求。首先点击左边要求。首先点击左边Project 窗口的窗口的Target 1,然后使用,然后使用菜单菜单“Project-Option for target target1”即出现即出现对工程设置的对话框,如图对工程设置的对话
17、框,如图2-13所示。所示。2工程的详细设置工程的详细设置 工程设置对话框共有工程设置对话框共有11个选项卡,设置项目较多,下面介个选项卡,设置项目较多,下面介绍常用的设置选项的含义,其他大部份设置项取默认值就绍常用的设置选项的含义,其他大部份设置项取默认值就行了,如图行了,如图2-14所示。所示。2工程的详细设置工程的详细设置默认为默认为Target选项卡选项卡Xtal(MHZ):设置单片机工作的频率,默认是):设置单片机工作的频率,默认是24.0MHz。Use On-chip ROM(0 x0-0XFFF):表示使用片上的:表示使用片上的Flash ROM,At89C51有有4KB的可重编
18、程的的可重编程的Flash RO M,该选项,该选项取决于单片机应用系统,如果单片机的取决于单片机应用系统,如果单片机的EA接高电平,则选接高电平,则选中这个选项,表示使用内部中这个选项,表示使用内部ROM,如果单片机的,如果单片机的EA接低电接低电平,表示使用外部平,表示使用外部ROM,则不选中该项。这里选中该选项。,则不选中该项。这里选中该选项。Off-chip Code memory:表示片外:表示片外ROM的开始地址和大的开始地址和大小,如果没有外接程序存储器,那么不需要填任何数据。小,如果没有外接程序存储器,那么不需要填任何数据。这里假设使用一个片外这里假设使用一个片外ROM,地址从
19、,地址从0 x8000开始,一般填开始,一般填16进制的数,进制的数,Size为片外为片外ROM的大小。假设外接的大小。假设外接ROM的大的大小为小为0 x1000字节,则最多可以外接字节,则最多可以外接3块块ROM。Off-chip Xdata memory:那么可以填上外接那么可以填上外接Xdata外部外部数据存储器的起始地址和大小,一般的应用是数据存储器的起始地址和大小,一般的应用是62256,这里,这里特殊的指定特殊的指定Xdata的起始地址为的起始地址为0 x2000,大小为,大小为0 x8000。2工程的详细设置工程的详细设置 Code Banking:是使用:是使用Code Ba
20、nking技术。技术。Keil可以可以支持程序代码超过支持程序代码超过64KB的情况,最大可以有的情况,最大可以有2MB的程序的程序代码。如果代码超过代码。如果代码超过64KB,那么就要使用,那么就要使用Code Banking技术,以支持更多的程序空间。技术,以支持更多的程序空间。Code Banking支持自动的支持自动的Bank的切换,这在建立一个大型系统时是必的切换,这在建立一个大型系统时是必需的。例如:在单片机里实现汉字字库,实现汉字输入法,需的。例如:在单片机里实现汉字字库,实现汉字输入法,都要用到该技术。都要用到该技术。Memory Model:单击:单击Memory Model
21、后面的下拉箭头,后面的下拉箭头,会有会有3个选项,如下图。个选项,如下图。2工程的详细设置工程的详细设置 Small:变量存储在内部:变量存储在内部RAM里。里。Compact:变量存储在外部:变量存储在外部RAM里,使用里,使用8位间接寻址。位间接寻址。Large:变量存储在外部:变量存储在外部RAM里,使用里,使用16位间接寻址。位间接寻址。一般使用一般使用Small来存储变量,此时单片机优先将变量存储来存储变量,此时单片机优先将变量存储在内部在内部RAM里,如果内部里,如果内部RAM空间不够,才会存在外部空间不够,才会存在外部RAM中。中。Compact的方式要通过程序来指定页的高位地的
22、方式要通过程序来指定页的高位地址,编程比较复杂,如果外部址,编程比较复杂,如果外部RAM很少,只有很少,只有256字节,字节,那么对该那么对该256字节的读取就比较快。字节的读取就比较快。如果超过如果超过256字节,而且需要不断地进行切换,就比较麻字节,而且需要不断地进行切换,就比较麻烦,烦,Compact模式适用于比较少的外部模式适用于比较少的外部RAM的情况。的情况。Large模式是指变量会优先分配到外部模式是指变量会优先分配到外部RAM里。需要注意里。需要注意的是,的是,3种存储方式都支持内部种存储方式都支持内部256字节和外部字节和外部64KB的的RAM。因为变量存储在内部。因为变量存
23、储在内部RAM里运算速度比存储在外里运算速度比存储在外部部RAM要快得多,大部分的应用都是选择要快得多,大部分的应用都是选择Small模式。模式。2工程的详细设置工程的详细设置 使用使用Small模式时,并不说明变量就不可以存储在外部,模式时,并不说明变量就不可以存储在外部,只是需要特别指定,比如:只是需要特别指定,比如:unsigned char xdata a:变量:变量a存储在内部存储在内部RAM。unsigned char a:变量存储在内部:变量存储在内部RAM。但是使用但是使用Large的模式时:的模式时:unsigned char xdata a:变量:变量a存储在外部存储在外部
24、RAM。unsigned char a:变量:变量a同样存储在外部同样存储在外部RAM。这就是它们之间的区别,可以看出这几个选项只影响没有这就是它们之间的区别,可以看出这几个选项只影响没有特别指定变量的存储空间的情况,默认存储在所选模式的特别指定变量的存储空间的情况,默认存储在所选模式的存储空间,比如上面的变量定义存储空间,比如上面的变量定义unsigned char a。Code Rom Size:单击:单击Code Rom Size后面的下拉箭头,后面的下拉箭头,将有将有3个选项,如图个选项,如图2-16所示。所示。2工程的详细设置工程的详细设置Small:program2K or les
25、s,适用于,适用于AT89C2051这些芯片,这些芯片,2051只有只有2KB的代码空间,所以跳转地址只有的代码空间,所以跳转地址只有2KB,编译的时候会使用,编译的时候会使用ACALL AJMP这些短跳指令,而不会使用这些短跳指令,而不会使用LCALL,LJMP指令。如果代码地址指令。如果代码地址跳转超过跳转超过2KB,那么会出错。,那么会出错。Compact:2K functiongs,64K program,表示每个子函数的代码大,表示每个子函数的代码大小不超过小不超过2K,整个项目可以有,整个项目可以有64K的代码。就是说在的代码。就是说在main()里可以使里可以使用用LCALL,L
26、JMP指令,但在子程序里只会使用指令,但在子程序里只会使用ACALL,AJMP指令。指令。只有确定每个子程序不会超过只有确定每个子程序不会超过2KB,才可以使用,才可以使用Compact方式。方式。Large:64KB program,表示程序或子函数代码都可以大到,表示程序或子函数代码都可以大到64KB,使,使用用code bank还可以更大。通常都选用该方式。选择还可以更大。通常都选用该方式。选择Large方式速度不方式速度不会比会比Small慢很多,所以一般没有必要选择慢很多,所以一般没有必要选择Compact和和Small方式。这方式。这里选择里选择Large方式。方式。Operati
27、ng:单击:单击Operating后面的下拉箭头,会有后面的下拉箭头,会有3个选项,如图个选项,如图2-17所示。所示。2工程的详细设置工程的详细设置 None:表示不使用操作系统。:表示不使用操作系统。RTX-51 Tiny Real-Time OS:表示使用:表示使用Tiny操作系统。操作系统。RTX-51 Full Real-Time OS:表示使用:表示使用Full操作系统。操作系统。Tiny是一个多任务操作系统,使用定时器是一个多任务操作系统,使用定时器0做任务切换。做任务切换。在在11.0592MHz时,切换任务的速度为时,切换任务的速度为30ms。对。对CPU的的浪费很大,对内部
28、浪费很大,对内部RAM的占用也很严重。实际上用到多的占用也很严重。实际上用到多任务操作系统的情况很少。任务操作系统的情况很少。Keil C51 Full Real-Time OS是比是比Tiny要好一些的系统要好一些的系统(但需要用户使用外部(但需要用户使用外部RAM),支持中断方式的多任务),支持中断方式的多任务和任务优先级,但是和任务优先级,但是Keil C51里不提供该运行库,要另外里不提供该运行库,要另外购买。购买。这里选择这里选择None。2工程的详细设置工程的详细设置 2)设置Output选项卡(如图2-18所示)2工程的详细设置工程的详细设置 Select Folder for
29、Objects:单击该按钮可以选择编译后:单击该按钮可以选择编译后目标文件的存储目录,如果不设置,就存储在项目文件的目标文件的存储目录,如果不设置,就存储在项目文件的目录里。目录里。Name of Executable:设置生成的目标文件的名字,缺:设置生成的目标文件的名字,缺省情况下和项目的名字一样。目标文件可以生成库或者省情况下和项目的名字一样。目标文件可以生成库或者obj、HEX的格式。的格式。Create Executable:如果要生成:如果要生成OMF以及以及HEX文件,一文件,一般选中般选中Debug Information和和Browse Information。选。选中这两项
30、,才有调试所需的详细信息,比如要调试中这两项,才有调试所需的详细信息,比如要调试C语言语言程序,如果不选中,调试时将无法看到高级语言写的程序。程序,如果不选中,调试时将无法看到高级语言写的程序。Create HEX File:要生成:要生成HEX文件,一定要选中该选项,文件,一定要选中该选项,如果编译之后没有生成如果编译之后没有生成HEX文件,就是因为这个选项没有文件,就是因为这个选项没有被选中。默认是不选中的。被选中。默认是不选中的。Create Library:选中该项时将生成:选中该项时将生成lib库文件。根据需要库文件。根据需要决定是否要生成库文件,一般应用是不生成库文件的。决定是否要
31、生成库文件,一般应用是不生成库文件的。2工程的详细设置工程的详细设置 3)设置Listing选项卡(如图2-19所示)2工程的详细设置工程的详细设置 Keil C51在编译之后除了生成目标文件之外,还生成在编译之后除了生成目标文件之外,还生成*.lst、*m51的文件。这两个文件可以告诉程序员程序中所用的的文件。这两个文件可以告诉程序员程序中所用的idata、data、bit、xdata、code、RAM、ROM、stack等的相关信息,以及程序所需的代码空间。等的相关信息,以及程序所需的代码空间。选中选中Assembly Code会生成汇编的代码。这是很有用处会生成汇编的代码。这是很有用处的
32、,对于一个单片机程序员来说,往往既要熟悉汇编,同的,对于一个单片机程序员来说,往往既要熟悉汇编,同时也要熟悉时也要熟悉C语言,才能更好地编写程序。某些地方用语言,才能更好地编写程序。某些地方用C语言无法实现,便用汇编语言却很容易。有些地方用汇编语言无法实现,便用汇编语言却很容易。有些地方用汇编语言,很繁琐,用语言,很繁琐,用C语言就很方便。语言就很方便。单击单击Select Folder for Listings按钮后,在出现的对话框按钮后,在出现的对话框中可以选择生成的列表文件的存放目录。不做选择时,使中可以选择生成的列表文件的存放目录。不做选择时,使用项目文件所在的目录。用项目文件所在的目
33、录。2工程的详细设置工程的详细设置 4)设置)设置Debug选项卡(如图选项卡(如图2-20所示)所示)这里有两类仿真形式可选:这里有两类仿真形式可选:Use Simulator和和Use:Keil Monitor-51 Driver,前一种是纯软件仿真,后一种是带,前一种是纯软件仿真,后一种是带有有Monitor-51目标仿真器的仿真。目标仿真器的仿真。Load Application at Startup:选择这项之后,:选择这项之后,Keil才会才会自动装载程序代码。自动装载程序代码。2工程的详细设置工程的详细设置Run to main():调试:调试C语言程序时可以选择这一项,语言程序
34、时可以选择这一项,PC会自动运行会自动运行到到main程序处。程序处。这里选择这里选择Use Simulator。如果选择如果选择Use:Keil Monitor-51 Driver,还可以单击图,还可以单击图2-20中的中的Settings按钮,打开新的窗口如图按钮,打开新的窗口如图2-21,其中的设置如下。,其中的设置如下。Port:设置串口号,为仿真机的串口连接线:设置串口号,为仿真机的串口连接线COM_A所连接的串口。所连接的串口。Baudrate:设置为:设置为9600,仿真机固定使用,仿真机固定使用9600bit/s跟跟Keil通信。通信。Serial Inerrupt:允许串行中
35、断,选中它。:允许串行中断,选中它。Cache Options:可以选也可以不选,推荐选它,这样仿真机会运行:可以选也可以不选,推荐选它,这样仿真机会运行得快一点。得快一点。最后单击最后单击OK按钮关闭窗口。按钮关闭窗口。设置完成后按确认返回主界面,设置完成后按确认返回主界面,工程文件建立、设置完毕。工程文件建立、设置完毕。3编译、连接编译、连接 在设置好工程后,即可进行编译、连接。选择菜单在设置好工程后,即可进行编译、连接。选择菜单Project-Build target,对当前工程进行连接,如果当前,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以文件已修改,
36、软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择产生目标代码;如果选择Rebuild All target files 将会对将会对当前工程中的所有文件重新进行编译然后再连接,确保最当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而终生产的目标代码是最新的,而Translate项则仅对该文项则仅对该文件进行编译,不进行连接。件进行编译,不进行连接。以上操作也可以通过工具栏按钮直接进行。图以上操作也可以通过工具栏按钮直接进行。图2-22 是有是有关编译、设置的工具栏按钮,从左到右分别是:编译、关编译、设置的工具栏按钮,从左到右分别是:编译、编译连接、全部重
37、建、批编译、停止编译、下载和对工编译连接、全部重建、批编译、停止编译、下载和对工程进行设置。程进行设置。3编译、连接编译、连接 编译过程中的信息将出现在输出窗口中的编译过程中的信息将出现在输出窗口中的Build 页中,如页中,如果源程序中有语法错误,会有错误报告出现,双击该行,果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,最终会可以定位到出错的位置,对源程序反复修改之后,最终会得到如图得到如图2-23 所示的结果,提示获得了名为所示的结果,提示获得了名为exam.hex的的文件,该文件即可被编程器读入并写到芯片中,同时还产文件,该文件即可被编程器
38、读入并写到芯片中,同时还产生了一些其它相关的文件,可被用于生了一些其它相关的文件,可被用于Keil 的仿真与调试,的仿真与调试,这时可以进入下一步调试的工作。这时可以进入下一步调试的工作。三、三、Keil 程序的调试程序的调试 上一节中我们学习了如何建立工程、汇编、连接上一节中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部
39、份的程事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节。调试是软件开发中重要的一个环节。1常用调试命令常用调试命令 在对工程成功地进行汇编、连接以后,按在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使或者使用菜单用菜单Debug-Start/Stop Debug Session 即可进入调即可进入调试状态。试状态。进入调试状态后,界面与编辑状态相比有明显的变化,进入调试状态后,界面与编辑状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,菜单项中原来
40、不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图工具栏会多出一个用于运行和调试的工具条,如图2-24 所示,所示,Debug 菜菜 单上的大部份命令可以在此找到对应的单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、程单步、执行完当前子程序、运行到当前行、下一状态、命令窗口、反汇编窗口、符号窗口、寄存器窗口、调用堆命令窗口、反汇编窗口、符号窗口、寄存器窗口、调用堆栈窗口、观察窗口、内存窗口、串行窗口、分析窗口、跟栈窗口、观察窗口、内存窗
41、口、串行窗口、分析窗口、跟踪窗口、系统测试窗口、工具箱、调试恢复视图命令。踪窗口、系统测试窗口、工具箱、调试恢复视图命令。1常用调试命令常用调试命令 学习程序调试,必须明确两个重要的概念,即单步执行与学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。全速执行是指一行程序执行完以后紧接着执行全速运行。全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序
42、错误,但如果程序有错,则难以确认错误出现在哪些程序行。单步执行是每次执行一行程序,执行完该行程序以后行。单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。程序调得到的结果相同,借此可以找到程序中问题所在。程序调试中,这两种运行方式都要用到。试中,这两种运行方式都要用到。使用菜单使用菜单STEP 或相应的命令按钮或使用快捷键或相应的命令按钮或使用快捷键F11
43、可以可以单步执行程序,使用菜单单步执行程序,使用菜单STEP OVER 或功能键或功能键F10 可以可以用过程单步形式执行命令,所谓过程单步,是指将汇编语用过程单步形式执行命令,所谓过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执言中的子程序或高级语言中的函数作为一个语句来全速执行。行。1常用调试命令常用调试命令 按下按下F11 键,可以看到源程键,可以看到源程序窗口的左边出现了一个黄序窗口的左边出现了一个黄色调试箭头,指向源程序的色调试箭头,指向源程序的第一行,如图第一行,如图2-25所示。每所示。每按一次按一次F11,即执行该箭头,即执行该箭头所指程序行,然后箭头指
44、向所指程序行,然后箭头指向下一行,当箭头指向下一行,当箭头指向LCALL DELAY行时,再次行时,再次按下按下F11,会发现,箭头指,会发现,箭头指向了延时子程序向了延时子程序DELAY第第一行。不断按一行。不断按F11键,即可键,即可逐步执行延时子程序。逐步执行延时子程序。1常用调试命令常用调试命令 通过单步执行程序,可以找出一些问题的所在,但是仅依通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错有时是困难的,或虽能查出错误但效率靠单步执行来查错有时是困难的,或虽能查出错误但效率很低,为此必须辅之以其它的方法,如本例中的延时程序很低,为此必须辅之以其它的方法,如本例中的延
45、时程序是通过将是通过将LOOP:DJNZ R6,LOOP这一行程序执行六这一行程序执行六万多次来达到延时的目的,如果用按万多次来达到延时的目的,如果用按F11六万多次的方法六万多次的方法来执行完该程序行,显然不合适,为此,可以采取以下一来执行完该程序行,显然不合适,为此,可以采取以下一些方法:第一种方法,用鼠标在子程序的最后一行(些方法:第一种方法,用鼠标在子程序的最后一行(ret)点一下,把光标定位于该行,然后用菜单点一下,把光标定位于该行,然后用菜单Debug-Run to Cursor line(执行到光标所在行),即可全速执行完黄(执行到光标所在行),即可全速执行完黄色箭头与光标之间的
46、程序行。第二种方法,在进入该子程色箭头与光标之间的程序行。第二种方法,在进入该子程序后,使用菜单序后,使用菜单Debug-Step Out(单步执行到该函数(单步执行到该函数外),使用该命令后,即全速执行完调试光标所在的子程外),使用该命令后,即全速执行完调试光标所在的子程序或子函数并指向主程序中的下一行程序(这里是序或子函数并指向主程序中的下一行程序(这里是DJNZ R2,OUTPUT行)。第三种方法,在开始调试时,按行)。第三种方法,在开始调试时,按F10而非而非F11,程序也将单步执行,不同的是,执行到,程序也将单步执行,不同的是,执行到LCALL DELAY行时,按下行时,按下F10键
47、,调试光标不进入子程序的内部,键,调试光标不进入子程序的内部,而是全速执行完该子程序,然后直接指向下一行而是全速执行完该子程序,然后直接指向下一行“DJNZ R2,OUTPUT”。灵活应用这几种方法,可以大大提高查。灵活应用这几种方法,可以大大提高查错的效率。错的效率。2在线汇编在线汇编 在进入在进入Keil 的调试环境以后,如果发现程序有错,可以的调试环境以后,如果发现程序有错,可以直接对源程序进行修改,但是要使修改后的代码起作用,直接对源程序进行修改,但是要使修改后的代码起作用,必须先退出调试环境,重新进行编译、连接后再次进入调必须先退出调试环境,重新进行编译、连接后再次进入调试,如果只是
48、需要对某些程序行进行测试,或仅需对源程试,如果只是需要对某些程序行进行测试,或仅需对源程序进行临时的修改,这样的过程未免有些麻烦,为此序进行临时的修改,这样的过程未免有些麻烦,为此Keil软件提供了在线汇编的能力,将光标定位于需要修改的程软件提供了在线汇编的能力,将光标定位于需要修改的程序行上,用菜单序行上,用菜单Debug-Inline Assambly即可出现如图即可出现如图2-26 的对话框,在的对话框,在Enter New 后面的编缉框内直接输入后面的编缉框内直接输入需更改的程序语句,输入完后键入回车将自动指向下一条需更改的程序语句,输入完后键入回车将自动指向下一条语句,可以继续修改,
49、如果不再需要修改,可以点击右上语句,可以继续修改,如果不再需要修改,可以点击右上角的关闭按钮关闭窗口。角的关闭按钮关闭窗口。3断点设置断点设置 程序调试时,一些程序行必须满足一定的条件才能被执行程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方试的,
50、这时就要使用到程序调试中的另一种非常重要的方法法断点设置。断点设置的方法有多种,常用的是在某断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。在程序行设置定问题所在。在程序行设置/移除断点的方法是将光标定移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单位于需要设置断点的程序行,使用菜单Debug-Insert/Remove Breakpoint(F9)设置或移除断点(也)设置或移除
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。