RISCV векторная обработка ловушек: неоднозначность при CAUSE = 0 - PullRequest
2 голосов
/ 16 марта 2020

У меня вопрос по поводу векторной обработки ловушек. Короче говоря:

  • Ловушки могут быть либо syn c исключения, либо asyn c прерывания
  • В векторном режиме доступ к таблице векторов осуществляется следующим образом:
  • Исключения: P C = BASE (фиксированная точка входа)
  • IRQ: P C = BASE + 4 * CAUSE (vectored) Проблема, конечно, если CAUSE = 0, есть неоднозначность. Так как CAUSE = 0 остается верным для программных прерываний пользователя, в руководстве (se c 3.1.7) говорится:

Когда разрешены векторные прерывания, прерывание причина 0, соответствующая программным прерываниям пользовательского режима, переносится в то же место, что и синхронные исключения. Эта неоднозначность не возникает на практике, так как программные прерывания пользовательского режима либо отключены, либо делегированы в менее привилегированный режим

Теперь я понимаю, что в М-режиме U-прерывания отключены. Но что, если в U-режиме появляется исключение? Я пропускаю что-то подобное, исключения обрабатываются только в М-режиме? Кроме того, я не понимаю, почему нет никакой двусмысленности, если обработчик точно такой же. Разве программное обеспечение не должно тестироваться, если ловушка произошла из-за исключения или пользовательского программного прерывания?

...