• Система автоматизации с открытым исходным кодом на базе 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, то целиком, без костылей. Но бывает, что приходится пользоваться тем, что есть. При этом, я не помню, чтобы скорость сборки проекта была для меня когда-то узким местом.
 
Сверху Снизу