• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Web-свалка на RTL871x

pvvx

Активный участник сообщества
Модуль RTL8710AF. Теперь всё работает, спасибо.
Вы бы не спасибо писали, а описали как по вашему должен загружать boot сегменты проекта и какой вообще желательно иметь распределение по выбору загрузки boot-ом. На сегодня есть только вариант от Шарикова и мой, который как вышло короче по коду когда писал, так и оставлен. Ameba имеет только один вариант записи OTA в 0x80000 и никаких описаний как загружаются сегменты одного проекта.
В итоге это оставлено на "произвол пользователя"...
 

aloika

Active member
Вы бы не спасибо писали, а описали как по вашему должен загружать boot сегменты проекта и какой вообще желательно иметь распределение по выбору загрузки boot-ом.
Я пока сделал по-простому: при "нуле" (зажатой кнопке) на GC5 грузится образ по адресу 0x80000, это дефолтный образ, он не изменяется. При единице на GC5 (отпущенной кнопке) грузится образ по адресу 0xb000 - это рабочий образ, его может обновлять пользователь через веб. Если там (по 0xb000) что-то нехорошее или нет образа, то тоже грузится дефолтный по 0x80000.

При прошивке дефолтного образа прописывается триггер для GC5 (в 9-й сектор), добавил в файл .jlink

Пока образы одинаковые. Далее планирую сделать так, чтобы при нажатии этой кнопки еще и параметры wi-fi сбрасывались на дефолтные.

Т.е. логика работы такая: появилось обновление прошивки, пользователь залил ее через веб, перезагрузился - всё работает.

Если пользователь установил такие настройки wi-fi, что всё сломал - зажимает кнопку, перезагружает, загружается дефолтный образ с дефолтными настройками wi-fi. Там он ставит какие надо настройки, перезагружается, загружается рабочий образ. Или сразу два раза перегружает, первый раз с кнопкой, второй без - получает рабочий образ с дефолтными настройками wi-fi.

Если пользователь залил глючный рабочий образ (или что-то вообще не подходящее) - перезагружает с кнопкой, загружает дефолтный образ, заливает правильный рабочий образ.

Веб для всех образов одинаковый, надо просто сделать как-то так, чтобы отображалось в вебе, какой образ (рабочий или дефолтный) загружен, и, может быть, не отображать какие-то странички и т.д. (логику какую-то сделать).

Почему GC5 - не почему, просто на отладочной платке у меня там кнопка.

Сейчас подумал - может быть, образы поменять местами, т.к. при заливке по 0xb000 чего-нибудь несуразно длинного можно затереть 0x80000 и дальше, и тогда вообще не будет живого образа ни одного. Ну или проверку сделать на длину хотя бы.
 

Вложения

pvvx

Активный участник сообщества
Веб для всех образов одинаковый, надо просто сделать как-то так, чтобы отображалось в вебе, какой образ (рабочий или дефолтный) загружен, и, может быть, не отображать какие-то странички и т.д. (логику какую-то сделать).
Это же не обязательно - общий образ для всех приложений. У каждого файла в структуре заголовка на web-диске доступны флаги - там пока используется всего 2 бита (сжат ZIP, есть переменные - требуется "парсить" при выводе). Можно ими распределить открытие файлов по приоритетам. Но диск пока имеет всего до 250 файлов, т.к. ограничено байтом в рабочих структурах (можно заменить, но это надо сделать в нескольких местах...).
А вопрос немного про другое - про компоновку сегментов для загрузки приложения. Счас их может быть сколько влезет в Flash, да и адреса загрузки в них указывают на разные действия. Нет четкого ограничения - терминатора конца сегментов и правила определения базы сегментов следующего приложения.
Например - если описание сегмента говорит, что это запись в flash, то при загрузке сегмент будет переписан в указанную область flash :) Т.е. ваш код по сбросу сектора 0x9000 может просто лежать в image N2 и при запуске будет переписан указанный сектор...
Какое приложение загружено указано в первом сегменте. Там есть текстовый заголовок на 32 символа - код в main.c:
Код:
/* ---------------------------------------------------
  *  Customized Signature (Image Name)
  * ---------------------------------------------------*/
