📄 simulator.txt
字号:
1.单步性能的测试
测试说明:单步是仿真器设计中比较难实现的功能。照通常的理解,用户每执行一个单步应该准确实现理想运行的单步性能。例如,运行一个机器周期的指令,内部的所有时序应该都动作一个机器周 期而不能出现不动作或动作过度的现象。不过很遗憾的看到国内的仿真器多数不能达到这个指标。
测试程序:
ORG 0000H
SETB TR0 /* 打开定时器0 */
TestStart:
NOP /* 定时器0 运行1个机器周期, TL0 加1 */
MOV A,#0FFH /* 定时器0 运行1个机器周期, TL0 加1 */
MUL AB /* 定时器0 运行4 个机器周期, TL0 加4 */
LJMP TestStart /* 定时器0 运行2 个机器周期, TL0 加2 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序;
(2) 在运行前打开TL0 的显示,以便单步运行后能观察TL0 的变化;
(3) 使用当前仿真器环境提供的单步功能开始单步运行;
(4) 单步运行后检查TL0 变化的数值是否与指令的周期数相同。
测试结论:仿真器如果没有照严格正规的设计,程序的单步运行性能将不准确,一般会出现实际运行时间变长的现象,这在时间要求较高的单步运行将不能仿真程序的真正运行。
2.中断性能的测试
测试说明:中断是一种非正常的程序跳转,单步仿真有一定的难度,尤其在低档仿真器中。在当前 采用Bondout 技术制作的仿真器中一般可以做到正确仿真,但是仍有一些仿真器不能正确单步仿真中断。
测试程序:
ORG 0000H
LJMP TestStart
ORG 000BH /* 定时器0 的中断服务程序 */
RETI
TestStart:
SETB EA /* 开放全局中断允许 */
SETB ET0 /* 开放T0 中断允许 */
TestLoop:
SETB TF0 /* 设置T0 的中断标志 */
INC A /* A 数值加一,以便观察程序持续运行 */
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 每次SETB TF0 后程序将进入T0 的中断服务程序,执行完毕后返回主程序继续运行。
(3) 主程序能在TestLoop 中连续运行,因此A 能连续加一,但是每循环一次就进入一次中断。
测试结论:仿真器如果没有照严格正规设计,程序的中断性能将不准确。可能出现程序不能跳转到中断服务程序,或没有返回到正确的主程序,或A 不能每次循环连续的加1。
3.连续中断性能的测试
测试说明:在80C51 的中断系统中,串口中断比较特殊。进入串口中断服务程序后中断标志TI 或RI不会自动清除,如果用户程序不对TI 或RI进行清除操作则可能会出现连续进入中断服务程序的情况。根据80C51 的中断处理,在退出中断后必须执行完一条指令后才能重新进入中断服务程序,因此即使连续中断的情况下主程序也能得到连续执行。
测试程序:
ORG 0000H
LJMP TestStart
ORG 0023H /* 定时器0 的中断服务程序 */
RETI
TestStart:
SETB EA /* 开放全局中断允许 */
SETB ES /* 开放串口中断允许 */
SETB TI
TestLoop:
NOP
NOP
INC A /* A 数值加一,以便观察程序持续运行 */
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 进入TestLoop 后,每次单步运行完一条程序都会进入串口中断,退出后继续运行一条下面的程序,然后又进入中断服务程序,A 的数值可以得到递增。
(3) 主程序能在TestLoop 中连续运行,因此A 能连续加一,但是每循环一次就进入一次中断。
测试结论:仿真器如果没有照严格正规设计,程序连续运行中断程序性能将不准确。可能出现程序不能跳转到中断服务程序,或没有返回到正确的主程序,或A 不能每次循环连续的加1。
测试小结
上述的几个测试程序对仿真器的性能要求很高,如果仿真器通过测试说明被测试的仿真器仿真性能指标较高;如果仿真器没有通过测试只能判断仿真器性能不是最好,具体的综合性能要有待其它检验。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -