Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

Решай головоломку с котиками!

Котолэнд: блок пазл

Головоломки, Казуальные, 2D

Играть
Станьте Детективом! Решайте логические головоломки, чтобы найти преступника! 
Множество уровней и интересных историй! События и задачи дня!

Тебе предстоит раскрывать массу разных дел, в этом тебе поможет известный всем сыщикам метод дедукции.

Детектив - логические головоломки

Головоломки, Казуальные, Логическая

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

Пинбол Пикабу

Аркады, На ловкость, Казуальные

Играть

Тайна Самоцветов: Ключ Сокровищ - Три в ряд

Казуальные, Три в ряд, Головоломки

Играть
Веселая аркада с Печенькой для новогоднего настроения. Объезжайте препятствия, а подарки, варежки, конфеты и прочие приятности не объезжайте: они помогут набрать очки и установить новый рекорд.

Сноуборд

Спорт, Аркады, На ловкость

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Esp8266

С этим тегом используют

Arduino Электроника Самоделки Своими руками YouTube Умный дом Ardublock Все
251 пост сначала свежее
7
JohnDow73
JohnDow73
1 год назад
Умный дом

Датчик движения HC-SR501⁠⁠

Всем привет, возникла такая проблема, может кто сталкивался?
Заказал датчик движения HC-SR501. По описанию продавца он выглядит так

Датчик движения HC-SR501 Датчик движения, Esp8266, Arduino, Длиннопост

На деле получил вот это

Датчик движения HC-SR501 Датчик движения, Esp8266, Arduino, Длиннопост

Нет электролитов, но там я как понял стоят танталовые конденсаторы, нет стабилизатора на 3,3 в, это тоже решаемо, но самое главное нет джампера на H/L, там стоит резистор на 10 кОм и датчик работает в режиме L. А мне надо H. Можно ли что-то сделать, удалить, перемкнуть? Может кто в курсе? За качество фото сорри.

Показать полностью 2
[моё] Датчик движения Esp8266 Arduino Длиннопост
31
4
DELETED
1 год назад
Умный дом

Где посмотреть примеры конфигов для ESPHome?⁠⁠

Короче, у меня лыжи не едут, поиск не помогает, документация не помогает...
Дано: ESP8266, шаговый двигатель, концевик/микрик.
Необходимо: при подаче питания на ESP, шаговым двигателем обнаружить нулевое положение до сработки концевика/микрика. Допустимый диапазон шагового двигателя 0-100% пусть будет 0-10,000 шагов. Далее ручное выставление желаемой позиции в процентах текущего положения.
Проблема в поиске любой русскоязычной информации с примерами конфигов, не могу понять как это реализовать.
Тег без рейтинга.

Esp8266 Автоматизация Без рейтинга Текст
14
14
miamornik
miamornik
1 год назад
Серия ESP для Новичков

ESP для Новичков. Дополнение⁠⁠

Как оказалось, в прошлой части я не добавил схему подключения к AMS1117, исправляюсь)

ESP для Новичков. Дополнение Arduino, Электроника, Самоделки, Конструктор, Esp8266

Распиновка USB Type A, на всякий случай. Если не уверены, лучше протестить мультиметром, чтобы определить + -.

ESP для Новичков. Дополнение Arduino, Электроника, Самоделки, Конструктор, Esp8266
Показать полностью 2
[моё] Arduino Электроника Самоделки Конструктор Esp8266
13
6
Almazo
Almazo
1 год назад

ESP Internet Radio. Прототип⁠⁠

Вот такой вот приёмник сделал некоторое время назад. Реализовывать в корпус не было намерения, поэтому, вот, в таком виде. Сразу скажу, что я не разработчик, я "повторюшка".

Основа - китайский ESP8266. Общая стоимость проекта около 1500 руб (по ценам 2020-2021 года).

Заказал платку у разработчика, прошил и запустил. Индикатор, двойной блок питания и динамики с Али. Ничего хитрого. Всё работает сразу, без шаманства. Разработчик был очень доброжелательный чел, не знаю, как у него дела сейчас.

На мой взгляд, проект прикольный. Можно было было бы, на мой взгляд, организовать коммерческое производство в красивых корпусах и всё такое. Но на тот момент, многоуважаемый разработчик что-то не захотел об этом говорить.

