在以往的keil开发环境中,很少看到有调试脚本的身影,但是在学习STM32的时候,开始用到了调试脚本,感觉到很方便。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Realview MDK中使用调试脚本。调试脚本主要有以下功能:
1、可以初始化软硬件的调试环境以外;
2、可以初始化Flash的烧写环境;
3、可以提供信号函数模拟片上外围设备。
所以在使用Realview MDK调试和烧写的过程中,都用到了调试脚本。下面将分三个方面详细地研究调试脚本的编写和使用。
在了解调试脚本之前,我们必须了解Realview MDK预定义的一些常用命令和函数的用法。
下列是常用的预定义命令格式和语法标准说明:
预定义的命令语法 | 描述 |
MAP 开始地址, 结束地址 | 在内存中映射一段存储区域。 |
Go 开始地址,结束地址 | 程序从开始地址运行,到结束地址停止。 |
DIR VTREG | 显示所有的CUP引脚寄存器。 |
预定义的函数 | 描述 |
void rwatch (ulong address) | 信号函数被延时,直到函数参数地址被读取。 |
void wwatch (ulong address) | 信号函数被延时,直到函数参数地址被写入。 |
void swatch (float seconds) | 信号函数延时参数指定的时间,单位为S。 |
void twatch (ulong states) | 信号函数延时参数指定的CUP周期。 |
uchar _RBYTE (address) | 在参数指定的地址处读取1个字节的数据。 |
ulong _RWORD (address) | 在参数指定的地址处读取1个整型的数据。 |
ulong _RDWORD (address) | 在参数指定的地址处读取1个长整型的数据。 |
uchar _WBYTE (address, uchar val) | 向参数指定的地址处写入1个字节的数据。 |
void _WWORD (address, uint val) | 向参数指定的地址处写入1个整型的数据。 |
void _WDWORD (address, ulong val) | 向参数指定的地址处写入1个长整型的数据。 |
一、在软件仿真中的应用:
使用Realview MDK软件模拟器调试程序时,除了像硬件调试那样配置相关的寄存器以外,有时还必须使用信号函数模拟外设信号的输入/输出,甚至完全模拟一个外围设备。比如:ADC,如果我们写了一个ADC程序,但是没有模拟输入,那怎么会有输出呢?这就有劳了脚本的功劳了。下面的程序将模拟一个外围设备向ADC接口输入正弦波信号:
这些仿真详细请见:http://blog.ednchina.com/likee/138832/message.aspx
这些函数当然还有方波,锯齿波等信号,这些函数可以在RV MDK的HELP文件中都找到,如下图:
二、在硬件仿真中的应用:
我们在前面已经介绍过了,Realview MDK编译链接好的程序在硬件上运行之前,要求硬件具有合适的环境(例如,时钟的配置、存储控制的配置、堆栈的建立等等),一般这些工作是由启动代码完成的。在Realview MDK中,通过调试脚本使用MDK预先定义好的寄存器读写命名设置硬件环境。这一工作在硬件调试之前是必须进行的。下面是一个初始化硬件环境的调试脚本函数:
FUNC void Setup (void) { _WWORD(0xfffffd44 ,0x00008000); // 配置看门狗模式寄存器;
_WWORD(0xfffffd60 ,0x00320100); // 配置电压效验模式寄存器; _WWORD(0xfffffc20 ,0x00000601); // 配置主晶振寄存器; _WWORD(0xfffffc2c ,0x00191C05); // 配置锁相环寄存器; _WWORD(0xfffffc30 ,0x00000007); // 配置主时钟寄存器; _WWORD(0xfffffd08 ,0xa5000001); // 配置复位控制模式寄存器; pc = 0x200000; // 设置PC的值。 }
三、在FLASH下载中的应用:
使用Realview MDK进行Flash下载时,我们知道要对目标板的硬件环境进行初始化配置,其配置方法和硬件调试的情况是差不多的。
用户100109 2008-8-12 02:50
用户160112 2008-8-2 18:43
用户391193 2008-8-2 00:31
用户1053025 2007-6-22 11:15
大哥,你举例也太惨烈了~~
奉送一个词:慎独