使用 QT SPIM 寻找睡眠(延迟)MIPS 的方法
Looking for a way to sleep ( delay ) MIPS using QT SPIM
我正在尝试找到一种在 MIPS 中将我的程序延迟几秒钟的方法。
我在 MARS 中看到了一些关于系统调用的答案,但在 SPIM 中没有任何效果。有什么办法可以延迟 SPIM 吗?提前致谢。
编辑:我正在寻找一种更方便、更智能的方法,不像 "write code that loops one million times"
真正的操作系统有 sleep
个系统调用。例如POSIX nanosleep(2)
其中 user-space 将指针传递给表示睡眠多长时间的结构,如果你早起,内核会填充它实际睡眠的时间。如果您正在为 Linux MIPS 而不是 SPIM 编写代码,则可以使用它。
但 SPIM 是一个 "toy" 系统,没有任何类型的睡眠系统调用 ,甚至在等待其他事情时没有可配置的超时。你唯一的选择是一个愚蠢的延迟循环,时间取决于主机的速度。
MARS(另一个主要的 MIPS 模拟器)has an extended set of system calls 超越了 SPIM 提供的功能,包括毫秒分辨率 sleep
:$v0 = 32
、$a0 = millis
.
MARS 也有一个 time
系统调用,因此您可以编写一个自旋循环来不断检查时间,看看您是否已经过了所需的唤醒时间。您可能会使用它(在 sleep
接近之后)来获得亚毫秒级的延迟精度。 (SPIM 也缺乏这一点,因此 SPIM 延迟循环必须是纯粹的航位推算或外部 "calibrated"。)
我正在尝试找到一种在 MIPS 中将我的程序延迟几秒钟的方法。 我在 MARS 中看到了一些关于系统调用的答案,但在 SPIM 中没有任何效果。有什么办法可以延迟 SPIM 吗?提前致谢。
编辑:我正在寻找一种更方便、更智能的方法,不像 "write code that loops one million times"
真正的操作系统有 sleep
个系统调用。例如POSIX nanosleep(2)
其中 user-space 将指针传递给表示睡眠多长时间的结构,如果你早起,内核会填充它实际睡眠的时间。如果您正在为 Linux MIPS 而不是 SPIM 编写代码,则可以使用它。
但 SPIM 是一个 "toy" 系统,没有任何类型的睡眠系统调用 ,甚至在等待其他事情时没有可配置的超时。你唯一的选择是一个愚蠢的延迟循环,时间取决于主机的速度。
MARS(另一个主要的 MIPS 模拟器)has an extended set of system calls 超越了 SPIM 提供的功能,包括毫秒分辨率 sleep
:$v0 = 32
、$a0 = millis
.
MARS 也有一个 time
系统调用,因此您可以编写一个自旋循环来不断检查时间,看看您是否已经过了所需的唤醒时间。您可能会使用它(在 sleep
接近之后)来获得亚毫秒级的延迟精度。 (SPIM 也缺乏这一点,因此 SPIM 延迟循环必须是纯粹的航位推算或外部 "calibrated"。)