#include "section_config.h"
SECTION(".custom.validate.rodata")
const unsigned char cus_sig[32] = "WEB Sample";
Название загружаемой прошивки отображается в logUART загрузчиком.
У Ameba эта строка всегда равна const unsigned char cus_sig[32] = "Customer Signature-modelxxx";
и нигде не проверяется. Кроме того в заголовке данных первого сегмента есть поля описания номера версии данной прошивки, время трансляции кода и т.д.
Короче хламу, который нигде пока не задействован там много. Он нужен только для производителей серийных изделий и изначально это всё впихнуто в SDK... Если удалить линковку данного заголовка, то всё работает, включая Arduino. Т.е. он просто занимает место в Flash, если применение "для дома, для семьи".
 
Последнее редактирование:

sharikov

Active member
Пока образы одинаковые. Далее планирую сделать так, чтобы при нажатии этой кнопки еще и параметры wi-fi сбрасывались на дефолтные.
В дефолтном образе параметры wifi (да и вообще все параметры) нельзя переписывать потому что за время жизни проекта (годы) в рабочем образе может поменяться формат хранения настроек. Я предусмотрел функцию стирания всей флэши кроме дефолтного образа. Рабочий образ если сохраненных настроек нет применяет дефолтные настройки.

Делить пополам неразумно: рабочему образу как правило нужно больше места.

Веб для всех образов одинаковый,...
Так вообще нельзя делать.
Программа неотделима от вебдиска так что рабочий образ всегда идет вместе с актуальным вебдиском а дефолтный со своим минимального размера.
Рабочий и дефолтный вебдиски за время жизни проекта могут разойтись до абсолютной несовместимости.
 

pvvx

Активный участник сообщества
У проекта web-свалки пока нет задачи для работы годами или для пром.применения... Это как-бы должен адаптировать сам пользователь/изготовитель, если вдруг захотел взять из неё что-то. (лучше полностью переписать, проверить и т.д.) Мои задачи ограничены только тестированием разных вариантов подхода и схем построения web на данном SoC - это и можно взять, а мой выложенный код и реализация может быть глючная :) Сам web я использую в качестве интерфейса для отладки и проверки разных фич. Возникшие по ходу "дырки" и ошибки исправить бы... Счас вот нашел, что существуют неопределенности с загрузками сегментов в boot - нет описаний и четких алго. Надо как-то это пофиксить, попроще, с учетом что вообще из этого может пригодится.
Делить пополам неразумно
Тогда надо четкое описание хвоста, терминатора одного образа и с какой позиции после него идет новый. Или какие-то другие решения как определить где начинается следующий образ и чтобы это было совместимо с Arduino от Ameba и стандартным SDK от них :)
А какие там кнопки выбора и прочие условия загрузки разных image - это уже конкретная задача у конкретной реализации схемы/платы у проектировщика и все варианты всё равно не предусмотреть.

Да, и назрел переход на чипы с “AM” (c SDRAM в 2 Мега).
А там, если приглядеться, какой выходит код – то видно, что в SDRAM вставляется куча процедур переходов по “long_call”, что в ROM, что в сегмент SRAM. В итоге это можно всё заменить таблицей линковки стандартных процедур и использовать загружаемые исполняемые файлы как это было в DOS :) Получиться один образ и много exe-шников в web-диске с bat-никами... :)
 
Последнее редактирование:
  • Like
Реакции: lsm

pvvx

