Я ищу шаблон программного обеспечения, предпочтительно на C / C ++, для безопасного доступа к периферийным устройствам MMIO в микроконтроллере, таком как ARM Cortex-M, в параллельной среде - прерывания и главные / потоки (в случае ОС).
Корень проблемы в том, что у каждого периферийного устройства есть свои регистры, объявленные как глобальная переменная (структура / класс).Это означает, что любой может получить к ним доступ (да, есть такие функции, как MPU и MMU, но они не являются ответом).
Чтобы ограничить их область, я ищу шаблон программного обеспечения.Наиболее близким является Singleton (хотя, он не лучший для параллельного программирования).
Когда я делаю периферийное устройство Singleton, я могу спать спокойно, так как никакая другая часть кода не изменит его, по крайней мере, черезAPI, предлагаемый периферийным устройством.
Однако это работает до тех пор, пока мне не понадобятся прерывания.По крайней мере, в Cortex-M прерывание генерируется периферийным устройством и передается в ЦП через Nested Vector Interrupt Controller.Процессор прекращает выполнение текущей команды и выбирает обработчик прерывания.
Внутри обработчика мне нужно установить некоторый бит в периферийном устройстве, чтобы деактивировать источник прерывания, иначе прерывание все еще будет отложено, и после выхода я выполнюэто снова и снова.
Трудно, благодаря шаблону Singleton, теперь я могу создать тупик, так как я не могу получить доступ.
Есть ли программный шаблон, который мог бы помочь мне?