Ищем способ спать (задерживать) MIPS с использованием QT SPIM - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь найти способ отложить мою программу на пару секунд в MIPS.Я видел некоторые ответы относительно системных вызовов в MARS, но в SPIM ничего не работает.Любой способ отложить в SPIM?заранее спасибо.

edit: я ищу более удобный и умный подход, а не как "написать код, который повторяется миллион раз"

1 Ответ

0 голосов
/ 12 декабря 2018

Реальные ОС имеют sleep системные вызовы.например, POSIX nanosleep(2), где пользовательское пространство передает указатели на структуры, в которых указывается, сколько времени нужно спать, и что ядро ​​заполняется тем, как долго оно фактически спало, если вы просыпаетесь рано.Если бы вы писали код для Linux MIPS вместо SPIM, вы могли бы использовать это.

Но SPIM - это «игрушечная» система без какого-либо спящего системного вызова или даже настраиваемого тайм-аутав ожидании чего-то еще.Ваша единственная опция - это тупая петля задержки, где время зависит от скорости работы хост-компьютера.

MARS (другой основной симулятор MIPS) имеет расширенный набор системных вызовов сверх того, чтоSPIM обеспечивает разрешение в 101 миллисекундах sleep: $v0 = 32, $a0 = millis.

MARS также имеет системный вызов time, так что вы можете написать спин-цикл, который постоянно проверяет время допосмотрите, прошли ли вы желаемое время пробуждения.Вы могли бы потенциально использовать это (после sleep, чтобы приблизиться), чтобы получить точность задержки до миллисекунды.(В SPIM этого тоже нет, поэтому петля задержки SPIM должна быть рассчитана исключительно на мертвые точки или внешне "откалибрована".)

...