понедельник, 29 апреля 2013 г.

STM32F407(STM32F4-DISCOVERY) - Нестандартный подход - Подключение библиотек ч1

Часть 1 - Теория


Зачастую проект состоит не только из файлов которые вы создали сами, но также из библиотек, поскольку нет смысла изобретать свои велосипеды.

Во первых, прежде чем начать действовать, необходимо понять, что представляет из себя подключаемая библиотека:

Заголовочные файлы:
Самый простой вариант. В этом случае вам необходимо просто поместить их в корень папки inc/, либо в поддиректорию этой папки, если это группа файлов имеющая общий смысл или выполняющая определённый функционал.
Это хорошо продемострировано на примере библиотеки CMSIS - директории: base/, core_support/, device_support/.
В отличие от двух других способов этот особо не нуждается в практической части, однако отмечу то, что в файле Makefile.common можно редактировать видимость подключаемых файлов для всего проекта в целом, также чтобы файлы не "разбредались", можно подключать и поддиректории: CFLAGS+= -I$(ROOTDIR)/inc/base

Простые библиотеки:
Обычно состоят из двух файлов - файла с кодом и заголовочного файла к нему. Существует два пути:
  1. Добавление заголовочного файла в папку inc/, и добавление исходного кода в папку src/. Так поступают если библиотека представляет собой активный код (обработчики прерываний), настройки и сопутствующий с ними код. Также сюда попадают небольшие библиотеки и библиотеки не требующие особых условий для компиляции.
  2. Создание отдельной директории в lib/ вместе с правилами сборки. Является более сложным в настройке, но в то же время более гибким способом. Позволяет добавлять специфичные флаги, настройки. Порождает файлы *.a типа. Также необходимо указывать   в общих настройках (см. Makefile.common) путь к библиотеке и её фактическое имя.
Эти два способа будут подробно рассмотрены в практической части.

Составные библиотеки:
Как уже видно из названия эти библиотеки состоят из нескольких файлов с кодом и одного (или же чаще нескольких) заголовочных файлов. Ярким примером такой библиотеки является SPL - директория std_periph/. В отличие от простой библиотеки содержит обычно поддиректории исходного кода и заголовочных файлов, а также сложную структуру правил сборки. Также может представлять из себя группу библиотек со своими связями друг  с другом. Для данной библиотеки характерно иметь настройки о которых я также расскажу в практической части.

Напоследок добавлю, что перед подключением любой библиотеки хорошим тоном считается понимание принципов её работы и выполняемый функционал, дабы не возникало конфликта из-за проблемы "чёрного ящика", или хуже того проблемы кота Шрёдингера.