CMSIS. Первое знакомство

sticker2

Сегодня будем знакомиться с CMSIS.

CMSIS — Cortex Microcontroller Software Interface Standard

представляет из себя набор проектов которые помогают ускорить разработку программного обеспечения на процессорах ARM Cortex, это повышает эффективность сотрудничества в индустрии между компаниями и ускоряет выход на рынок новых технологий. Создание программного обеспечения является одним из основных факторов стоимости в индустрии встраиваемых систем.

Стандартизация интерфейсов программного обеспечения во всей линейке микросхем на ядре Cortex-M у производителей, особенно при создании новых проектов или миграции существующего программного обеспечения на новое устройство, означает значительное сокращение расходов.

CMSIS обеспечивает простые программные интерфейсы к процессору для периферийных устройств, операционной системы, промежуточного программного обеспечения. Это упрощает программное обеспечение для повторного использования, уменьшает время обучения для новых разработчиков микроконтроллеров и сокращает время выхода на рынок электронных устройств.
CMSIS Version 5 поддерживает так же Armv8-M архитектуру включая TrustZone® для Armv8-M расширения аппаратной безопасности,  Cortex-M23 и Cortex-M33 процессоры.

CMSIS содержит следующие компоненты:

  • CMSIS-CORE: API для ядра Cortex-M  и периферии. Обеспечивает стандартный интерфейс для  Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23, Cortex-M33, SC000,и SC300. Включает так же встроенные SIMD функции для Cortex-M4, Cortex-M7, и Cortex M33 SIMD инструкции.
  • СMSIS-Core (Cortex-A): API и базовую систему времени выполнения для ядра процессора и периферийных устройств Cortex-A5 / A7 / A9.
  • CMSIS-Driver: Определяет общие интерфейсы периферийных драйверов для промежуточного программного обеспечения, повышает переносимость. API является RTOS независимым и соединяет периферию микроконтроллера с промежуточным программным обеспечением, которые могут создавать например стеки связи, файловая система или графический интерфейс пользователя (GUI).
  • CMSIS-DSP: DSP библиотека содержит более 60 функций для различных типов данных: фиксированная точка (дробность q7, q15, q31) и число одинарной точности (32-bit). Библиотека доступна для Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 and Cortex-M33.  Cortex-M4, Cortex-M7, и Cortex-M33 оптимизирована с набором инструкций SIMD.
  • CMSIS-NN: CMSIS-NN представляет собой набор эффективных ядер нейронных сетей, разработанных для максимальной производительности и минимизации объема памяти нейронных сетей на процессорных ядрах Cortex-M.
  • CMSIS-RTOS v1: Общий API для операционных систем реального времени, а также эталонная реализация на основе RTX. Он обеспечивает стандартизованный программный интерфейс, который переносимый между другими RTOS и позволяет программным компонентам  работать в нескольких системах RTOS.
  • CMSIS-RTOS v2: расширение CMSIS-RTOS v1 с поддержкой  Armv8-M архитектуры, создание динамических обьектов, поддержка для многоядерных систем, и бинарный совместимый интерфейс с ABI компиляторами.
  • CMSIS-Pack: Описывает механизм поставки программных компонентов, параметры устройств и поддержку оценочной платы. Описание пакета на основе XML содержит пакет файлов: исходные файла, заголовочные файлы, программные библиотеки, шаблоны кода, документацию, параметры устройства, код запуска (startup), алгоритмы программирования, примеры проектов.
  • CMSIS-SVD: Описание периферии. Содержит детальное описание сравнимое со справочным руководством (reference manual).
  • CMSIS-DAP: Отладочный порт. Стандартное программное обеспечение для модуля отладки. Который соединяет порт отладки через USB. Отладчики которые запущены на компьютере соединяются через USB к модулю отладки, а модуль отладки к устройству на котором запущенно ПО. Модуль отладки соединяется с устройством через JTAG или SW интерфейс. Процессоры ARM Cortex обеспечивают CoreSight отладку и трассировку. DAP поддерживает устройства содержащие один или несколько процессоров ARM Cortex.
  • CMSIS-Zone: определение и разделение системных ресурсов. Определяет методы описания системных ресурсов и разделение этих ресурсов на несколько проектов и областей выполнения.

Мотивация

CMSIS был создан, чтобы помочь отрасли в стандартизации. Он обеспечивает согласованные слои программного обеспечения и поддержку устройств в широком диапазоне инструментов разработки и микроконтроллеров. CMSIS — это не огромный программный уровень, который вводит служебные данные и не определяет стандартные периферийные устройства. Таким образом, кремниевая промышленность может поддерживать широкие вариации устройств на базе процессоров Cortex-M с этим общим стандартом.

В частности, преимуществами CMSIS являются:

  • В целом CMSIS снижает кривую обучения, затраты на разработку и время выхода на рынок. Разработчики могут быстрее писать программное обеспечение через множество простых в использовании стандартизированных программных интерфейсов.
  • Согласованные программные интерфейсы улучшают переносимость программного обеспечения и повторное использование. Универсальные программные библиотеки и интерфейсы обеспечивают согласованную программную среду.
  • Обеспечивает интерфейсы для отладочной связи, отладку периферийных представлений, доставки программного обеспечения и поддержки устройств, чтобы сократить время выхода на рынок для нового развертывания микроконтроллеров.
  • Предоставляет независимый от компилятора слой, который позволяет использовать разные компиляторы. CMSIS поддерживается основными компиляторами.
  • Улучшает отладку программ с периферийной информацией для отладчиков и каналов ITM для вывода в формате printf и узнавания ядра RTOS.
  • CMSIS поставляется в формате CMSIS-Pack, который обеспечивает быструю доставку программного обеспечения, упрощает обновления и обеспечивает последовательную интеграцию в инструменты разработки.
  • CMSIS-Zone упростит системный ресурс и разделение, поскольку он управляет конфигурацией нескольких процессоров, областей памяти и периферийных устройств.

