Top.Mail.Ru

Часть 18. Поправки к библиотекам.

На данный момент я немного тормознул с выкладыванием статей. Но библиотеки продолжают появляться для многих ядер, и сложилась такая ситуация: я выкладываю новые библиотеки, не описывая их. Список можно посмотреть на форуме. В связи с тем, что некоторые идут с самого начала от статьи к статье, а некоторые просто скачивают библиотеки и пытаются их использовать, то могут возникать проблемы. Я постараюсь описать, как работать с библиотеками, не пытаясь пройти все стадии, описанные в статьях.

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

Мы же рассмотрим второй случай. Все библиотеки скачаны и сложены как надо, а мы будем пытаться создать новый проект. Для того, чтобы ошибок было побольше возьмём чип, на который я ещё ничего не писал. Например STM32F205RBT. Загрузите CubeMX и выберите этот МК. Никакую периферию не выбираем, просто переходим в закладку "Project Manager". Там выбираем необходимый каталог и даём имя проекту:

В "Code Generator" ставим галку, чтобы вся инициализация периферии была раскидана по файлам:

И генерируем код. После окончания открываем его в CubeIDE, файл main.c:

Теперь начинаем жестоко уничтожать всё. В каталоге Inc уничтожаем абсолютно всё. В каталоге Src оставляем те файлы, что на картинке, а также полностью удаляем каталог Drivers:

Теперь убиваем всё и в файле main.c:

Настала пора ковырять настройки, открываем их и смотрим, что нам доступно:

Если отсутствует закладка, показанная на картинке, а так же кнопки "Restore Defaults" и "Apply", нужно нажать "Apply and Close" и открыть настройки заново. Этот глюк возникает постоянно, и других способов избавиться от него я не знаю. Теперь нам нужно подчистить старые настройки:

Обязательно выбрать "All Configuration", иначе придется каждую ветку чистить отдельно. И грохаем всё, кроме одной строки:

В ветке "Preprocessor" отдельно для режимов отладки и релиза убираем "Use HAL". Переходим в "Path and Symbols" в режиме "Debug" и начинаем создавать ссылки на наши библиотеки. Так как я CMSIS перенёс в раздел драйверов, размеры каталогов с проектом стали меньше размером. А нам нужно, кроме каталогов библиотек ядра и универсальных библиотек, также указать, где у нас находится CMSIS:

То же самое делаем и для каталогов STM32F2XX и Library:

Теперь переключаемся в режим релиза и подключаем и там эти каталоги кнопкой "Add Folder":

Переходим в описание каталогов и обязательно выбираем "All Configurations":

Указываем пути к Include каталогам, два для CMSIS и наши библиотеки. Делаем это через кнопку "Workspace":

Нажимаем "Apply and Close". И возвращаемся к файлу main.c. В нём, в самом начале, подключаем заголовок библиотек #include "STM32.h". Сохраняем main.c, закрываем его, переименовываем в main.cpp и открываем. Конвертируем проект в C++:

Компилируем и получаем кучу ошибок:

Обратите внимание, в "Project Explorer" указывается файл, который вызвал ошибку. Это происходит из-за того, что библиотека требует другую библиотеку, зависимую от ядра. Но не на все ядра ещё есть необходимые библиотеки или в данном МК нет периферии, которая необходима. Чтобы избавиться от ошибок и не плодить в них кучу "дефайнов", мы просто запретим компилировать эту библиотеку. Выбираем файл с кодом, соответствующий заголовочному файлу:

В открывшемся окне ставим все галки и давим "ОК":

И опять компилируем. И опять получаем кучу ошибок. Почему-то компилятор сразу все ошибки не показывает. Придётся шаги с исключением файлов повторять, пока они не закончатся. Мне пришлось исключить довольно много файлов:

И ошибки закончились. Правда может возникнуть ситуация, когда вроде бы уже и исключать нечего, но ошибки есть. У меня их нет, но, если, возникнут, чаще будет ругаться на библиотеки, зависимые от ядра. Это возникает из-за того, что была допущена ошибка при описании каталогов. Об этом можно узнать в закладке:

Кроме этого, есть библиотека SPI и SPI_soft. Первая, полноценный SPI, вторая ногодрыг. Для совместимости обращений, они написаны одинаково, и из-за этого они дерутся друг с другом. Нужно исключить из компиляции ту, которая не нужна. У меня здесь ничего нет, но при ошибках будут еще и предупреждения, в которых будет сказано, что определённые каталоги указаны ошибочно. Для примера удалил ссылку на каталог с библиотеками и получил вот такие ошибки:

Для особо любопытных создал каталог Examples, в котором буду выкладывать примеры с теми устройствами, с которыми я работаю.

Дополнительно обращаю внимание, что библиотеки написаны в разное время, тогда, когда я ещё ничего не знал и более поздние, когда я уже начал что-то понимать 🙂 Поэтому на более ранние без слёз не взглянешь. Более поздние вроде покачественнее, постепенно, по мере надобности, я улучшаю или переписываю ранее написанное.

Все материалы находятся на Яндекс диске. Обсуждение и список библиотек, а также их состояние - на форуме.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x