首页 > 解决方案 > 使用 QT SPIM 寻找睡眠(延迟)MIPS 的方法

问题描述

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

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

标签: assemblymipsspim

解决方案


真正的操作系统有sleep系统调用。例如,在 POSIXnanosleep(2) 中,用户空间传递指向结构的指针,这些结构说明要休眠多长时间,如果您早起,内核会填写它实际休眠的时间。如果您正在为 Linux MIPS 而不是 SPIM 编写代码,则可以使用它。

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

MARS(另一个主要的 MIPS 模拟器)有一套扩展的系统调用,超出了 SPIM 提供的范围,包括毫秒分辨率sleep$v0 = 32$a0 = millis.

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


推荐阅读