Правила кодирования

CMSIS использует следующие основные правила кодирования и соглашения:

  • Соответствует ANSI C (C99) и C++ (C++ 03).
  • Использует стандартные типы данных ANSI C, определенные в <stdint.h>.
  • Переменные и параметры имеют полный тип данных.
  • Выражения для констант #define заключены в круглые скобки.
  • Соответствует MISRA 2012 (но не требует соблюдения MISRA). Нарушение правил MISRA документировано.

Кроме того, CMSIS рекомендует следующие соглашения для идентификаторов:

  • CAPITAL имена для определения основных регистров, периферийных регистров и инструкций CPU.
  • CamelCase имена для идентификации имен функций и функций прерывания.
  • Namespace_ префиксы избегают конфликтов с идентификаторами пользователей и предоставляют функциональные группы (например, для периферийных устройств, RTOS или библиотеки DSP).

CMSIS документируется в исходных файлах с помощью:

  • Комментарии, которые используют стиль C или C++.
  • Doxygen  совместимые комментарии к функции, которые обеспечивают:
    • краткий обзор функций.
    • подробное описание функции.
    • подробное описание параметров.
    • подробная информация о возвращаемых значениях.

Doxygen комментарий, пример:

/** 
 * @brief  Enable Interrupt in NVIC Interrupt Controller
 * @param  IRQn  interrupt number that specifies the interrupt
 * @return none.
 * Enable the specified interrupt in the NVIC Interrupt Controller.
 * Other settings of the interrupt such as priority are not affected.
 */

Проверка

Различные компоненты CMSIS Версии 5 проверяются с использованием основных компиляторов. Чтобы получить разнообразный охват, Arm использует компилятор Arm Compiler v5 (на основе EDG фронтенд), Arm Compiler v6 (на основе LLVM-интерфейса) и компилятор GCC в различных тестах. Для каждого компонента раздел «Проверка» описывает область действия различных проверок.

Компоненты CMSIS совместимы с различными языковыми стандартами на C и C ++. Компоненты CMSIS соответствуют бинарному интерфейсу приложений (ABI) для архитектуры Arm (исключение CMSIS-RTOS v1). Это обеспечивает интерфейсы API C, которые поддерживают взаимодействие между различными пакетами инструментов (тулчейны).

Поскольку CMSIS определяет интерфейсы и функции API, которые масштабируются для широкого спектра процессоров и устройств, объем охвата тестирования во время выполнения ограничен. Однако несколько компонентов проверяются с использованием специализированных наборов тестов.

Исходный код CMSIS проверяется на соответствие MISRA C: 2012 с использованием PC-Lint. Отклонения MISRA документированы с разумными усилиями, однако Arm не претендует на соответствие MISRA, поскольку сегодня, например, нет плана обеспечения соблюдения правил. Исходный код CMSIS не проверяется на соответствие MISRA C++: 2008, так как существует риск того, что он несовместим со стандартами языка C, в частности предупреждениями, которые могут быть сгенерированы различными компиляторами C.

Лицензия

CMSIS предоставляется бесплатно компанией Arm под лицензией Apache 2.0.

ARM::CMSIS пакет

Пакет ARM :: CMSIS содержит следующее:

Файл/Папка Содержимое
ARM.CMSIS.pdsc Файл описания пакета в формате CMSIS-Pack.
LICENSE.txt Лицензионное соглашение CMSIS (Apache 2.0)
CMSIS Компоненты CMSIS (см. Ниже)
Device Референсные реализации CMSIS устройств на базе процессора Cortex-M

CMSIS папка

Папка Содержимое
Documentation Документация
Core Шаблоны пользовательских кодов для связанных файлов CMSIS-Core (Cortex-M), упомянутых в ARM.CMSIS.pdsc
Core_A Шаблоны пользовательских кодов для связанных файлов CMSIS-Core (Cortex-A), упомянутых в ARM.CMSIS.pdsc
DAP Исходный код порта CMSIS-DAP для отладки и эталонные реализации
Driver Файлы заголовков для API интерфейса периферийного интерфейса CMSIS-драйвера
DSP_Lib Исходный код библиотеки программного обеспечения CMSIS-DSP
NN Исходный код библиотеки программного обеспечения CMSIS-NN
Include Подключаемые файлы для CMSIS-Core (Cortex-M) и CMSIS-DSP
Lib готовые библиотеки CMSIS-DSP для ARMCC и GCC
Pack Пример CMSIS-Pack
RTOS Версия CMSIS-RTOS версии 1 вместе с эталонной реализацией RTX
RTOS2 Версия CMSIS-RTOS версии 2 вместе с эталонной реализацией RTX
SVD Пример CMSIS-SVD
Utilities PACK.xsd (файл схемы CMSIS-Pack), PackChk.exe (средство проверки пакетов программного обеспечения),
CMSIS-SVD.xsd (файл схемы CMSIS-SVD), SVDConv.exe (инструмент преобразования для SVD-файлов)

Оставить ответ