Никакого отношения к разработчику не имею, всё купил за свои деньги и сам собрал ради интереса!

Итак!

ESP Internet Radio. Прототип Сборка компьютера, Инженер, Компьютерное железо, Esp8266, Своими руками, Видео, Длиннопост

А вот, как оно работает:

Ссылка на сайт разработчика: https://espradio.ru/

Показать полностью 1 1
Сборка компьютера Инженер Компьютерное железо Esp8266 Своими руками Видео Длиннопост
9
839
Buterbrott
1 год назад
Arduino & Pi

Новогодняя звезда - 180 адресных светодиодов!⁠⁠

Мой долгострой. Проект далек от завершения. Но промежуточные результаты уже не стыдно показать.
Плата моей разработки, заказана у китайцев. 180 диодов ws2812b-mini, wemos d1 mini в качестве контроллера.
Эксперименты с генерацией палитр и нестандартными таблицами мэппинга.

[моё] Arduino Esp8266 Led Своими руками Видео
80
5
mega.animeshnik
mega.animeshnik
1 год назад

Народный измеритель пульсации света⁠⁠

Да, название копия из оригинального поста Народный измеритель пульсации света Сей же пост не плагиат, а вариант другого исполнения, ещё более бичёвского и простого в реализации, но код, практически, оригинальный.

Для понимания принципа работы измерителя, читайте оригинальную статью, уважаемого ammo1.

Немного вступления

В оригинале, используется дисплей TFT 1.77, который стоит от 165рублей на текущий день, а я использовал oled 0.96 4 pin, что стоит аж 110 рублей. Вы сейчас посмеётесь, дескать 55 рублей, того не стоят, но это цены на али, в наших магазинах, может быть совсем другая разница.

Кроме того, я поменял NodeMCU из оригинала на WeMos d1 mini, т.к. wemos дешевле и компактнее, но сам мк esp8266 тот же. К сожалению, в отличие от NodeMCU, питать WeMos d1 mini 9 вольтовой батарейкой, не выйдет, потому что, максимальное напряжение 6В, об этом ниже.

Питание

На оригинальном WeMos d1 mini должен быть стабилизатор ME6211C33, но, похоже, на али, дешёвыми, продаются именно клоны, на которых установлен стабилизатор с маркировкой 4b2k, которой обозначается XC6204B332. Оригинальный wemos d1 mini можно питать напряжением до 6В, клоны так же придерживаются этого. У меня есть аккумуляторы 18650, извлечённые из мёртвой батарейки ноутбука, один из них и питает самоделку. Можно использовать пальчиковые батарейки, а ещё проще от внешней батареи(power bank), которая, я думаю, есть у многих. Прибор для измерения пульсация света, нужен далеко не всегда, и я не вижу особых проблем, попользоваться им с помощью внешнего питания, если уж совсем нет других вариантов.

Ближе к делу

А тут всё просто, подключаем oled дисплей, по i2c к мк это D2(sda) D1(scl), по умолчанию или другие пины, если хотите. Temt6000 подключается к единственному, аналоговому входу(A0 к S). Не вижу смысла рисовать, что и как подключается, потому что соединить 3.3 с VDD и V, а G с GND и G, не составляет никаких проблем.

Библиотеку я использовал GyverOLED, она есть в репозитории arduino ide. Сам "измеритель пульсаций" требует библиотеку GyverFilters, которая так же, есть в репозитории.

Я убрал всю графику и на экран выводятся только kp1, kp2, Emax, Emin, Eenv, что лично мне, хватает. В оригинальном скетче были переменные, которые никак не использовались, я их все удалил.

Сам скетч https://disk.yandex.ru/d/GaGxQ53fsn1T2w

Тестирование

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

Для себя я собрал прибор, сочетающий в себе: датчик температуры(htu21d); датчик света(bh1750); измеритель пульсаций(temt6000).

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

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

белый, максимальная(3/3) яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

белый, минимальная(1/3) яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

синий, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

зелёный, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

красный, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

оранжевый? максимальная яркость

Показать полностью 6
[моё] Самоделки Arduino Esp8266 Длиннопост
0
128
monobogdan
monobogdan
1 год назад
TECHNO BROTHER

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?⁠⁠

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!

❯ Как это работает?


