Espressif недавно объявил, что и Zephyr, и NuttX с открытым исходным кодом для операционных систем реального времени получили официальную поддержку процессоров серии ESP32 WiSoC.
Работа велась долго, и когда мы в 2018 году впервые попробовали портировать Zephyr OS для разработчиков на ESP32, он вообще не сработал, и мы даже не смогли заставить работать образец мигающего светодиода на плате Wemos Lolin32, и образец Wi-Fi даже не был построен. Но прошло время, в 2020 году Espressif Systems официально начала работать на Zephyr, и теперь ввод/вывод, Wi-Fi и некоторые другие функции работают на Zephyr и NuttX RTOS.
Zephyr на ESP32
В 2016 году мы впервые написали о Zephyr Project, описав ОС следующим образом:
Zephyr Project – это легкая операционная система реального времени (RTOS), разработанная для приложений Интернета вещей и состоящая из микроядра для задач с более низким приоритетом, а также наноядра для обработки части реального времени. Объем памяти Zephyr может составлять всего 8 КБ, он поддерживает наборы инструкций x86, ARMv7-M и ARC, включает в себя стеки Bluetooth и 6LoWPAN, а также драйверы ввода-вывода для GPIO, ADC, I2C и SPI, а также поддерживает приложения с ограничениями. Протокол (CoAP) и безопасность транспортного уровня дейтаграмм (DTLS).
С тех пор мы видели операционную систему реального времени, используемую в нескольких беспроводных микроконтроллерах, в частности, в микросхемах Nordic Semi nRF с Zephyr, являющихся частью SDK nRF Connect компании, QuickLogic EOS S3 MCU + eFPGA SoC, платах STM32 с радиомодулем LoRa и многих других.
Поддержка ESP32 может быть не такой полной, как для ESP-IDF, Arduino или MicroPython, поскольку кажется, что Bluetooth еще не поддерживается, но вы найдете документацию для начала работы или сообщение в блоге от апреля 2021 года, в которых объясняется что в то время работали UART, I2C, GPIO, SPI Master и таймеры. Недавно был реализован Wi-Fi, и у Embarcados есть учебное пособие на португальском языке. Впереди еще много работы, о чем лучше всего говорит дорожная карте Zephyr ESP32 на Github. Последнее обновление (26 июля) показывает, что SMP (то есть может использоваться только одно ядро), DMA, ULP, ADC, DAC, CAN и I2S все еще необходимо доработать.
Поддержка NuttX RTOS для ESP32
NuttX – это операционная система реального времени, первоначально разработанная Грегом Наттом как POSIX-совместимая для 8-битных микроконтроллеров. Теперь это проект Apache Incubator, NuttX масштабируется с 8-битной до 32-битной среды микроконтроллеров и в основном следует стандартам POSIX и ANSI, хотя дополнительные стандартные API-интерфейсы из Unix и и других распространенных RTOSs, таких как VxWorks, для добавления функций, недоступных в соответствии с этими стандартами, или для функций, которые не подходят для глубоко встроенных сред (таких как fork()).
Хотя NuttX старше Zephyr, мы встречали его не так часто, как последний, и использовали его только один раз как часть Spresense SDK для платы Sony Spresense. В последних новостях NuttX мы отметили плату Jupiter Nano, работающую на процессоре Microchip SAMA5 Cortex-A5 с тактовой частотой 500 МГц и поддерживающую как NuttX, так и Linux.
Мы можем найти связанный с ESP32 исходный код в репозитории Apache NuttX с папками ESP32 и ESP32-S2 для WiSoC на базе Xtensa, а также папку ESP32-C3 для более нового варианта RISC-V. Мы считаем, что документация лучше, чем для Zephyr (рассматривая ее лишь пару минут), и мы можем легко найти список поддерживаемых и неподдерживаемых функций.
Опять же, GPIO и WiFi поддерживаются, но другие, такие как Bluetooth и ADC, нет. Список, по-видимому, примерно соответствует списку Zephyr, и последний объясняет, что некоторые функции глубоко реализованы в ОС FreeRTOS, используемой в ESP-IDF, поэтому их сложнее перенести на другую операционную систему.
Вы также найдете сообщение в блоге о начале работы и еще одно сообщение на португальском языке, но со скриншотами на английском языке, показывающее, как использовать графическую библиотеку LVGL с NuttX на ESP32.
Espressif Sytems также заявляет, что они помогли перенести MCUboot – безопасный загрузчик для IoT, на Zephyr и NuttX, и вы можете найти совсем недавнюю презентацию, в которой подробно описывается, как была достигнута безопасная загрузка NuttX с помощью MCUboot на плате разработки ESP32-Devkit-C.
Главный вывод заключается в том, что поддержка ОСРВ Zephyr и NuttX для ESP32 значительно улучшилась за последние несколько лет, но в зависимости от набора функций, требуемого вашим приложением, может пока не подходить для коммерческого развертывания.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.