Активный участник сообщества
Почистил немного Web-свалку на RTL8710BN, но не выкладывал в открытый доступ (пока только по просьбе).
Пример с ADC и console:
Код:
>?
CONSOLE COMMAND SET:
==============================
?: This Help
PR=<1/0>: Printf on/off
REBOOT: <1 - uartburn>
DB=<ADDRES(hex)>[,COUNT(dec)]: Dump byte register
FID: Flash info
MEM: Memory info
DPSLP=[TIME(ms)]: Deep sleep
WAKE=<a,r>,<wakelock_status:0..31>: Power
STA=<SSID>[,password[,encryption[,auto-reconnect[,reconnect pause]]]: WIFI Connect to AP
AP=<SSID>[,password[,encryption[,channel[,hidden[,max connections]]]]]: Start WIFI AP
MODE=[mode]: WIFI Mode: 0 - off, 1 - ST, 2 - AP, 3 - ST+AP, 4 - PROMISC, 5 - P2P
WINFO: WiFi Info
SCAN: Scan networks
==============================
>mem

CLK CPU         125000000 Hz
RAM heap        133248 bytes

CPU total run time is 151713
TaskName        DeltaRunTime    percentage
loguart         1401            <1%
IDLE            147700          97%
TCP_IP          102             <1%
Tmr Svc         2               <1%
web_qfn         2               <1%
LateResum       0               <1%
cmd_threa       19              <1%
rtw_recv_       605             <1%
rtw_inter       218             <1%
loguart         260             <1%
rtw_xmit_       0               <1%

Task List:
=========================================
Name      Status Priority HighWaterMark TaskNumber
loguart         R       4       367     5
IDLE            R       0       479     3
TCP_IP          B       9       614     6
Tmr Svc         B       5       434     4
web_qfn         B       5       975     12
cmd_threa       B       6       242     21
loguart         B       4       553     1
rtw_inter       B       6       206     20
rtw_recv_       B       5       877     18
rtw_xmit_       B       5       219     19
LateResum       B       5       217     11
>fid
Flash ID: 0x1c15701c, Size: 2097152 bytes, Status: 0x0
>winfo
WIFI 'wlan1' Setting:
===============================
        MODE => AP
        SSID => RTL871X
        CHANNEL => 1
        SECURITY => AES
        PASSWORD => 0123456789
        IP: 192.168.4.1

        Total 0 packets received (0 bytes), dropped 1
        Total 0 packets transmitted (0 bytes), dropped 1
        RX fifo overflow count 0
        Max skb 3 bufers used, buffers 0
        Max skb 3 data used, data 0
        Max 20 timers used

WIFI 'wlan0' Setting:
===============================
        MODE => STATION
        SSID => ******
        CHANNEL => 1
        SECURITY => AES
        PASSWORD => ********
        IP: 192.168.1.203

        Total 6 packets received (1566 bytes), dropped 1
        Total 6 packets transmitted (1192 bytes), dropped 1
        RX fifo overflow count 0
        Max skb 3 bufers used, buffers 0
        Max skb 3 data used, data 0
        Max 20 timers used

WIFI config:
=================================
        Start mode: 0x3
        Country code: 151
        Network mode: 11
        Tx power: 1
        Adaptivity: 0
        Load flags: 0x7f
        Save flags: 0x7f

WIFI AP config:
=================================
        SSID: 'RTL871X'
        SSID hidden: 0
        Password: '0123456789'
        Security type: WPA2 AES
        Channel: 1
        Beacon interval: 100 ms
        Max connections: 3

WIFI ST config:
=================================
        SSID: '********'
        Password: '********'
        Security type: WPA2 AES
        Auto-reconnect: 5
        Reconnect pause: 1
        Sleep mode: 0x0
        DTIM: 1
получается:
Images size: Flash 276016 bytes, Ram 4016 bytes [280032]
Flash на модулях с RTL8710BN по умолчанию 2 Мбайта.

Порядки свободного Heap:
  • 210 килобайт по старту (без включенного WiFi)
  • 200 килобайт после включения и отключения WiFi
  • 160 килобайт при включенной STA
  • 140 килобайт при включенной AP+STA
  • 120 килобайт во время работы примера с ADC
Ничего не оптимизировал по данному вопросу.
Т.е. свободной RAM в два раза больше, чем у ESP8266. При этом я задал буфера и TCP_WIN в LwIP в два раза больше...
 
Последнее редактирование:

lsm

Разработчик Smart.js
Команда форума
. В итоге это можно всё заменить таблицей линковки стандартных процедур и использовать загружаемые исполняемые файлы как это было в DOS :) Получиться один образ и много exe-шников в web-диске с bat-никами... :)
Тогда нужно придумать и интерфейс общения для этих .exe
 

