# Обзор `ExtendedLibs`

ExtendedLibs - это набор библиотек для удобной работы с STM32. Данный субмодуль подключается напрямую из Git и содержит набор вспомогательных библиотек для работы МК, в частности STM32 и SEGGER RTT.

## Основные возможности


#### Общие утилиты MyLibs (@ref MYLIBS_TOOLS)
- Макросы для задержек (@ref DELAYS_DEFINES)
- Утилиты для работы с всяким (@ref UTILS_DEFINES)
- Битовый доступ к регистрам через union (@ref BIT_ACCESS_DEFINES)

#### Отладка* (@ref MYLIBS_DEBUG_TOOLS)
- Трассировка (@ref TRACE)
- Измерение временных интервалов (@ref BENCH_TIME)
- Генетический алгоритм для оптимизации параметров (@ref GEN_OPTIMIZER)
- Трекеры для статистики и отладки (@ref TRACKERS)

_*Модули отладки независимы от MyLibs и могут быть использованы отдельно_

## Структура библиотеки

*Note: Файлы начинающиеся с `__` и которых нет в этом дереве являются **внутренними/непротестированными/недокументированными***
```
ProjectRoot/
├── MyLibs/                   # Общие библиотеки, независимые от платформы (или почти)
│   ├── inc/
│   │   ├── __mylibs_include.h   # Главный include файл
│   │   ├── __mylibs_config.h    # Конфигурация библиотек
│   │   ├── mylibs_defs.h        # Общие определения и макросы
│   │   ├── bit_access.h         # Битовый доступ к регистрам
│   │   ├── gen_optimizer.h      # Оптимизатор (генетический алгоритм)
│   │   ├── trackers.h           # Трекеры для отладки
│   │   └── trace.h              # Трассировка и логирование
│   └── src/
│
└──RTT						  # Библиотека RTT
    ├── __SEGGER_RTT_Conf.h      # Конфигурационный файл RTT
    ├── SEGGER_RTT.c             # Основной модуль RTT
    ├── SEGGER_RTT.h             # Основной заголовок RTT
    ├── SEGGER_RTT_ASM_ARMv7M.S  # Ассемблерная оптимизация для ARMv7M
    └── SEGGER_RTT_printf.c      # Реализация printf() через RTT
```

## Инструкция по подключению

1. **Склонируйте субмодуль** в ваш проект:

```bash
git submodule add https://git.arktika.cyou/Razvalyaev/STM32_ExtendedLibs path/to/ExtendedLibs
git submodule update --init --recursive
```

2. **Скопируйте файлы конфигурации и главный include** в отдельную папку в вашем проекте (вне субмодуля) и удалите `__`:

```
ProjectRoot/
├── Configs/
│   ├── mylibs_include.h
│   └── mylibs_config.h
│   └── SEGGER_RTT_Conf.h
```

3. **Настройте конфигурацию** под ваш проект:

* `mylibs_config.h` — задайте нужные параметры библиотек.
* `mylibs_include.h` — укажите пути к вашим заголовочным файлам и подключаемым модулям.
* `SEGGER_RTT_Conf.h` — настройки RTT.

4. **Подключайте библиотеки в вашем коде** через главный include файл:

```c
#include "mylibs_include.h"
```

5. **Обновление библиотеки**:

После обновления субмодуля из Git, исходные файлы библиотеки будут обновлены, но ваши конфиги останутся в целевой папке и не перезапишутся:

```bash
git submodule update --remote
```