Наоборот. На русском переписали. Это документация к riscv, которой должны следовать разработчики ядер.
Ядро BM-310S6 (возможно вместе с контроллером прерываний) разработал CloudBear. НИИЭТ приобрел лицензию на него и сделал свою периферию. Видимо поэтому ядро и контроллер прерываний очень скромно описаны в документации НИИЭТ.
По крайней мере русский текст по контроллеру прерываний что у НИИЭТ, что у МИЛАНДР местами дословно совпадает (кроме названий регистров), что наталкивает на мысль, что этот скромный кусок текста тоже достался от CloudBear.
Что из всей спецификации riscv реализовано в ядре к1921вг015, надо по крупинкам надо собирать отовсюду. Было бы очень хорошо, если бы была сводная информация по ядру. Может она где-то есть, но не нашел.
RabidRabbit писал(а): ↑23 июл 2026, 16:56 И чем собственно ОСы не угодили? Что значит "время реакции совсем не то"?
Всем угодили там, где нет необходимости быстро реагировать. То есть разрулить несколько неспешных потоков - очень хорошо, но разруливать машинные события операционной системой как-то не очень. Тем более там, где присутствие user-а не предполагается.
Можно сделать UART средствами ОС, если модуль UARTa не работает как надо. Но быстрее, чем у аппаратного UARTа не получится.
Уже начал было прерывание на уровень привилегий user спихивать, но вовремя опомнился - это будет куда более мутная схема, чем разрешить вложенные прерывания. Хотя вложенные как раз и не нужны. Нужны вытесняющие. На миландре с ядром BM-310S0 вытесняющие получается сделать. Там конечно контроллер прерываний более гораздый (CLIC), но даже в том же самом безвекторном режиме (как в PLIC) можно сделать вытесняющие прерывания без вложений. Там сигнал о наличии следующего ожидающего прерывания доставляется ядру сразу, не дожидаясь окончания действующего обработчика. Насколько я понимаю, так документацией riscv и предусмотрено.
Вытеснение организуется легко - в начале сохраняем пару регистров и глобально разрешаем прерывания, в конце запрещаем прерывания и восстанавливаем эту пару регистров.
Задержка на вызов вытесняющего прерывания только на время выполнения критической секции от автоматического глобального запрещения прерывания до ручного его разрешения (и наоборот). По сути это только сохранение всех регистров в стек (так в startup_k1921vg015.S сделано - занимает доли микросекунды). Какая ОС так может? То есть можно и ОС - она будет делать тоже самое, что и должен был делать PLIC, но только программно.
Тут (в к1921вг015) получается, что тоже можно сделать вытесняющие прерывания, но потеряется полезная аппаратная фича - блокировка вложений от одного и того же источника. Блокировку вложений обратно приделывать программно придется. Только это уже костыли, когда ноги без них не ходят.