pvvx

Активный участник сообщества
Тогда нужно придумать и интерфейс общения для этих .exe
BSD ?
The FreeBSD Project

Опыты overlay с ESP8266 показали, что проще сделать общую таблицу на ВСЕ переменные и функции, подобную esp8266web/labels.ld at master · pvvx/esp8266web · GitHub
И все хидеры основного блока являются его описанием.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вытянул поток в реал-тайм на 97600 sps 16 бит встроенного ADC RTL8711AM в javascript и websocket в web-свалке...
Описание скоростей ADC даны тут.
Но есть НО. Для потока в 200 килобайт в секунду текущий метод, примененный в websocket не годится. Он рассчитан на малый поток (до 10-ка килобайт) по запросам, чтобы исключить задержки ACK в TCP (пресловутые 200 ms). А тут уже непрерывный поток с пакетами следующими к паре мс, что в задержках javascript не описать, да и не требуется. Надо другой алго для такой скорости - передавать всегда по 2 пакета TCP без запросов, чтобы избежать задержки ACK...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Закинул какой-то вариант web-свалки для RTL8710BN на git. Но какая-то беда с crlf в lf на git для сборки в WSL (Win10 Ubuntu)...
MinGW умирает, преобразуясь в неудобный MSYS. Переходим на WSL...
 
  • Like
Реакции: A_D

pvvx

Активный участник сообщества
Что только не придумают лишь бы не использовать cygwin.
Нет у нас ваших WSL.
"А нам всёравно". Прогресс не остановить. Долой отстающих! :)
Для них есть Arduino.

SDK частично почищен и всё собирается с -Wall -Werror.
---
Cygwin - способ волшебным образом сделать собственные приложения Windows осведомленными о функциях UNIX :) :)
Зачем это, если в систему встроен WSL? :confused:
Лишний прибамбас. Linux - отстает - нет встроенной поддержки Win и возможностей работы на современном оборудовании.
Посмотрите, что творится у ESP-32. Там MSYS2. Он старый, да неудобный. Освоение ESP-IDF из-за него усложнено. В командной строке работать "телепузики" не хотят.
Пpи WSL надо всего в той-же "эклипсе" махнуть одну строку на [inline]bash make.sh[/inline] если нет желания что-то переделывать и всё завертится..
 
Последнее редактирование:

sharikov

Active member
"
Посмотрите, что творится у ESP-32. Там MSYS2. Он старый, да неудобный. Освоение ESP-IDF из-за него усложнено. В командной строке работать "телепузики" не хотят.
Смотрел esp-idf. Долго на ubuntu 16.04 искал msys, не нашел. Наверно я что-то делаю неправильно только не знаю что потому что esp-idf собирается "из коробки" без правок. Совсем, то есть вообще без правок: make - j flash.
 

pvvx

Активный участник сообщества
Смотрел esp-idf. Долго на ubuntu 16.04 искал msys, не нашел. Наверно я что-то делаю неправильно только не знаю что потому что esp-idf собирается "из коробки" без правок. Совсем, то есть вообще без правок: make - j flash.
А нет make в Linux и Windows по умолчанию. Вы что-то спутали :)
Почитайте внимательнее Standard Setup of Toolchain for Windows — ESP-IDF Programming Guide v3.0-dev-1853-g77eae33 documentation
И что делать если нет диска "C" или он забит? :)
Покупать специальный комп для ESP-IDF? ;)
Потом укажите как проще запустить какую оболочку c ESP-IDF, без набора в строке десятков всяких крипто-надписей для "телепузиков"...
Интересно - в один пост форума влезет, по ограничению размера текста? :)
-------
Лучше бы сказали куда впихнуть [inline]sudo chmod 666 /dev/ttyS6[/inline] в makefile, т.к. у dev-board с ESP-32 постоянно отваливается COM. Я же не буду под админом запускать данную свалку!?
Т.е. из коробки без всяких пришлепок ESP-IDF не пашет на Windows, хотя она имеет полный Ubuntu.
Но главная беда - никак не установить это всё одной мышкой :)
Потом внимательнее сравните размеры набиваемых сообщений и кол-во действий в Standard Setup of Toolchain for LinuxStandard Setup of Toolchain for Windows.
 
