寻找使用QT SPIM的睡眠(延迟)MIPS的方法

时间:2018-12-11 23:02:32

标签: assembly mips spim

我正在尝试找到一种在MIPS中将我的程序延迟几秒钟的方法。 我在MARS中看到了有关系统调用的一些答案,但在SPIM中没有任何作用。有什么办法可以延迟SPIM吗?提前致谢。

edit:我正在寻找一种更方便,更智能的方法,而不是像“编写循环一百万次的代码”

1 个答案:

答案 0 :(得分:1)

真实操作系统具有sleep个系统调用。例如POSIX nanosleep(2),其中用户空间将指针传递到一些结构,这些结构说了多久的睡眠时间,而如果您提早起床,则内核将用实际睡眠的时间来填充内核。如果您是为Linux MIPS而不是SPIM编写代码,则可以使用它。

但是SPIM是一个“玩具”系统,没有任何类型的睡眠系统调用,甚至在等待其他事件时也可以配置为超时。您唯一的选择是一个愚蠢的延迟循环,其时间取决于主机的速度。

MARS(另一个主要的MIPS模拟器)has an extended set of system calls超出了SPIM所提供的范围,其中包括毫秒级分辨率sleep$v0 = 32$a0 = millis

MARS也有一个time系统调用,因此您可以编写一个自旋循环,该循环不断检查时间以查看是否已超过所需的唤醒时间。您可能会使用它(在sleep之后接近)来获得亚毫秒级的延迟精度。 (SPIM也缺少此功能,因此SPIM延迟环路必须纯粹是死锁,或必须在外部进行“校准”。)