О главе

«Си для встраиваемых систем»

Это онлайн версия книги «Си для встраиваемых систем». В печатном формате её можно приобрести у нас в магазине, а в виде файла epub/mobi/pdf на площадке LeanPub.

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

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

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

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

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

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

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

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

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

// RCC init with LL
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
// RCC init with HAL
__HAL_RCC_GPIOA_CLK_ENABLE();

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


Изменено:

Библиотеки МК: 2 комментария

  1. core_cmInstr.h и core_cmFunc.h теперь не существуют (в папкеCMSIS\Core|Include их нет). Теперь это файлы cmsis_compiler.h и cmsis_iccarm.h or cmsis_armcclang.h or cmsis_armcc.h or cmsis_gcc.h для компилляторов IAR or ARM6 or ARM5 or GCC, соответственно

    0

  2. Простите, но все, что вы написали про __HAL_LOCK и __HAL_UNLOCK — чушь!
    Это просто ЗАГОТОВКА(пример) — она не работает, если определен макрос USE_RTOS то макросы вообще пустые (ничего не делают).
    В синхронном коде, нам ничего не нужно блокировать и разблокировать, ибо все последовательно и этот код просто лишний!
    В асинхронном коде (RTOS) макросы не используют атомарные операции (эксклюзивный монитор — асм команды типа LDREX/STREX) из-за чего просто не могут обеспечить роль мьютекса(блокировки) для доступа к драйверу. При асинхронности при наличии IRQ, это вообще туши свет, что будет если нас выдернуло IRQ а мы знаете ли заняты? мы что должны перепланировать IRQ? если да, то я боюсь что новичок накуралесит такого что будет плохо всем…
    Я когда-то на старом форуме ST находил описание, мол ребята это мы хотели, но руки не дошли, так что
    жрите что даем (и мы должны либо надеяться и использовать мьютекс из РТОС, либо понимать что текущий механизм нифига не защищает!)
    даже на новом форуме есть подобные темы: https://community.st.com/s/question/0D50X00009XkeOGSAZ/questions-surrounding-hallock
    Просто вы вводите в заблуждение новичков, они потом будут думать, что в HAL-е все ок, там блокировка, нельзя так делать, у них еще не окрепли мозги, они не умеют думать критически, они вам просто верят как учителю (авторитету), а вы их обманываете — не хорошо!

Добавить комментарий для Андрей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.