Библиотеки МК

Стоимость разработки ПО — ключевая составляющая в производстве любого современного продукта. Любое устройство можно разбить на маленькие компоненты, выполняющие задачи, которые часто повторяются. Например, кнопка может быть использована как в микроволновке, так и в телефоне. Стандартизируя интерфейсы микроконтроллеров от разных производителей, можно значительно упростить работу программиста и ускорить ее. Компания ARM предлагает библиотеку CMSIS — это независимый от производителя уровень абстракции над железом для серии ядер Cortex-M, который предоставляет простой интерфейс к ядру его периферии и операционной системе реального времени.

Абстракция, наряду с разделением труда, одно из величайших «изобретений» человечества.

abstractions

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

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

Компания ST, решая проблему ускорения разработки, выпустила стандартную библиотеку периферии (StdPeriph, SPL). Многим она нравится, так как вместо работы с регистрами напрямую разработчику предлагается заполнять структуры и вызывать функции, которые в свою очередь производят настройку тех или иных блоков.

Стандартная библиотека, однако, получилась не такой, какой виделась — с расширением линейки МК приходилось добавлять всё новые возможности. В конечном итоге одна и та же библиотека, предоставляющая схожий интерфейс, выглядит по-разному. В данный момент ее разработка прекращена, но ей продолжают пользоваться.

Решая проблему унификации, ST разработала еще две библиотеки: низкоуровневую (Low Layer), которая по сути является оберткой для CMSIS и позволяет выполнять все необходимые операции вызовом макросов или inline-функций; и библиотеку аппаратной абстракции (HAL), использующую низкоуровневую библиотеку внутри.

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


Назад | Оглавление | Дальше