|
单片机开发与应用无须使用仿真器
|
MCU's R&D Without Simulator
|
■清华Motorola MCU/DSP应用开发研究中心 宫 辉 邵贝贝
|
由于一些单片机总线不开放,过去,开发阶段靠EPROM(俗称窗口片)反复擦写,相当麻烦。对于程序量小的,比如2K以内还是可以的,但是对于程序量大的,这种方法很难行的通。因此,传统的单片机(MCU)开发方法,主要是使用仿真器模拟目标系统中单片机的运行情况,以调试目标系统的软件和硬件。
仿真器的原理是:将一个引脚与形状都与MCU相同的仿真头插到要开发的目标板MCU的位置上,通过电缆与仿真器相连,然后通过仿真器对目标板进行调试。
虽然这种方法比较便利,然而仿真器的价格昂贵,并且每种仿真器只能仿真一种专门的单片机芯片,在经济上很不合算。而且,现在表面贴装的MCU芯片用得越来越多,一次性仿真头很难“插到”目标板上,只能焊上去,然而仿真头一旦焊上去,就不易取下来。同时如果使用仿真器,开发者往往不得不从最简单的模块应用入手,加大了开发的难度和时间。
软件在线编程
现在由于FLASH技术在MCU上的应用,使单片机在开发与应用手段上,有了革命性的变化。单片机可以在线编程,即用单片机“自己开发自己”。开发者可以自己设计和制作基于FLASH技术的新一代软件在线编程开发工具,来对开发者的目标系统进行调试、测试和开发。
这种软件开发工具的设计原理是:直接设计目标板,并在目标板上留出在线编程端和RS-232接口。然后编写一个监控程序。利用在线编程端将监控程序固化到MCU的FLASH中,这样可以提供方便的在线编程开发环境。开发者可以利用单片机内含的FLASH存储空间易擦易写的特点,通过与PC机通信,实现诸如程序下载、运行、断点设置、内存查看和修改等功能,以完成对目标系统的调试与开发。
这种软件在线编程开发方法,不仅在功能上可以替代仿真器,而且也可以具备一些仿真器所没有的特点。当然,成本方面也远远低于仿真器。用户只要写出一种单片机的监控程序,经过稍微改动就可以很容易地用到其它相同CPU的单片机上,这是传统仿真器所无法媲美的。
监控程序法要占用部分系统资源,主要是ROM和RAM。监控程序一方面不能太小,否则功能很有限。另一方面,也不能太大,这样会过分占用FLASH存储空间,因为在监控环境下,被监控程序占用的空间是不能再被开发者要调试的用户程序占用的。对于FLASH为8~16K的单片机芯片,监控程序大小应限制在3K左右。对于有20K以上FLASH区的单片机,监控程序可以写到大约8K,这样就可以实现更多的调试功能,如在线汇编、反汇编等,调试起来也就更方便。
简单易用的监控环境
一个简单易用、界面友好的监控环境至少要做到:通过与PC机的通信,可以实现诸如程序下载、运行、断点设置、内存查看和修改等基本功能。
首先,要有可以擦写FLASH存储空间的监控命令,这样才能将开发者的用户程序通过监控命令写入FLASH中。另外,还要有能执行用户程序和查询、修改FLASH的监控命令,以及断点设置等命令,这些都是调试用户程序所必需的基本命令。这些监控命令,通过参考相应的单片机芯片的原理说明书,不论是用汇编还是用C语言(当然,这种单片机要支持C语言编程),都是不难编写的。把各个监控命令的子程序连接到一起,再加上对寄存器的初始化部分,也就成为了一个监控程序。
如果开发者所用芯片的FLASH存储空间允许的话,开发者可以为监控程序加上汇编和反汇编部分。还可以编写自己的系统调用表,开发者可以将一些常用子程序的入口地址填写在FLASH区某已知的固定位置处,这样如果开发者再要使用这些子程序,就不必一一编写,可以直接通过JSRxxxx(xxxx为放置该子程入口地址的FLASH地址)来调用相应的子程序,这样在编程上可以节省不少时间。而且,实际上部分子程序不需要专门编写,调用监控程序的子程序即可,比如串口通信、FLASH区擦写与修改等。
另外,开发者编写的监控程序应该能使用户程序在需要的时候脱离监控程序,独立运行。因为在这种工作状态下,可以100%的实时仿真,测试用户程序在目标系统里工作是否正常。具体实现过程可以如下,编写监控程序,使监控程序在刚执行时,先检测复位向量,如果不为$FFFF时,就跳到复位向量中相应的地址处执行。这样,通过将开发者的用户程序的入口地址填到复位向量里,就可以在监控程序刚执行时,就将MCU的控制权完全转交给用户程序。当然,在用户程序中也可以通过JMPxxxx(xxxx为监控程序入口地址),返回到监控程序里,对用户程序进行调试。
目标系统硬件的结构设计是很灵活的,一般由两部分组成,分别是应用电路系统和监控程序与PC机通信要用到的核心电路。其中,核心电路部分实际上要提供使在线编程及单片机可以正常工作的最小系统。应该包括相应的单片机芯片、晶振电路及其RS-232驱动电路,复位按钮、跳线选择等。
我中心已成功地用这种方法开发了多种Motorola的MCU。例如,68HC908GP32。这是一种有12KFLASH的MCU。接近8K的监控程序包括了在线行汇编、反汇编等高级调试功能。68HCSR12和68HCLJ12是两款有12KFLASH的单片机。3K多一点的监控程序是在上述8K监控程序基础上去掉在线行汇编、反汇编部分得到的。用同样的方法,不难将上述监控程序移植到68HC908的其他类型单片机上。实践证明这种方法是成功的。
|
|