Думаю, для многих моих читателей реализация процесса загрузки exe-программ и dll-библиотек в память процесса оставалась эдаким чёрным ящиком, в детали реализации которого вдаваться не нужно. Отчасти это так и есть: современные ОС разруливают процесс загрузки бинарников в память сами, не требуя от программиста вообще ничего, даже понимания того, куда будет загружена его библиотека или программа.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост




Давайте для общего понимания вкратце разберемся, как происходит загрузка программ в Windows/Linux:

1. Система создаёт процесс и загружает в память программы секции из ELF/PE. Обычные программы для своей работы используют 3 секции: .text (код), .data (не-инициализированный сегмент памяти для глобальных переменных), .bss (сегмент памяти для инициализированных переменных). Каждому процессу выделяется собственное адресное пространство, называемое виртуальной памятью, которое не позволяет программе испортить память ядра, а также позволяет не зависеть от разметки физической памяти на выполняющей машине. Концепцию виртуальной памяти реализует специальной модуль в процессоре, называемый MMU.

2. Если бы наши программы не использовали никаких зависимостей в виде динамических библиотек, то на этом процесс загрузки можно было бы закончить: каждая программа имеет свой адрес загрузки, относительно которого линкер строит связи между обращениями к коду/данным программы. Фактически, для самых простых программ линкеру остаётся лишь прибавить адрес загрузки программы (например, 0x100) к каждому абсолютному обращению к памяти.
Однако современные программы используют десятки библиотек и для всех предусмотреть собственный адрес загрузки не получится: кто-то где-то всё равно будет пересекаться и вероятно, портить память. Кроме того, современные стандарты безопасности в Linux рекомендуют использовать позиционно-независимый код, дабы использовать преимущества ASLR (Address Space Layout Randomization, или простыми словами возможность загрузить программу в случайное место в памяти, дабы некоторые уязвимости, завязанные на фиксированном адресе загрузки программы перестали работать).

3. Поэтому для решения этой проблемы придуман т. н. динамический линкер, который уже на этапе загрузки программы или библиотеки патчит программу так, чтобы её можно было загрузить в любой участок памяти. Для этого используются данные, полученные от обычного линкера а этапе компиляции программы: помимо .text, .data и .bss, линкер создаёт секции .rel и .rel-plt, которые называются релокациями. Если объяснять совсем условно, то релокации — это просто запись вида «какой абсолютный адрес в коде программы нужно пропатчить» -> «на какое смещение его пропатчить». Самая простая релокация выглядит вот так:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Где по итогу:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

.rel-plt же служит для резолвинга вызовов к dll/so: изначально программа ссылается на заранее определенные в процессе компиляции символы, которые уже в процессе загрузки патчатся на физические адреса функций из загруженной библиотеки.

И казалось бы — всё очень просто, пока в дело не вступают GOT (Global Offset Table — глобальная таблица смещений) и особенности реализации конкретного ABI. И ладно бы x86 или ARM, там всё разжевано и понятно, однако на других архитектурах начинаются проблемы и не всегда очевидно что и где за что отвечает.

А ведь чаще всего нужно просто загрузить небольшую программу, которой не нужны комплексные загрузчики: немного кода, немного данных и всё. И тут у нас есть три выхода:

  1. Писать полноценный загрузчик ELF-бинарников. ELF может оказаться громоздким для некоторых окружений и его реализация может оказаться тривиальной не для всех.

  2. Зарезервировать определенный сегмент в памяти (пусть с 0xFFF по 0xFFFF) и скомпилировать нашу программу с адресом загрузки 0xFFF с параметром -fno-pic. В таком случае, линкер сгенерирует обращения к памяти по абсолютным адресам — если переменная лежит по адресу 0xFFF, то программа будет обращаться сразу к этому адресу памяти, без необходимости что либо динамически линковать. Именно такой подход использовался во времена ZX Spectrum, Commodore 64 и MS-DOS (однако там роль «виртуальной памяти» выполняла такая особенность 8086, как сегменты). У такого подхода есть и минусы: относительная невозможность загрузки сразу нескольких программ одновременно, зарезервированное пространство линейно отъест небольшой кусок памяти у основной прошивки, нет возможности динамической аллокации секций. Зато такой код теоретически будет работать быстрее, чем PIC.

    Проблемы реализации такого способа: иногда нужно лезть в систему сборки основной прошивки и патчить скрипт линкера так, чтобы он не трогал определенный регион памяти. В случае esp32, например, это требует патча в сам SDK и возможного «откола» от мейнлайн дистрибутива.

  3. Использовать программу с относительной адресацией, однако без сегментов .bss и .data. Самый простой в реализации способ, который к тому же очень экономичен к памяти, позволяет загружать программу в любое место и пользоваться всеми фишками динамического аллокатора и не требует вмешательств в основную прошивку, кроме примитивного загрузчика программ. Именно его я и предлагаю рассмотреть подробнее.


