Eembest徐良平
和集成开发环境一样,Realview MDK中也使用了调试脚本。调试脚本除了可以初始化软的调试环境以外,还可以初始化Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。所以在使用Realview MDK调试和烧写的过程中,到处都有调试脚本的身影。下面将分三个方面详细地研究调试脚本的编写和使用。在介绍调试脚本之前,先必须了解Realview MDK预定义的一些常用命令和函数的用法。
1.常用预定义命令的说明及注意事项:
下表是一些常用的预定义命令和函数的语法格式及说明。
预定义的命令语法 | 描述 |
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个长整型的数据。 |
2.调试脚本在硬件仿真中的应用
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的值。
}
3.调试脚本在软件仿真调试中的应用
使用Realview MDK软件模拟器调试程序时,除了像硬件调试那样配置相关的寄存器以外,有时还必须使用信号函数模拟外设信号的输入/输出,甚至完全模拟一个外围设备。下面的程序将模拟一个外围设备向ADC接口输入方波信号:
signal void ADC4_Square (void){
float volts;//峰值的电压;
float frequency;//输出的始终频率,单位HZ;
float offset;//偏移电压;
float duration;//持续的时间,单位S;
volts= 1.6;
offset= 0.5;
frequency = 2400;
duration= 1000;
while (duration > 0.0){
AD4 = volts + offset;
swatch (0.5 / frequency);
AD4 = offset;
swatch (0.5 / frequency);
duration -= 1.0 / frequency;
}
}
4.调试脚本在Flash下载中的应用:
使用Realview MDK进行Flash下载时,目标板的硬件环境也需要配置,其配置方法和硬件调试的情况是一样的,在此不再赘述。