Шаблон программного обеспечения для доступа к MMIO в параллельной среде - PullRequest
0 голосов
/ 14 октября 2018

Я ищу шаблон программного обеспечения, предпочтительно на C / C ++, для безопасного доступа к периферийным устройствам MMIO в микроконтроллере, таком как ARM Cortex-M, в параллельной среде - прерывания и главные / потоки (в случае ОС).

Корень проблемы в том, что у каждого периферийного устройства есть свои регистры, объявленные как глобальная переменная (структура / класс).Это означает, что любой может получить к ним доступ (да, есть такие функции, как MPU и MMU, но они не являются ответом).

Чтобы ограничить их область, я ищу шаблон программного обеспечения.Наиболее близким является Singleton (хотя, он не лучший для параллельного программирования).

Когда я делаю периферийное устройство Singleton, я могу спать спокойно, так как никакая другая часть кода не изменит его, по крайней мере, черезAPI, предлагаемый периферийным устройством.

Однако это работает до тех пор, пока мне не понадобятся прерывания.По крайней мере, в Cortex-M прерывание генерируется периферийным устройством и передается в ЦП через Nested Vector Interrupt Controller.Процессор прекращает выполнение текущей команды и выбирает обработчик прерывания.

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

Трудно, благодаря шаблону Singleton, теперь я могу создать тупик, так как я не могу получить доступ.

Есть ли программный шаблон, который мог бы помочь мне?

1 Ответ

0 голосов
/ 14 октября 2018

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

Здесь дело обстоит иначе.

Это означает, чтоКто-нибудь может получить к ним доступ

Кто это такой?Это только ваша программа, ничего больше.Вы написали это.Вы улучшаете это.Если вы не доверяете себе до этого уровня - лучше развивайте givup uC.Даже RTOS-ы не совпадают с ОС больших компьютеров.RTOS является частью вашего приложения - скомпилирована и связана вместе.

Так что не изобретайте колесо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...