FreeRTOS для RP2040

Уже давно я посматриваю на FreeRTOS, которая уже присутствует в составе SDK, который я использую для сборки прошивок для RP2040.

И чем дальше, тем усиливается интерес. Интересно, как бы я написал прошивку MIDI-баяна, если бы до начала работ умел программировать под FreeRTOS?

Возможно, пришло время это узнать. Я уже изучил тему поверхностно. Уже сейчас понятно, что архитектура, основанная на очереди событий (есть источники событий, и есть обработчики), для FreeRTOS, можно сказать, родная. Пожалуй, изучу эту шттуку до уровня свободного владения.

Рис. 1

Орган Хаммонда

Оказывается, в звуковом модуле Ketron SD2 имеется аж целый настраиваемый орган Хаммонда!

То есть это не просто готовый семпл (как это обычно делается), а именно настраиваемый звук. Настройка делается почти так же, как на реальном органе — движками, каждый из которых отвечает за свою гармонику.

См. короткую демонстрацию на видео ниже.

Это очень хороший подарок для любителей всякого такого, что исполняют на органе Хаммонда. Можно начинать воображать себя Джимми Смитом, например. 🙂

Забавный момент

Когда я, после 30-летнего перерыва, снова взялся за баян, я обнаружил, что совершенно не помню, как регулировать ремни.

Пришлось пробовать всякое, и пытаться вспомнить «оно или не оно».

И очень не сразу я вспомнил, что нижний край грифа должен упираться в правое бедро (см. рис. 1). Зато когда поставил баян как надо — в голове всплыли все воспоминания об игре в этой позиции. И сейчас уже совершенно непонятно, как такое вообще можно было забыть.

🙂

Рис. 1

Интересная последовательность аккордов

Я тут недавно наткнулся на 10-минутный мастер-класс от Людовика Бейера.

Он там показывает интересную аккордовую последовательность (см. рис. 1). Звучит это очень интересно, я даже попробовал сам поиграть:

Конечно, играю я косячно, темп гуляет. Но общее представление получить можно. Потихоньку, мелкими шагами я приближаюсь к пониманию того, «как он это всё делает».

Рис. 1

Если бы я сейчас сам себя учил в музыкальной школе, то я учил бы себя не совсем так, как в прошлый раз, и не совсем тому, чему учили в прошлый раз. Но что сделано, то сделано, и доучиваться приходится самому. 🙂

Китайское?

А вот если некое электронное изделие:

  • собрано с использованием деталей, сделанных в Китае
  • собрано на печатных платах, изготовленных в Китае
  • … и разработанных с помощью китайской системы EasyEDA
  • использует в качестве ядра системы микроконтроллер, изготовленный в Китае
  • собрано с помощью паяльного оборудования, изготовленного в Китае
  • настроено с помощью мультиметра и осциллографа, изготовленных в Китае
  • использует корпус, напечатанный на 3D принтере, сделанном в Китае

то это же получается китайское устройство, правильно?

Рис. 1

🙂

Навертели всякого…

Начал я тут облагораживать проигрывалку MIDI файлов немножко.

В частности, мне не нравилось, как я сделал реализацию callback-функций, которые вызываются библиотекой. (Сделано было на скорую руку, «чтобы заработало», да так и оставлено.)

И начал я изучать вопрос на тему «есть ли в 2025 году стандартные способы указывать в качестве сишной callback-функции функцию-член класса».

И напоролся на интересную статью, в которой приведён пример (см. рис. 1), который синтактически неправильный для того C++, который я помню. 🙂

Оказывается, пока меня не было, они там в C++ насовали всякого нового (в версию C++ 11). И тот пример из статьи использует это самое новое.

Вот ведь… Придётся разбираться.

Рис. 1

(Да, я в курсе, что C++11 «новый» только для меня, а нормальные программисты уже могут не помнить, что когда-то было как-то иначе.)

Шикарные ремни

Сегодня мой MIDI-баянчик обзавёлся шикарными ремнями (см. рис. 1).

Старые ремни — это те самые, с которыми он был куплен в 1982 году. Они уже пришли в совершенно непотребное состояние. А эти ремни прекрасны. Широкие, удобные. К ним в комплекте имеется ещё поперечный ремень, который застёгивается за спиной. Но я стоя не играю, поэтому для меня это пока неактуально.

Приобретал здесь: Ремни для Баяна, аккордеона и гармони.

Рекомендую.

Рис. 1

Датчик положения — пример реального использования

Вот коротенький отрывок, показывающий, как это звучит:

Там две «подтяжки» (AKA «бенда»).

Рис. 1 КДПВ

Датчик положения — финал

Это короткий ответ на вопрос «зачем в баяне нужен датчик положения».

Датчик реагирует на повороты по двум осям: X (вправо) и Y (вперёд). Рабочий диапазон углов от 0 до 15 градусов.

На любую ось можно настроить следующие контроллеры:

  • бенд (подтяжка) вверх
  • бенд вниз
  • управление силой вибрато (от нуля до максимума)
  • включение/выключение режима Portamento

Глубина бенда может настраиваться в диапазоне от 1 до 4 полутонов.

Датчик положения

Теперь датчик положения является частью схемы баяна. И даже прошивка без него уже не запустится. 🙂

В данный момент реализован, скажем так, драйвер датчика, который умеет:

  • Калибровать датчик, чтобы он «знал», какое положение баяна является рабочим.
  • Сохранять калибровочные данные в EEPROM
  • Читать калибровочные данные из EEPROM при старте системы
  • Перекалибровывать датчик заново, если баян включен с нажатой кнопкой «стрелка вверх»
  • Читать данные с датчика примерно 65 раз в секунду и если его показания изменились — то отправлять соответствующее событие в системную очередь.

Ну и для отладочных целей, модуль «пользовательский интерфейс» ловит события от датчика и выводит текущие углы (в градусах) на основной экран.

Отслеживаются повороты инструмента по двум осям:

  • X — влево/вправо
  • Y — вперёд/назад
Рис. 1