По сути это все библиотеки для платформы ARM Cortex (STM32). CMSIS содержит низкоуровневые, не зависящие от производителя методы для доступа к аппаратуре микроконтроллеров ARM Cortex. Некоторые производители, например STM, предоставляют библиотеки поверх CMSIS или в дополнение к CMSIS, такие как STM32CUBE. Библиотеки MDED предоставляют высокоуровневый, независимый от производителя интерфейс программирования (C++ API) для аппаратуры микроконтроллеров различных производителей. Библиотека MBED может использовать соглашения по программированию CMSIS, вызовы функций CMSIS, или может быть функций STM32CUBE. Детали реализации зависят от используемой части библиотеки и выбранной модели микроконтроллера.
В программе на основе MBED есть следующие уровни (если спускаться от высокого уровня к самому низкому):
6. Ваша программа на C++. 5. Библиотека MBED C++. 4. Слой HAL библиотеки MBED, нацеленный на определенную модель микроконтроллера. 3. Слой HAL библиотек, предоставленный производителем (такой как STM32CubeMX) - не обязательный слой. 2. Слой библиотек CMSIS, нацеленный на определенную модель микроконтроллера. 1. Микроконтроллер.
Слой CMSIS работает как легкая абстракция, находящаяся между остальным кодом и железом микроконтроллера. Изначально CMSIS представлял из себя только заголовочные файлы с описанием регистров, но потом были добавлены низкоуровневые функции. В основном CMSIS гарантирует, что доступ к регистрам CPU, прерываниям и т. п. будет (почти) одинаковым для всех поддерживаемых моделей микроконтроллеров. Тогда предоставленный производителем слой HAL (например STM32Cube) может использоваться для упрощения доступа к остальной периферийной части микроконтроллера. Слой MBED HAL предоставляет традиционный API на языке C для управления периферийными устройствами микроконтроллера, и он может использовать (а может и не использовать) для этого опциональный слой HAL от производителя микроконтроллера. Библиотека MBED C++ содержит обычные объекты C++ для различных периферийных устройств (например DigitalOut, SPI, Serial). Эти объекты используют традиционный API на языке C, предоставленный слоем HAL. И наконец, Ваша программа находится на самой вершине этого стека, и она использует объекты C++ для управления микроконтроллером на верхнем уровне, используя все эти промежуточные слои абстракции.
В сущности все эти слои позволяют программе быть независимой от выбранного микроконтроллера. То есть Вы не должны иметь дело с библиотекой STM32Cube, или с HAL API, используя вместо этого библиотеку MBED C++. В редких случаях понадобится использовать некоторые функции CMSIS, такие как __disable_irq() и NVIC_SystemReset().
[Ссылки]
1. STM32: аббревиатуры и термины. 2. Cortex Microcontroller Software Interface Standard. |