Closed d-a-v closed 1 year ago
Хоссподи спасибо, я уже собирался писать Serial-интерпретатор для отладки интерфейса через порт)
а можно гайд для чайников, как и чем запустить скрипт, что для этого нужно и по какому адресу искать вебморду?
../../onhost
единственная команда для запуска
затем http://localhost:9080
~/dev/proj/arduino/libraries/GyverPortal/examples/demos/demoAllComponents$ ls -l
total 16
-rw-r--r-- 1 d-a-v d-a-v 1858 Jan 15 23:54 demoAllComponents.ino
~/dev/proj/arduino/libraries/GyverPortal/examples/demos/demoAllComponents$ ../../onhost
+ [ -z /home/d-a-v/dev/esp8266/esp8266 ]
+ [ = clean ]
+ [ ! -r ../../onhost ]
+ VALGRIND=valgrind
+ code=demoAllComponents
+ cd /home/d-a-v/dev/esp8266/esp8266/tests/host
+ make -j 8 V=1 FORCE32=0 ULIBDIRS=/home/d-a-v/dev/proj/arduino/libraries/GyverPortal/examples/demos/demoAllComponents/../../.. /home/d-a-v/dev/proj/arduino/libraries/GyverPortal/examples/demos/demoAllComponents/demoAllComponents
Makefile:21: using /usr/bin/g++ and /usr/bin/gcc
Makefile:47: compiling in native mode
[...]
----> /home/d-a-v/dev/esp8266/esp8266/tests/host/bin/demoAllComponents/demoAllComponents <----
+ valgrind /home/d-a-v/dev/esp8266/esp8266/tests/host/bin/demoAllComponents/demoAllComponents
==501212== Memcheck, a memory error detector
==501212== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==501212== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==501212== Command: /home/d-a-v/dev/esp8266/esp8266/tests/host/bin/demoAllComponents/demoAllComponents
==501212==
SPIFFS: 1048576 bytes
SPIFFS: loading 1048576 bytes from '/home/d-a-v/dev/esp8266/esp8266/tests/host/bin/demoAllComponents/demoAllComponents-spiffs1024KB'
LittleFS: 1048576 bytes
LittleFS: loading 1048576 bytes from '/home/d-a-v/dev/esp8266/esp8266/tests/host/bin/demoAllComponents/demoAllComponents-littlefs1024KB'
10.0.1.7
(mock) =====> WiFiServer port: 80 shifted to 9080 (use option -s) <=====
Создать батник в папке с ино файлом с командой ../../onhost
? Нужен гайд для чайников)
Вам нужно клонировать ядро Arduino esp8266 и указать переменную среды ESP8266 на его каталог.
$ echo $ESP8266
/home/d-a-v/dev/esp8266/esp8266
Понял, будет проще написать парсер чем с этим разобраться) печально
Мне пришлось бы создать пакетный файл в каждом отдельном каталоге примера.
Я думал, что печатать ./onhost
— это то же самое, что и ../../onhost
.
Вы действительно хотите использовать один и тот же командный файл в каждом отдельном примере?
Мне бы инструкцию подробную как это запустить)
Мне не ясно, нужна ли вам помощь, чтобы попробовать сейчас, или вы хотите получить более подробные инструкции в документации, чтобы завершить запрос на извлечение.
Перевод не помогает четко понять.
Ok, I need step by step instructions how to run this debugging "simulation" on Windows 😅
Ah windows it is. Did you happen to install WSL2 ?
I have never tried and I know no-one who has already been running this "emulation-on-host" facility on Windows.
I am not using windows.
What is necessary is gcc
and the posix
API which is not native with windows but used by linux and esp8266.
Native gcc
and posix
can be provided by cygwin
, or WSL2
which is more modern.
cygwin
and WSL2
are new words for me)
cygwin brings gcc and the posix standard (used by linux and esp) to windows. Windows only follows the ANSI standard.
WSL2 is windows emulating the linux kernel API. It allows to install any linux distribution on top of windows. For example ubuntu would believe to be running on top of a linux kernel but windows is acting instead. WSL2 is made by microsoft and after it is installed , you need to install a linux distribution like Ubuntu on top of it.
Any of the two is needed for the esp8266 Arduino core emulation, because windows is not compatible with posix.
Closing per too old and probably unwanted.
it's wanted thing, I just don't have time to test it
Мне бы инструкцию подробную как это запустить)
wsl
запустит дистрибутив linuxsudo apt update && sudo apt install build-essential git -y
mkdir repos && cd repos
git clone --recursive https://github.com/esp8266/Arduino.git \
git clone -b emulationOnHost https://github.com/d-a-v/GyverPortal.git
cd Arduino/tests/host/
cat README.txt
make clean \
ULIBDIRS=../../../GyverPortal/src make D=1 FORCE32=0 ../../../GyverPortal/examples/demos/demoAllComponents/demoAllComponents -j$(nproc)
./bin/demoAllComponents/demoAllComponents -s 8000
In case this is still relevant, merge conflict has been fixed.
Примите его PR - реально полезная штука.
Или хотя-бы его часть, где человек просит изменить название переменных "unix" на "unixx" (т.к. может быть #define)
и ввести 64-битный указатель src/builder.h *_GPP += ((unsigned long)style) & 0xFFFF;
вместо *_GPP += ((uint32_t)style) & 0xFFFF;
Различий не так много: diff
PS: Может я чего не понимаю - зачем вообще обрезать указатели *_GPP += FPSTR(style);
?
@d-a-v (UPD: Not actual) You could describe the emulation process in more detail (or give link example https://github.com/esp8266/Arduino/tree/master/tests/host) in the Readme (aka @Prizrakost) and clarify that it requires running on a Linux environment. Also question: Host emulation support ESP32 or only esp8266? (UPD: Not supported)
Окей. Про обрезание указателя не понял
void THEME(PGM_P style) {
*_GPP += F("<link rel='stylesheet' href='/GP_STYLE.css?v" GP_VERSION "=");
*_GPP += ((uint32_t)style) & 0xFFFF; <--- здесь возможно надо использовать *_GPP += FPSTR(style); ? или я не понял задумку
*_GPP += "'";
*_GPP += ">\n";
_gp_style = style;
}
((uint32_t)style) & 0xFFFF
выводит младшие два байта адреса переменной style
, в итоге формируется строка /GP_STYLE.css?vX.X.X=адрес
Честно - я не помню зачем, но оно неспроста =)
так, скорее всего это сделано для отладки, чтобы при любых изменениях в файле стилей браузер запросил актуальную версию с сервера, а не достал из кэша. Потому что адрес "строки" в памяти изменится
Все понятно. Спасибо!!!
Реально работающая штука!!! Даже перенаправляет ввод/вывод Serial в терминал - для отладки ОГОНЬ! Тестировалось все на чистых системах в VirtualBox.
error calling PR_SET_PTRACER, vgdb might block
). UPD: Скорее всего не заработало т.к. использовалась WSL1. Включить WSL2 не получается на виртуальной машине - windows sandbox недоступна (двойная паравиртуализация не работает, во всяком случае на моей конфигурации).sudo apt update && sudo apt install build-essential git -y
sudo apt install valgrind
mkdir repos && cd repos
git clone --recursive https://github.com/esp8266/Arduino.git
git clone -b emulationOnHost https://github.com/d-a-v/GyverPortal.git
export ESP8266=/home/$USER/Desktop/repos/Arduino
cd /home/$USER/Desktop/repos/GyverPortal/examples/demos/demoAllComponents
../../onhost
<- запускаем скрипт (сам все скомпилирует и запустит web-server на http://localhost:9080/)Ctrl+C
В VirtualBox можно настроить общие папки с host-системой, а в них сделать simlink (HardLinkShellExt) на папку в Windows в которой разрабатываете.
Спасибо, я добавлю гайд в ридми. А лучше сделай PR с максимально подробным описанием того что делать. Хотя лучше это добавить в wiki 🤔
А вообще по секрету portal будет не нужен, ему на замену идёт более мощная система GyverHUB https://github.com/GyverLibs/GyverHUB и там отладка без прошивки будет прямо в браузере, даже без подключения к esp
Мне кажется лучше в вики. Попробую здесь описать как себе представляю.
[опциональный скриншот]
Начиная с версии 3.6.6 библиотеки, появилась возможность отлаживать скетчи на компьютере, без необходимости программирования платы. В настоящий момент поддерживается эмуляция контроллеров esp8266 c ограничениями на аппаратные функции. Более подробно как это работает https://github.com/esp8266/Arduino/blob/master/tests/host/README.txt.
Эмуляция работает только в Linux-окружении, для запуска введите в терминале ../../onhost
из любого каталога примеров.
Для пользователей Windows возможно использовать:
После установки Linux-based системы необходимо:
sudo apt update && sudo apt install build-essential git && sudo apt install valgrind
repos
на рабочем столе текущего пользователя)
mkdir /home/$USER/Desktop/repos && cd /home/$USER/Desktop/repos
git clone --recursive https://github.com/esp8266/Arduino.git && git clone --recursive https://github.com/GyverLibs/GyverPortal.git
ESP8266
. Потребуется вводить каждый раз при открытии нового сеанса терминала, или добавить в файл ~/.profile
пользователя.
export ESP8266=/home/$USER/Desktop/repos/Arduino
cd /home/$USER/Desktop/repos/GyverPortal/examples/demos/demoAllComponents
../../onhost
Чтобы остановить работу скрипта нажать в терминале Ctrl+C
.
Скрипт при компиляции скетчей *.ino
рассматривает их как обычные *.cpp
-файлы, поэтому необходимо указывать объявления функций, расположенных вне области видимости текущего вызова.
void action(); // function declaration
void setup() {
action(); // call function
}
// function definition
void action() {
// todo
}
MARKDOWN
# Отладка на хосте без прошивки контроллера
[опциональный скриншот]
Начиная с версии 3.6.6 библиотеки, появилась возможность отлаживать скетчи на компьютере, без необходимости программирования платы. В настоящий момент поддерживается эмуляция контроллеров esp8266 c ограничениями на аппаратные функции. Более подробно как это работает https://github.com/esp8266/Arduino/blob/master/tests/host/README.txt.
Эмуляция работает **только в Linux-окружении**, для запуска введите в терминале `../../onhost` из любого каталога примеров.
Для пользователей Windows возможно использовать:
- Виртуальную систему (напр. [VirtualBox](https://www.virtualbox.org/))
- Windows Subsystem for Linux ([WSL v2](https://learn.microsoft.com/windows/wsl/install))
После установки Linux-based системы необходимо:
1. Установить нужные для сборки пакеты
```shell
sudo apt update && sudo apt install build-essential git && sudo apt install valgrind
repos
на рабочем столе текущего пользователя)
mkdir /home/$USER/Desktop/repos && cd /home/$USER/Desktop/repos
git clone --recursive https://github.com/esp8266/Arduino.git && git clone --recursive https://github.com/GyverLibs/GyverPortal.git
ESP8266
. Потребуется вводить каждый раз при открытии нового сеанса терминала, или добавить в файл ~/.profile
пользователя.
export ESP8266=/home/$USER/Desktop/repos/Arduino
cd /home/$USER/Desktop/repos/GyverPortal/examples/demos/demoAllComponents
../../onhost
Чтобы остановить работу скрипта нажать в терминале Ctrl+C
.
Скрипт при компиляции скетчей *.ino
рассматривает их как обычные *.cpp
-файлы, поэтому необходимо указывать объявления функций, расположенных вне области видимости текущего вызова.
void action(); // function declaration
void setup() {
action(); // call function
}
// function definition
void action() {
// todo
}
@aromprg
@d-a-v (UPD: Not actual) You could describe the emulation process in more detail (or give link example https://github.com/esp8266/Arduino/tree/master/tests/host) in the Readme (aka @Prizrakost) and clarify that it requires running on a Linux environment. Also question: Host emulation support ESP32 or only esp8266? (UPD: Not supported)
It should be working on windows with the WSL2 environment but I have not tested it myself.
Emulation on host is specific to the esp8266 environment. However if an application is both compilable on esp8266/Arduino and esp32/Arduino, then this environment is useful for esp32 to. Note: one can also use this:
#if CORE_MOCK
// this part is compiled on emulation environment only - not on hardware
#else
// this part is compiled on hardware only - not in the emulation environment
#endif
Отладка без прошивки
Это небольшое дополнение показывает, как использовать возможности ядра esp8266 Arduino для запуска/тестирования/отладки этой замечательной библиотеки на хосте без прошивки на микроконтроллере.
Предлагаются мелкие исправления:
unix
является зарезервированным словом(translated from:)
Debugging without flashing
This small addition shows how to use esp8266 Arduino core's ability to run / test / debug this nice library on host without flashing on micro-controller.
Minor fixes are proposed:
unix
is a reserved word