问题分析:
mdk中仿真功能是由debug页中的如下参数设定的:
cpu/driver dll - parameter
仿真器或目标驱动器的dll(来自设备数据库)
dialog dll - parameter
对话框的dll(来自设备数据库)
mdk调试器可以仿真高达4gb的存储空间,这些存储空间可以被映射为读、写或可执行等访问权限。除了存储映射以外,软件仿真器同时可以仿真各种基于arm微控制器的片上外围设备。
问题解答:
使用mdk可以很容易模拟来自外部硬件上的输入,若外部有一串脉冲到达端口引脚,则可以使用信号函数来模拟这些信号。如下面的信号函数以1000hz的频率在端口porta的引脚0处输入一个方波。
signal void one_thou_hz (void) {
while (1) { /* repeat forever */
porta |= 1; /* set porta bit 0 */
swatch (0.0005); /* delay for .0005 secs */
porta &= ~1; /* clear porta bit 0 */
swatch (0.0005); /* delay for .0005 secs */
} /* repeat */
}
下面的命令启动了这个函数:
one_thou_hz ()
仿真一个与输出端口引脚对应的外部硬件稍少一些困难。需要两步,第一步,写一个µvision3的用户或信号函数来执行希望的操作;第二步,创建一个断点以调用该用户函数。
假如使用了输出引脚(porta的位0)来点亮或熄灭led,下面的信号函数使用port2 vtreg来检查cpu的输出,并在命令窗口显示信息。
signal void check_pa0 (void) {
if (porta & 1)) { /* test porta bit 0 */
printf ("led is on\n"); } /* 1? led is on */
else { /* 0? led is off */
printf ("led is off\n"):
}
}
现在,必须为端口1的写操作添加一个断点。下面的命令行将为所有向port2的写操作添加一个断点。
bs write port2, 1, "check_pa0 ()"
现在,不论目标程序何时向端口port2写入,check_pa0 函数都会打印出led的当前状态。
换言之,如果你确实需要仿真lcd,那么,你也不可能看到如真实的lcd屏的效果(原因很简单,我不知道你的lcd屏是什么样子的,同样mdk也不知道啊),事实上,我们只能得知相应引脚上的状态。