Перше знайомство із Zephyr RTOS

За недавній час декілька разів зверталися HR з вакансією в якій одна з ключових вимог стосувалась досвіду роботи з операційною системою реального часу (ОСРЧ) Zephyr.

Колись мав завдання портувати код, написаний під Raspberry PI з операційною системою (ОС) Linux на мікроконтролер.

Зробив огляд можливих варіантів ОСРЧ, які мали певну відповідність POSIX. На той момент виявив можливі кандидати: NuttX, Riot, Zephyr.

Вирішив продовжувати експеременти із NuttX. Мені вдалось зкомпілювати перенесений код, програма стартувала, але через використання Protobuf швидко зупинялась, так як не вистачало оперативної пам’яті для динамічного створення об’єктів.

Наразі, змотивований тим, що є певний інтерес до потенційного роботодавця, вирішив ознайомитися з Zephyr RTOS.

З переліку підтримуваних плат виявив, що в наявності маю EPS32 і STM32F103C8T6. Остання, за браком USB-UART перехідника, була запрограмована на такий адаптер, не бажаючи її перепрошивати, зосередився на іншій.

Власне вона має назву NodeMCU-32 v3 (www.ai-thinker.com)і містить модуль ESP32-WROOM-32E.

Далі короткий опис інсталяції оточення для розробки та компіляції та запуску Helloworld та Blink аплікацій. Використовую ПК з Ubuntu.

1. Установка середовища розробки.

Дію згідно інструкцій:

docs.zephyrproject.org/...​etting_started/index.html

... і отримую помилку:

Installing 'aarch64-zephyr-elf' toolchain ...
ERROR: Toolchain download failed

тому пробую інший шлях встановлення SDK

2. Альтернативна установка SDK

Дію згідно інструкцій:

docs.zephyrproject.org/...​lchain-zephyr-sdk-install

cd /home/$USER/
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.4/zephyr-sdk-0.17.4_linux-x86_64.tar.xz --no-check-certificate
tar -xvf zephyr-sdk-0.17.4_linux-x86_64.tar.xz
cd zephyr-sdk-0.17.4
./setup.sh

Вибираю двічі yes і надаю права доступу до послідовного порта ПК:

sudo cp ~/zephyr-sdk-0.17.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload

3. Компіляція Helloworld під цілеву платформу.

west boards | grep esp32

Виводить список, серед яких виглядає, що до наявної плати подібні yd_esp32 та esp32_devkitc

Далі підключаю до USB порта свого ПК плату з ESP та виконую дії:

cd ~/zephyrproject/zephyr
west build -p always -b yd_esp32/esp32/procpu --sysbuild samples/hello_world
west flash
west espressif monitor

В консолі ПК бачу вивід.

Hello World! esp32_devkitc/esp32/procpu

4. Компіляція Blink під цілеву платформу.

Не ускладнюючи життя додаю до Helloworld мигання світлодіодом.

nano samples/hello_world/src/main.c

І копіюю кодом із:

indiantinker.bearblog.dev/...​-esp32-setting-things-up

Цього разу компілю під іншу платку (хоча діод мигатиме на попередній теж, перевірено).

west build -p always -b esp32_devkitc_wroom/esp32/procpu --sysbuild samples/hello_world
west flash
west espressif monitor

Якщо під’єднати до GPIO25 світлодіод через обмежуючий струм опір, то буде видно його спалах з періодом 1с. Щоб знайти потрібний контакт плати, можна скористатись ресурсом:

docs.sunfounder.com/...​ndix/esp32_wroom_32e.html

Орієнтовна ціна дешевих плат на Аliexpres, які підтримують Zephyr RTOS:

  • STM32F103C8T6 original c8t6 — $1.38
  • ESP32-C3 SuperMini — $1.73
  • ESP-WROOM-32E — $3.68 (містить ESP32-WROOM-32E, плата на 38 контактів)

Посилання на мій GitHub стосовно цього допису:

github.com/yamukha/rtos-experiments

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному2
LinkedIn
Ctrl + Enter
Ctrl + Enter

Рекомендую наступний крок — подивіться, як зробити out-of-tree проект з власним маніфестом і зробіть там той самий блінк. А потім додайте власний board root і знову спробйте блінк.

Підписатись на коментарі