Недавно мы сидели в чате ELF-сцены (разработка нативных программ под телефоны Siemens, Sony Ericsson, Motorola и LG с помощью хаков) и думали, как же можно реализовать загрузчик сторонних программ на практически неизвестных платформах. Кто-то предлагал взять ELF под основу — однако с его реализацией под некоторые платформы есть трудности, а кто-то предлагал писать «бинлоадер» — самопальный формат бинарников, который получается из, например, тех же эльфов.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

В это же время я копал SDK для Symbian и хорошо помнил, что в прикладных приложениях для этой ОС нет поддержки глобальных переменных вообще. Да, сегмент .data и .bss полностью отсутствует — переменные предлагается хранить в структурах. Почему так сделано? Всё дело в том, что каждая программа в Symbian — это dll-библиотека, которую загружает EKA и создаёт экземпляр CApaApplication. И дабы была возможность загрузить dll один раз для всех программ (что справедливо для системных библиотек), ребята полностью выкинули возможность использования любых глобальных переменных. А ведь идея интересная!

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

  • Отсутствие глобальных переменных может стать проблемой при портированиии уже существующего софта, хотя вашим программам ничего не мешает передавать в каждую функцию структуру с глобальным стейтом, который можно при необходимости изменять. Кроме того, нет ограничений на использование C++ (за исключением необходимости ручной реализации new/delete и отсутствием исключений).

  • Отсутствие преинициализированных данных. Вот это уже может стать относительно серьёзной проблемой, у которой, тем не менее, есть свои обходные решения. Например если вы храните команды для инициализации дисплея в таблице, или какие-либо калибровочные данные — вы не сможете их объявить, просто используя инициализаторы в C. Тоже самое касается и строковых литерал. Тут есть два варианта: часть таблиц можно вынести на стек (если эти самые таблицы достаточно маленькие), либо подгружать необходимые данные из бинарника с помощью основной прошивки (например, LoadString и т. п.).


Давайте же на практике посмотрим, имеет ли право на жизнь такой подход!

❯ Практическая реализация


Формат нашего бинарника будет до безобразия прост: небольшой заголовок в начале файла и просто сырой дамп сегмента .text, который можно экспортировать из полученного elf даже без необходимости писать скрипт для линкера. При этом нужно учесть, что ESP32 — это микроконтроллер частично Гарвардской архитектуры, т. е. шина данных и кода у него расположены отдельно. Однако у чипа есть полноценный MMU, который позволяет маппить регионы физической памяти в виртуальную память, чем мы и воспользуемся в итоге!

Заголовок нашего бинарника будет выглядеть вот так:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Программа общается с основной прошивкой посредством псевдо-syscall'ов: функции, которая в качестве первого аргумента ожидает номер нужной службы и один 32х-битный указатель для описания структуры с параметрами. Реализация syscall'ов — одна из самых простых и неприхотливых с точки зрения обратной совместимости с будущими прошивками.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Концептуально всё очень просто: GetGlobalStateSize сообщает нашему загрузчику размер структуры для хранения глобального стейта, в то время как Start уже фактически заменяет main() в нашей программе. Необходимости в crt0 нет, поскольку весь необходимый инит выполняет бутлоадер ESP32. Впрочем, при желании вы можете выделить отдельный стек для вашей программы — это повысит надежность, если выполняемая программа удумает испортить стек.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Собираем нашу программу:

xtensa-esp32-elf-cc.exe test.c -fno-pic -nostdlib -nostartfiles -Wl,--section-start=.text=0x0

xtensa-esp32-elf-objcopy.exe --only-section=.text --output-target binary a.out run.bin