Последнее редактирование:

pvvx

Активный участник сообщества
hardlink 'и делать.
Это вы Ардуинщикам опишите :)
Для нормальных людей у ESP-IDF есть неустранимая беда - время сборки проекта при отладке превращается в недели... Для всех других WiFi-SoC время сборки проекта - 3..7 сек с нуля.
По этому его отладят наверно через пару лет только, аудиторией в пару тысяч проверяльщиков. :)
 
Последнее редактирование:
Это вы Ардуинщикам опишите :)
Поставить FAR, который всегда это умел, или плагин к любому другому shell'у, я думаю, даже ардуинщик сможет. Я все громоздкое и не слишком используемое с SSD C перекидываю на обычный D, а на C - hardlink на это.
 

pvvx

Активный участник сообщества
Поставить FAR, который всегда это умел, или плагин к любому другому shell'у, я думаю, даже ардуинщик сможет. Я все громоздкое и не слишком используемое с SSD C перекидываю на обычный D, а на C - hardlink на это.
У меня всё в основном на SSD-PCIE (Rd/Wr >2 GB/сек). Но на скорость сборки это не влияет на Win из-за "кеширования дисковых операций в RAM". Проблема не в хард, а в лишних сущностях, которые обывателю не удержать в голове.
Вот какого смыслу в ESP-IDF предлагают на windows ставить примочки, если в базе есть WSL?

На скорость сборки проектов влияет по приоритету:
1) Правильно приготовленный проект для десятков потоков
2) Подходящий многоядерный CPU
3) Тип дисковой системы (TMPFS/NTFS/...) (нагрузка антивирусов и прочего софта)
По п.п.1 в ESP-IDF и "конь не валялся".
По п.п.2 использовать Linux не особо выйдет с современными, реально много ядерными и доступными всем CPU. Он ещё не пропатчен на них, а пропатчат когда появиться что новое. В итоге только Windows - там пишут ПО по документации с NDA от производителей CPU и ждать несколько лет поддержки новых CPU не требуется . :)
По п.п.3 в Win10 с WSL сложилась такая ситуация: HDD/SSD не влияют, влияет (сокращает время сборки в 2 раза) расположение проекта в tmpfs, в отличии от других размещений... В видео карте памяти ныне от 8ГБ и даже туда влезет весь ESP-IDF со всеми своими примочками, но собирается он, по умолчанию, несколько минут...:eek: Изменил в его меню COM порт и "ждите"... Грин-пис на них надо нагнать :)

PS: в целях ознакомления, что не только многопоточность сборки влияет на время сборки: Single Compilation Unit - Wikipedia
+ Ускорение сборки C и C++ проектов
 
Последнее редактирование:
У меня всё в основном на SSD-PCIE (Rd/Wr >2 GB/сек). Но на скорость сборки это не влияет на Win из-за "кеширования дисковых операций в RAM". Проблема не в хард, а в лишних сущностях, которые обывателю не удержать в голове.
Вот какого смыслу в ESP-IDF предлагают на windows ставить примочки, если в базе есть WSL?
Ну удержать hardlink'и - не трудно, если в принципе знать, что они есть (уже лет 20 как, если не больше) а что до WSL, то это штука новая, не везде доступная. У меня, к примеру, рабочий лэптоп на Win7, и я пока тратить 2-3 недели на переустановку всего, что мне нужно (в том числе и редко) на Win10 не готов, тем более, что эта деятельность ненавистна мне). Лично я предпочитаю нативные виндузовые средства разработки, если и портированные с *nix, то целиком, без костылей. Но бывает, что приходится пользоваться тем, что есть. При этом, я не помню, чтобы скорость сборки проекта была для меня когда-то узким местом.
 
Сверху Снизу