В чем разница между регистрами Mscratch и Mtvec? - PullRequest
0 голосов
/ 06 июня 2018

Для Mscratch :.Как правило, он используется для хранения указателя на локальное контекстное пространство машинного режима и заменяется регистром пользователя при входе в обработчик ловушек М-режима.Для Mtvec: регистр, который содержит конфигурацию вектора ловушек, состоящую из векторного базового адреса (BASE) и векторного режима (MODE).

Я не смог очистить разницу между двумя.Кто-нибудь может это очистить?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Регистр mtvec непосредственно используется аппаратными средствами: это адрес первой инструкции, которая будет извлечена при обработке прерывания машинного режима.Предполагая, что ловушки включены, это может произойти в любое время, поэтому для программного обеспечения обычно небезопасно хранить произвольные значения в mtvec.Фактически, mtvec обычно записывается небольшое количество раз во время инициализации программного обеспечения машинного режима, а затем сохраняет это значение до сброса.

В отличие от этого, значение mscratch никогда не используется напрямуюаппаратным обеспечением: он просто служит в качестве xlen -битного длинного временного временного пространства, которое может использоваться программным обеспечением машинного режима, защищено от других привилегированных режимов и доступно без разрушения содержимого любого регистра X (черезИнструкция по обмену CSR).

Каноническим случаем является установка mtvec последовательности сборки, которая сначала заменяет sp на mscratch, что приводит к чистому стеку обработки ловушек, который затем может быть использован дляостальные регистры перед входом в обработчик C-ловушек.Это позволяет программному обеспечению машинного режима обрабатывать прерывания без разрушения содержимого регистров X, что необходимо для многих общих системных функций, таких как мультипрограммирование.

0 голосов
/ 29 июля 2018

Насколько я знаю, MTVEC содержит вектор, куда программа будет переходить, когда происходит прерывание.mscratch - это указатель, который может использоваться в качестве альтернативы указателю стека, когда находится внутри функции прерывания.

...