-fno-pic отключает генерацию кода, зависимого от GOT, -nostdlib и -nostartfiles убирает из билда crt0 и stdlib, благодаря чему мы получаем только необходимый код. --section-start задает смещение для загрузки секции .text на 0x0 (в идеале это делать необходимо из скрипта для ld).
objcopy скопирует из полученного ELF только необходимую нам секцию .text.

Как же это работает на практике? Давайте дизассемблируем выходной бинарник и посмотрим, что у нас дает на выхлопе cc:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Обратите внимание, что Start вызывает подфункции с помощью инструкции CALLX8, которая в отличии от обычного Immediate-версии CALL8, выполняет переход относительно текущего адреса в PC, благодаря чему переход полностью независим от адреса загрузки программы в памяти. А благодаря тому, что все данные, в том числе и указатель на глобальный стейт передаются через стек, нет необходимости релокейтить сегменты данных.

По итогу всё, что нужно от загрузчика бинарников — это загрузить программу в память для инструкций, выделить память для структуры с стейтом программы и передать управление Start. Всё!
Конкретно в случае ESP32, у нас есть два возможных решения задачи загрузки программы в память:

  1. Загрузить программу в IRAM. Такая возможность теоретически есть, однако на практике загрузчик ESP32 устанавливает права только на чтение и выполнение на данный регион памяти. Попытка что-то скопировать туда закончится исключением SIGSEGV. Кроме того, сегмент IRAM относительно небольшой — всего около 200Кб.

  2. Самопрограммирование. Для этого, в esp32 есть два механизма — Partition API и SPI Flash API. Я выбрал Partition API для простоты реализации.


Для нашей прошивки необходимо будет переразметить флэш-память. Для этого запускаем idf.py menuconfig, идём в Partition Table -> Custom partition table CSV. Создаём в папке проекта partitions.csv, куда пишем:

# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 1M,
executable, data, undefined, 0x110000, 0x10000

Для заливки программы можно использовать соответствующее Partition API, либо parttool.py:

parttool.py --port "COM41" write_partition --partition-name=executable --input "run.bin"

Переходим к загрузчику программы:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Прошиваем ESP32:

idf.py build

idf.py flash

idf.py monitor

И смотрим результат:

SysCall 25

SysCall 35

SysCall 15

Всё работает!

❯ Заключение


Как видите, ничего сложного в выполнении сторонних программ при условии соблюдении некоторых ограничений нет. Да, в таком подходе есть как серьезные плюсы, так и минусы, однако он делает своё дело и позволяет реализовать запуск игр на кастомных игровых консолях, или сторонних программ на самодельных компьютерах. Ну и конечно же не стоит забывать про плагины! Авось в вашем решении нужна возможность расширения функционала устройства, однако предоставлять исходный код или даже объектные файлы нет возможности — тогда вам может пригодится и такая методика.

Пожалуй, стоит упомянуть ещё один… очень своеобразный метод, который я иногда встречаю при реализации самодельных компьютеров. Люди пишут… эмуляторы 6502/Z80 :)
И если такой подход ещё +- применим к ESP32, то в AVR просадки производительности будут слишком серьезными. Так зачем, если можно использовать все возможности ядра на максимум?

Полезный материал?
Всего голосов:
Приходилось ли загружать сторонний код в ваших устройствах?
Всего голосов:
Показать полностью 9 2
[моё] Опрос Гаджеты Программирование C++ Avr Arduino Esp32 Embedded Своими руками Самоделки Esp8266 Assembler Железо Микроконтроллеры Длиннопост
12
75
Vasiliy181
Vasiliy181
1 год назад
Обмен подарками

Всех с Наступающим! Моя ёлочка на Конкурс АДМ 23-24⁠⁠

Всех с Наступающим! Моя ёлочка на Конкурс АДМ 23-24 Конкурс АДМ 23-24, В лесу родилась елочка, Новогодняя елка, Видео, Вертикальное видео, Длиннопост, Гирлянда, Новый Год, Снегурочка, Дед Мороз, Esp8266, Wled, Wemos, Обмен подарками, Мобильная фотография, Github
Показать полностью 1 1
[моё] Конкурс АДМ 23-24 В лесу родилась елочка Новогодняя елка Видео Вертикальное видео Длиннопост Гирлянда Новый Год Снегурочка Дед Мороз Esp8266 Wled Wemos Обмен подарками Мобильная фотография Github
8
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии