Keil公司C51系列产品简介
Keil公司多年来致力于微控制器领域开发工具的研究工作。它的产品集中在嵌入式系统C编译器上,覆盖的单片机类型很广,从编译器、调试器、实时操作系统到集成开发环境,全面支持8051、251、166等目前微控制器领域的主流产品及其众多的派生系列。鉴于8051系列微控制器在国内的广泛普及和使用,本文将主要以Keil公司的8051系列产品为例,对其产品及使用作一简要介绍。
一、51系列产品概述
Keil公司51系列产品有C51交叉编译器、A51宏汇编器、BL51连接定位器等一系列工具和uVision51集成编译环境、dScope-51模拟调试器等众多基于Windows的开发平台。
uVision51负责创建包含源文件的工程,再由C51编译器或是A51汇编器生成可重定位的目标文件,它有可能被LIB51库文件管理器使用,生成相关的库文件,然后目标文件和库文件一起经过连接、定位器处理,产生绝对目标文件或模块,最后用户可调用dScope51模拟调试器对源程序进行各种观测、调试或是使用仿真器进行在线仿真调试。几种工具介绍如下:
1.C51
C编译器的重要性毋庸置疑,它的好坏直接影响着生成代码的效率、大小和可靠性。我们这里介绍的Keil C51版本为5.5,具有高效、可靠的特点,代表着这一领域的工业标准。它这主要特点是:
*支持九种基本数据类型,其中包括32位长的浮点类型
*变量可存放在不同类型的存储空间中:bit, data, bdata, idata, xdata和pdata
*支持用C语言编写的中断函数
*充分利用8051寄存器组
*保留源程序中的所有符号、类型信息,方便调试
*能够使用AJMP/ACALL指令
*支持位寻址对象
*支持80C32, 520, 530等微控制器的双数据指针
*支持飞利浦8XC750, 751, 752的指令集
*支持亿恒科技(西门子)80C517中的算术运算单元和多重数据指针
与Keil的4.0版C51相比,C51/V5.5有了长足的进步,无论是在长整型数学运算还是浮点型运算测试中,后者的运行时间都减少了40%,与此同时还降低了存储器开销和数据量。下面是一个关于整型运算的测试程序:
long v1, v2, v3
void main (void) {
v1=123456;
v2=456;
v3=v1+v2; /*加法*/
v3=v1/v2; /*除法*/
v3=v1*v2; /*乘法*/
while (1):
}
结果表明,5.0版本只使用可808个机器周期便可完成运算,而4.0版却需要1546个机器周期。在提高效率的同时,Keil C51/V5.5还加强了代码的优化,提供由低到高的6级普通优化和针对8051的特殊优化措施,尽可能地利用寄存器来存储变量和函数参数,减少重复无用的代码、表达式,支持数据覆盖等方案都有效的节省了系统资源,提高了程序的可靠性。
2.uVision51
uVision51是基于Windows的集成开发平台,从源程序的编写、编译到最后的连接、测试程序的调用都可在其中完成。在uVision51的 Options菜单中包含了对编译器、连接器及其环境的各种设置。上文提到的C51中不同的优化级别在其中都可找到对应的选项。在做完一个工程文件后,只要点击Make All按钮就可完成所有的编译工作,生成绝对目标代码。如果还想得到Intel的HEX格式文件,需要在Options菜单的Make项中选择“Run OH51 Object Hex Converter”。值得注意的是,为了满足调试的需要,在C51 Compiler项中还有两个复选框要作标记,分别是:
Include debug information
Include extended debug information
这样才可以在dScope调试器中观测各符号变量。
3.dScope51
dScope51是一个很有特色的调试器。它有两大特点:
(1)支持8051系列众多的派生种类,包括8051fx,80151,80320,80515,80517......,这些芯片的驱动程序以动态链接库的形式存在,使用时只需要在列表中选择一种,同时,主菜单也会生成新的“Periperals”选项。它针对不同的驱动程序,提供它们特有的I/O接口。例如对应80517.dll就有A/D变换器,多重数据指针,乘除运算单元等几项内容。这给调试工作带来的好处是不言而喻的,我们可以在完全脱离仿真器的情况下调试各种应用程序,即使是对特殊设备的编程,也可以找到对应它们的模拟窗口。不可否认,51系列CPU的种类很多,dScope不可能也没有必要列出所有的驱动程序以支持所有的芯片。正如Keil公司的开发人员所说,dScope调试器不是一个针对系统的模拟器,它模拟的是CPU的指令核心。也许我们设计的程序不能由一个驱动程序独立支持,但是,将它分解成多个模块,在对应的驱动程序上分别调试也未偿不可。这一点正符合C语言编程中所提倡的模块化设计思想。由此可见,dScope具有广泛的适用性,能够极好的模拟出程序的运行环境。
(2)拥有自己的函数,主要包括:
*内部函数
*用户函数
*信号函数
其中用户函数和信号函数可以说是借助dScope的内部函数而生成的。内部函数是dScope预先定义的函数,包括printf(),exec(), getint(),rand(),twatch(),memset()等,这些函数主要用来接收、显示字符串、产生随机数、执行dScope命令,它们的功能单一且不能重新定义。相比之下,用户函数却具有很大的灵活性,它使用C语言的基本语句,如IF, Switch, Continue等,可以定义局部变量,利用dScope提供的内部函数,结合C语言的灵活性,就可以随心所欲地编出各种用户函数,达到不同的调试目的。对比用户函数,信号函数在某些场合能发挥更大的作用,因为它可以模拟产生各种脉冲、模拟信号。下面是一个产生阶梯波的信号函数,对应80517型CPU:
SIGNAL void analog (float limit) {
float volts;
printf (“ANALGO (%f) ENTERED\n,limit); /*输入阶梯波最高电压*/
while (1) {
volts=0;
while (volts<=limit) {
aino=volts /*aino脚接信号输入*/
twatch (25000); /*等待25000个机器周期*/
volts+=0.5; /*增大电压*/
}
volts=limit-0.5;
while (volts>=0.5) {
aino=volts;
twatch (25000);
volts=0.5; /*减小电压*/
}
}
}
这样,当函数执行时,80517的aino引脚就对应了一个模拟信号的输入,我们可以用它来测试A/D转换部分的程序。有了信号函数,dScope的整个模拟环境更加完善了。用好以上三种函数,可以高效、客观的在软件环境中模拟出各种实际要求,从而对用户程序进行全面、系统的调试。即使在没有仿真器的情况下,也能生成正确、可靠性很高的代码。
除了上面所说的两点外,dScope还提供了一个性能分析窗,它可以对各代码段的执行效率进行分析,以条形图的方式加以比较,使用户对各代码段的使用次数、执行时间有详细的了解,从整体上把握程序的执行情况,这对于程序的优化也很有好处。
二、评估光盘的使用
Keil公司推出的评估光盘包含的信息量很大,它提供了EK51,251,166三种演示版开发工具,和大量的网页、PDF格式文件。内容涉及工具的使用、应用程序的开发、用户问题总汇和硬件产品数据手册等一系列实际问题,各部分内容可由“Startme”网页开始按提示逐步浏览。但是为了方便用户直接找到要查找的内容,本文以子目录为基本单元对光盘加以简单介绍:
对于不熟悉Keil产品的用户,可直接进入Tutorial目录,这里的演示动画以一个小程序为例全面介绍了uVision和dScope的使用,看完之后,用户就能对Keil的开发平台有一定的了解。
想查看C51等工具使用情况的用户可浏览Guides目录中的EK51 PDF文件,这是一本Keil开发工具的使用手册,详细介绍了各种工具的特点和使用方法。keilapnt目录介绍了应用中的一些细节问题,如8051的中断编程等,具体内容请查看其中的html文件。有些用户也许使用过或正在使用Keil公司的产品,如果还有一些没有解决的问题,请查看Support目录,这里汇集了很大过去用户提出的问题,对深入掌握开发工具很有好处。如果想了解某家公司的微控制器产品或是具体应用,可以查看datashts和Appnotes目录。这里列出了Intel,Philips,Siemens等众多厂商的全系列CPU数据和开发应用,给编程带来了极大方便。
最后要提到的是三个演示版工具,它们的安装程序分别在EK51,EK251,EK166目录中,直接双击Setup即可。只想看一眼的用户也可以进入C51eval目录,再双击Bin子目录里的uvw51e文件,直接运行uVision开发环境。
三、关于Keil和Franklin
Keil公司的产品多年以来在美国都是通过Franklin公司销售,并注以Franklin的标记。目前国内广为使用的Franklin C51编译器都在V4.0版本以下。近年来Keil公司也在世界各地(包括中国)建立了销售与技术支持网络,产品不断升级,其8051/251/166三个系列产品愈来愈得到用户的认同。