Переключение контекста на определенный процесс после определенного ISR

Есть ли какой-нибудь (грязный) метод, чтобы спровоцировать переключение контекста на определенный процесс после определенного ISR?

В нормальной ситуации, после ISR, процесс, который был прерван, продолжит работать, и мне придется подождать, пока планировщик выберет этот конкретный процесс. Я хочу переключиться на конкретный процесс сразу после ISR.

Любой совет будет отличным. Спасибо!

1 ответ

Создайте свой драйвер так, чтобы процесс имел блокировку потока на подходящем системном вызове (read(), ioctl()) с ISR, пробуждающим этот поток (потому что по крайней мере один байт стал доступен для read()).

Затем убедитесь, что поток имеет наивысший возможный приоритет и предпочтительно использует планировщик реального времени (SCHED_FIFO или же SCHED_RR). На практике, если ваш процесс не запускается с привилегиями root, вам нужно запустить службу с привилегиями root, настроить поток, а затем отбросить привилегии; или дать двоичный исполняемый файл CAP_SYS_NICE возможность, например, через setcap pe=CAP_SYS_NICE binary,

Технически возможно для водителя также связываться с расписанием, но я бы не стал этого делать. Все, что так критично ко времени, должно быть сделано вместо этого в ядре ISR.

Если вы хотите сделать это в пользовательском пространстве, потому что вы не хотите, чтобы ваш код был производным от ядра и, следовательно, под лицензией GPL, вы сами по себе.

Другие вопросы по тегам