Денис Заикин

Плюс Keil'а в идущих "из коробки" пакетах, включающих поддержку микроконтроллеров, а так же библиотеки программирования.

В этой заметки поговорим о том, как упаковать библиотеку в пакет. Поясню для чего - после создания проекта можно просто включить в меню необходимые библиотеки, не копировать в папку проекта и не ссылаться на них.

Для начала стоит сказать что файл с расширением ".pack" - это zip-архив, в который включены необходимые файлы библиотек, документация и файл описания с расширение ".pdsc".

Для примера упакуем библиотеку math и драйвер для датчика температуры LM75.

Описание пакета выполняется в XML формате.

<?xml version="1.0" encoding="utf-8"?>
<package schemaVersion="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="PACK.xsd">
  <!-- Здесь вписывается название производителя -->
  <vendor>devprodest</vendor>
  <!-- Наименование пакета -->
  <name>LIB</name>
  <!-- Описание пакета -->
  <description>Библиотеки и драйверы для устройств</description>
  <!-- url -->
  <url>https://cdeblog.ru</url>

  <!-- Блок описания ревизий -->
  <releases>
  <!-- номер версии и дата выпуска, а внутри изменения -->
    <release version="1.0.2" date="2017-09-22">
    Добавил функции:
      * MATH_hypot(X, Y)
      * MATH_max(X, Y)
      * MATH_min(X, Y)
      * MATH_exp2(X)
  </release>
  <!-- таких ревизий может быть несколько -->
    <release version="1.0.1" date="2017-09-21">
      Добавил драйвер для температурного датчика LM75
    </release>
    <release version="1.0.0" date="2017-09-19">
      Библиотека математических функций
    </release>
  </releases>

  <!-- Ещё не очень разбирался для чего это пока просто оставил -->
  <conditions>
    <condition id="Cortex-M Device">
      <description>Cortex-M processor based device: Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4</description>
      <accept Dcore="Cortex-M0"/>
      <accept Dcore="Cortex-M0+"/>
      <accept Dcore="Cortex-M3"/>
      <accept Dcore="Cortex-M4"/>
    </condition>
  </conditions>

  <!-- теперь самое интересное - блок с компонентами -->
  <components>
    <!-- Группа компонентов. Здесь важную роли играет атрибут Cclass -->
    <bundle Cbundle="Devprodest Lib" Cclass="DEVPRODEST" Cversion="1.0.1">
    <!-- Описание группы -->
    <description>Библиотеки и драйверы для устройств</description>
    <!-- ссылка -->
    <doc>https://gitlab.com/devprodest/periph-drivers</doc>

      <!-- группа Lib и название подключаемого модуля math -->
      <component Cgroup="Lib" Csub="math">
        <!-- Описание -->
        <description>Библиотека с различными математическими функциями</description>
        <!-- далее идут различные файлы -->
        <files>
          <!-- category = header|source|doc|other -->
          <!-- name = путь к файлу -->
          <file category="header" name="lib\math\usr_math.h"/>
          <file category="source" name="lib\math\usr_math.c"/>
        </files>
      </component>

      <component Cgroup="Drivers" Csub="lm75">
        <description>Драйвер для работы с датчиком температуры LM75</description>
        <files>
          <file category="header" name="driver\lm75\lm75.h"/>
          <!-- attr="config" говорит что этот файл будет редактируемый -->
          <file category="header" name="driver\lm75\lm75_config.h" attr="config"/>
          <file category="source" name="driver\lm75\lm75.c"/>
        </files>
      </component>

    <!-- Если нужно добавляем ещё блоки компонентов -->
  </bundle>
  </components>

</package>

В программе описание выглядит следующим образом.

В установщике пакетов:

Описание изображения

В окне выбора пакетов:

Описание изображения

Для автоматизации упаковки написан скрипт.

@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "driver\"
@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "lib\"
@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "devprodest.Lib.pdsc"

Файлы доступны в Gitlab, проект "periph-drivers".

Пакет: devprodest.Lib.pack - Прошу отписаться об ошибках и пожеланиях.