Мысли о STM32 HAL или стоит ли стремиться в метапрограммирование на C++

Навеяно сообщением коллеги evsi
Что же до либ, то есть куда более перспективный путь, хотя он и не лежит в плоскости очередного HAL от конкретного производителя. Я имею в виду вот эту либу: github.com/andysworkshop/stm32plus
Кстати, сам Andy Brown (автор либы) ведет весьма интересный сайт andybrown.me.uk/
в недавнем обсуждении STM32 Peripheral Libs: FWLib -> SPL -> Middleware+HAL+CubeMX -> Middleware+Snippets -> CMSIS-Driver API? Куда это все ведет и есть ли истинный путь?

Шаблонное метапрограммирование.
По мере изучения С++, я вижу, что все пути ведут туда. Но пока я не способен (легко) понимать такой код, а уж тем более написать.
У меня к такой библиотеке вопросы:

1. Полностью ли абстрагирует эта конкретная библиотека железо, во всей его сложности? Вопрос шире. Пусть не эта конкретная, а в принципе, можно ли с помощью шаблонного метапрограммирования написать библиотеку, с помощью которой можно включить железо в любом описанном в datasheet режиме?
Не будем брать GPIO, возьмем АЦП. Какой-нибудь сложный режим совместного использования отдельных модулей АЦП, с пересылкой по DMA, запуском по таймеру. Повторюсь, простая периферия не интересует, интересует сложная в извращенных режимах.
Если кто-то из гуру положительно ответит на этот вопрос, буду расти в ту сторону.

2. Вот пишу я код в таком стиле, ухожу из конторы. Сколько будет стоить специалист, способный поддерживать такой код? Как легко его будет найти?

Хорошо, допустим можно написать на шаблонах вообще все, что угодно, во всей полноте. Что мы видим? С помощью достаточно сложного в применении языка шаблонов мы заставляем компилятор сгенерировать нужный нам код.

Почему бы не взять для генерации исходников более мощный язык, предназначенный для манипулирования текстом? Perl, Python, Javascript и так далее.
Описать в декларативном стиле (a-la QML) в JSON формате, что нам нужно от периферии. Парсим этот файл, генерируем C++ исходник, в котором классы периферии имеют простое АPI, минимально необходимое в конкретной задаче.

class AdcSigmaDelta
{
public:
    enum Gain
    {
        Gain05,
        Gain1,
        Gain2,
        Gain4,
        Gain8,
        Gain16,
        Gain32,
    };

    AdcSigmaDelta(const std::vector<Pin> & pins);

    bool start();
    int16_t code(size_t idx) const;
    float voltage(size_t idx) const;
    bool setGain(Gain gain);
...
}

Методы класса наш генератор реализует напрямую регистрами максимально эффективно.
Генератор должен не давать использовать одну периферию в разных местах, GPIO, задействованные в АЦП не задействовать для ШИМ.
Отсюда плавно приходит в голову использовать GUI для генерации JSON файла описателя.

Та-дам! Вот и он — STM32CubeMx.

Для меня, пока, круг замкнулся. Тот Cube, который сейчас есть, пускать в свой код нельзя, только для быстрого старта — сгенерил, посмотрел, взял в свой код, навел порядок.

Тот Cube, который я хотел бы видеть:
открытый исходный код — чтобы тысячи эмбеддеров совместно развивали проект (тысячи бесплатных тестировщиков!),
гибкий, настраиваемый — чтобы код генерился в моем стиле, раскиданный по мной описанному заголовочному файлу.

Недорогой производитель заказных трансформаторов

Запись Попытка сотрудничества с оборонкой и комменты к ней посвящены неадекватным ценам отечественным производителям трансформаторов.
Хочу поделится контактом предприятия, которое недорого мотает трансформаторы.
www.trafo.ru
Нам намотали 10 штук трансов на EFD15, для ИИП, вход ~220, выход 5В/1А, по 75 р/штука (вместе с НДС). К сожалению, не помню, они нам продали вместе с ферритами или мы ферриты с клипсами докупали отдельно.

Если кто закажет или заказывал трансы через них, отпишитесь в комментах о своих впечатлениях от этой фирмы.
  • 0
  • 13 сентября 2012, 16:59
  • tugo