Я пытаюсь реализовать симуляцию микроконтроллера. Это моделирование не предназначено для точного представления тактового цикла одного конкретного микроконтроллера, но для проверки общей правильности кода.
Я думал о наличии "основного потока", выполняющего нормальный код, и второго потока, выполняющего код ISR. Всякий раз, когда требуется запустить ISR, поток ISR приостанавливает «основной поток».
Конечно, я хочу иметь возможность блокировать прерывания.
Я думал о решении этого с мьютексом, который удерживает поток ISR всякий раз, когда он выполняет код ISR, в то время как основной поток удерживает его до тех пор, пока «прерывания заблокированы».
POR (сброс при включении питания) может быть реализован путем не только приостановки, но и уничтожения основного потока (и запуска нового, выполняющего функцию POR).
Windows API предоставляет необходимые функции.
Но кажется, что это невозможно сделать с помощью потоков posix (в linux).
Я не хочу менять фактический аппаратно-независимый код микроконтроллера. Поэтому вставлять что-либо для проверки ожидающих прерываний не вариант.
Желательно получать прерывания в точках с плохим поведением, поскольку это также происходит на микроконтроллерах (если вы не блокируете прерывания).
Есть ли способ приостановить другой поток в Linux? (Я думаю, что отладчики должны использовать эту опцию.)
Пожалуйста, не говорите мне, что это плохая идея. Я знаю, что это правда в большинстве случаев. Но основной код не использует стандартные библиотеки libs или lock / mutexes / семафоры.