Комментарии 36
"на сайте одной из российских фирм, торгующих Arduino, обнаружился модуль ESP32 lolin32 OLED по цене ниже, чем на Aliexpress."
Увы, такого не бывает на Али всегда дешевле:

ESP сами по себе довольно корявые внутри (не знаю как это обьяснить), поэтому приколов можно много накопать. Любят их за другое - цена и возможности. В узких кругах ходит шутка, что еррата на есп больше самого даташита. А вдруг не шутка?
Это шутка, но только по одной причине — как только еррата начинает приближаться к даташиту по размеру, они выпускают новый чип.
Их уже три — ESP32, ESP32-S2 и ESP32-S3 (не считая ещё двух на ядре RISC V вместо Extensa LX — ESP32-C3 и ESP32-C6), и они существенно разные.
Причём они не обязательно улучшаются: например, криптографический акселератор с каждым новым чипом — медленнее :)
Становится ясно, что иногда кто-то, помимо моего кода, вмешивается в процесс исполнения и запускает некий длительный процесс
Там же установлена RTOS и WIFI, как я понимаю они тоже должны работать. Я правда только micropython использовал.
Да, внутри freertos и просто куча всяких доп файлов "экосистемы". Плюс может сидеть wifi/ble, тут уже от библиотеки и чипа зависит.
Если взять ESP IDF (почти чистый C код) и собрать проект мигания светодиодом, то на выходе бинарник будет весить под 120кб флеша и 60к озу :)
Ого.. не знал. Хотел тоже погонять но не задалось. А напрямую на асме её можно юзать?
можно но оооочень мало кому захочется: это потребует кучу времени для старта. но jtag прицепить можно, а значит будет гораздо лучше чем в старые добрые времена ПЗУ стираемых ультрафиолетом.
Практически нельзя. Документации нет, и даже ISA ядер Extensa — официально под NDA (хотя, говорят, в интернете найти можно всё).
Вот, меня эта сторона и интересовала: есть ли полноценная дока на архитектуру или там серо-черный ящик с сюрпризами?
Второе.
SDK описана достаточно хорошо, но чуть в сторону — и вас ждут увлекательные приключения в серой зоне и «исходники как документация» в лучшем случае.
К счастью, память обычно не проблема и имеющегося в SDK обычно хватает.
Как понял, Xtensa это собираемая система на кристалле из кубиков, но ещё на стадии проектирования кристалла. И, соответственно вопрос не столько в этой доке самой архитектуры, сколько чего конкретно напихано в процессор конкретной ESP-шки, и вот тут дока хромает:
Типовая часть (общая) есть, понятна. А вот описания отдельных фич отсутствуют порой полностью. Так?
А вот описания отдельных фич отсутствуют порой полностью
Скажем так: детализированные описания отдельных фич. По сути, для многого на низком уровне есть лишь констатация присутствия фичи с очень, очень кратким описанием — без внутренних деталей.
ISA ядер Extensa — официально под NDA
Официальная документация на ISA доступна на сайте Cadence, без регистрации и смс: https://www.cadence.com/content/dam/cadence-www/global/en_US/documents/tools/ip/tensilica-ip/isa-summary.pdf
маложрущий сопроцессор ULP по-другому и не получится :(
WiFi как и второе ядро надо запускать явно, это точно не причина
автор сделал какой то бытрый и качественный скачек от ардуино да прилично все описал. Наверное он че то раньше умел :)
я даже не знаю стоит ли повторять за автором рекомендуемая ардуино это надстройка над ESP IDF а она содержит кучу своего закрытого а так же процедуры из rom вызывает. в arduino 2 как то прикрутили отладку.. Но "правильная" отладка затруднена скуднейшей документацией по регистрам. она может nda но даташит и pm на esp очень .. лаконичный
большая часть известных проектов что я смотрел обычно использует platformio. и обычно это тоже используется фрейворк ардуино , но вызывается он не ограниченной ide на java, а своеобразной утилитой командной строки с прикрученным web ide.
а чтобы это все выглядело прилично эту штук запускают и отлаживают при помощи плагина скажем vstudio. оно так же может и с ESP IDF взаимодейтсвовать, без лишних посредников.
в общем. если автор настоящий сварщик то надо либо нырять глубже в дизасм и jtag. Такие опыты есть: люди патчат вызовы rom на уровни бинарника. либо.. не пытаться сделать на этой микрухе больше чем можно: она и так неплохая - много всяких штуковин сделали, и такты не считали
автор сделал какой то бытрый и качественный скачек от ардуино да прилично все описал
В 2014 автор писал про DMA, он явно что-то умеет!
Действительно
В 2014 автор писал про DMA
https://habr.com/ru/articles/228531/
и даже обещал продолжение про решение проблем с ДМА на отечественных МК (насколько я понял), я что-то продолжение не могу найти, интересно чем все закончилось.

сферический DMA в вакууме? Был вот, например, хороший обзор всяких особенностей DMA в реализации от Milandr, .. а толку
А это на каком языке написано?
Я пришел к варианту vscode->platformio->esp-idf
Проект platformio немного отличается от чистого esp-idf, но не сильно и эти отличия документированы. Еще одно время версия esp-idf в platformio заметно отставала от актуальной, но сей час такой проблемы нет.
Фреймворк esp-idf немного косоват, но развивается и базовый функционал работает стабильно. Но в порядке вещей, например, такие вещи как нерабочие устаревшие примеры, которые даже не собираются на актуальном esp-idf.
Документация в порядке убывания актуальности - примеры, комментарии в хидерах библиотек и собственно документация. Закрывает потребности от 50 до 100% от необходимого в зависимости от требуемого функционала.
Периферия радует не только ассортиментом, но и гибкостью.
Хотя если пользоваться обёрткой ардуино, то гибкости будет куда меньше, но и код будет проще - иногда одна комманда без параметров заменяет страницу исходного кода.
Считать такты и писать на ассемблере на этот MCU не вижу ни малейшего смысла для 99,9% задач.
Попробуйте mongoose os, проект заброшен но там очень много написано, намного больше возможностей чем с Arduino IDE
Ну я попробовал самое ходовое - Arduino и оно, в общем то, неплохо, даже для меня, а уж для нормального самодельщика так и просто хорошо.
поглядел. с одной стороны - там интересно, потому что в esp32 они залезли на уровне регистров, без ESP IDF . С другой стороны эта универсальная вещь под несколько контроллеров, которая может все, что умеет каждый контроллер, но похоже не имеет заточки под возможности конкретных контроллеров - так что интересно что это за "много чего". как по мне - она поможет поглядеть-поучиться, но они за что то еще и деньги просят
Есть маленькое замечание - прошивка не всегда проходит, но если нажать на кнопку "BOOT" во время попыток старта загрузки, то все получается гарантировано.
Проблема самой платы. У меня есть две другие разновидности отладочныых плат на ESP32: одна входит в режим программирования без нажатия boot тоже 50 на 50, другая - всегда (чипы usb-uart разные).
Например, для Tensilica дополнительно вставляется барьер памяти memw перед считыванием переменной (и это можно понять), а также перед записью результата (а вот это понять сложнее)
Это поведение можно отключить добавив опцию компилятора -mno-serialize-volatile
Барьер перед записью в память гарантирует, что запись не будет переупорядочена с другими более ранними чтениями и записями. Вообще это поведение унаследовано из времён, когда о явных барьерах ещё не принято было задумываться и считалось, что volatile -- наше всё. Полагаю, что в некоторых культурах программирования это до сих пор верно. При компиляции ядра linux это поведение отключено и явные барьеры должны быть в правильных местах.
К вопросу о ESP32