Опубликовано: Mon, 27 Feb 2023 17:48:22 GMT
Канал: Программирование микроконтроллеров – Учимся программировать микроконтроллеры
Уважаемые жители Habr-а, В данной статье, речь пойдет о доступе к GPIO, и другим регистрам, используя C++. Несколько лет назад, я подготовил статью, о том, как можно используя constexpr-клаcсы, серьезно оптимизировать доступ к GPIO-порту, таким образом, чтобы команда "PA0.set()" - превращалась в одну-три ассемблерных инструкции, в зависимости от обстоятельств. Этот класс лишь выглядел обычным, который оптимизировался компилятором. Фактически, это была высокоуровневая оптимизация низкоуровневого кода. Теоретически возможно было перегручить оператор равенства и писать просто PA0=1 или PA0=2, фактически это вызывало inline инструкцию, позволяющую добавить еще и барьерную инструкцию.Больше года назад, я потерял доступ к аккаунту Habr, и не мог восстановить его. Однако, спустя некоторое время, эксперименты по оптимальному доступу к полям регистров продолжились. И это привело к использованию нехитрых конструкций, построенных на шаблонах. Сегодня, я расскажу к чему привели эти эксперименты.Итак. Задача состояла в том, чтобы максимально описать любой регистр, и получить доступ к нему, удобным способом. Я несколько раз пытался различными способами формализовать описание, и мои попытки привели меня к следующему коду. Читать далее
https://habr.com/ru/post/719320/