• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

EspLua вместо NodeMCU

pvvx

Активный участник сообщества
Вот команда Reset этой версии NodeMCU:
...
system param error
....
Прочтите инструкцию по прошивке в git:
Прошивка Flash
0x00000.bin: 0x00000
0x0C000.bin: 0x0C000
esp_init_data_default.bin: 0x7C000
blank.bin: 0x7E000

  • Flash любого размера прошивается c опциями как 512 килобайтная. Анализ реального размера производится в ходе исполнения прошивки.
такой результат я и на китайской прошивке получаю если отключу анализ ошибки.
Поэтому Вам и написал про обход ошибки.
У них и у всех других ошибка в кэш spiffs. Вылет происходит из-за неё. Описал-же Что там не понятно и требует доп. описания?

PS @nikolz по поводу и без :): А то и так нерешенных и не протестированных вопросов в EspLua ещё много. Вообще не ясно зачем столько модулей налеплено в NodeMCU. Считаю, что их большую часть просто выкинуть из-за того, что они не отвечают стандартам и созданы исключительно ради “галочки” – типа у нас это есть, но работать правильно не будет. :) Большую часть этих модулей можно реализовать на самом Lua, даже примеры даны.
Основные насущные вопросы: как и куда в Lua встроить события подключения WiFi к AP и прочие указанные в https://github.com/pvvx/EspLua/blob/master/include/user_interface.h#L333
Без них работа с любыми WiFi соединениями в Lua с обработкой событий не представляется возможной.
Второй вопрос - куда девать возможный организуемый буфер в IRAM на 20 килобайт?
Это не отнимает памяти "heap".
Ну и ещё осталась куча просто не тестированных и не реформированных модулей....
 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx,
понятно.
Почему разработчикам spiffs не напишите?
А , дайте угадаю.
Что им писать,
хоть и не китайцы,
а все равно - г..но сделали!
угадал?
Неа. Это мнение из вашей среды обитания. У меня проще - разработчик давно бросил проект, а так-же spiffs не отвечает необходимым нам условиям и морочится с ним нет никакого смыслу. "Пишите в спортлото" :)
 
Задание максимума мощности передатчика WiFi.
Что это я знаю, нет описания Вашей процедуры, синтаксис, пример.
Сколько "попугаев" (82?) в скобочках допустимо, если не трудно.
Спасибо.
Код:
> =wifi.sta.rssi() 
-61
> =wifi.max_tpw(2)
stdin:1: attempt to call field 'max_tpw' (a nil value)
>
 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx,
возможно проблема в том что портируют на ESP,
где надо соблюсти кратность 4 ?
И виноватых нет, а есть особенность ESP?
Опять Нет. Виноват избранный метод описания у автора. При делении там всегда выходит не кратное значение....
А заниматься кляузами и подхалимством - это ваша задача - пишите авторам. Каждому - своё. Мне и так хватает своих забот по адаптации того что есть...
 

pvvx

Активный участник сообщества
Что это я знаю, нет описания Вашей процедуры, синтаксис, пример.
Сколько "попугаев" (82?) в скобочках допустимо, если не трудно.
Спасибо.
Инструкция EspLua ещё не создавалась. Можете принять в ней активное участие.
Попугаев там: maximum value of RF Tx Power, unit : 0.25dBm, range [0, 82]
 

pvvx

Активный участник сообщества
Вы ошибаетесь разработчик spiffs выпустил новую версию 0.3.2.
Вопрос: А зачем Вы дублируете описание структуры eraminfo в iram_buf.c ?
Чтобы у других ошибки были? или это такой стиль программирования продвинутый?
Это такой метод тестирования, до выхода релиза. Чтобы было проще и быстрее что-то проверить, особо не утруждаясь. После проверки, перед релизом, код переписывается на более менее "касивый"... Релиза ещё не было :)
Не вижу тут такой системы, как spiffs = https://ru.wikipedia.org/wiki/Список_файловых_систем Измените статью.
И не забывайте - здесь тема не про spiffs и ваши мытарства по поиску авторов и создания им ПО под их имя, а про EspLua :)
Тем более ссылка на ошибку дана в https://github.com/pellepl/spiffs (ver 0.3.2)
 
Последнее редактирование:

nikolz

Well-known member
pvvx,
Загрузил как у вас написано 4 файла с параметрами 512 к.
Эксперимент делал два раза.
Результат без изменений.
--------------------------------
Параметры у своего теста я писал ранее,
Вы тоже очевидно не дочитали.
-----------------------------
Повторяю еще раз:
TT - время записи всего (сек) ts время записи байта (мкс) s- записано всего Кбайт
--------------------------------
Результат не изменился :
name=x1.txt,E=30000000
TT=5.4,ts=16.4,s=160.038
TT=10.9,ts=17.4,s=320.117
TT=16.4,ts=17.5,s=480.091
TT=21.9,ts=17.5,s=640.173
TT=27.5,ts=17.4,s=800.125
TT=33,ts=17.5,s=960.137
TT=38.5,ts=17.5,s=1120.112
TT=44,ts=17.7,s=1280.067
TT=49.6,ts=17.5,s=1440.073
TT=55.1,ts=17.4,s=1600.062
TT=94.4,ts=16.4,s=1759.988
TT=153.5,ts=17.8,s=1919.903
TT=212.9,ts=17.5,s=2079.86
TT=282.1,ts=17.5,s=2239.836
-----------------------------
Знать, не выходит у Данилы чаша малахитовая.
 

pvvx

Активный участник сообщества
Это про что? Там нет автора spiffs. :) Вы не туда пишите и не представили решения.
Если лезете туда, то соблюдайте их правила. Предоставьте решение и код как надо писать, а то у них не работает - "Крокодил не ловится не растет кокос" (c) К/ф Бриллиантовая рука.
 
Последнее редактирование:

nikolz

Well-known member
Это про что? Там нет автора spiffs. :) Вы не туда пишите и не представили решения.
все туда, две ошибки они исправили.
исправят и остальное.
Так как Ваша чаша хоть и не китайская но очень похожа на нее.
Чуда нет,
Будем ждать выступления начальника транспортного отдела.
 

nikolz

Well-known member
возможно, что Вы пускаете мой тест для файла в половину флеш.
либо флеш более скоростная, но результат у меня такой же как на китайской сборке с блокировкой ошибки.
 

nikolz

Well-known member
ладно, пусть будет как есть.
Вот я сегодня робота обучил - это интересно,
а ковыряться в этом ... как-то не очень привлекает.
Успехов Вам в познании китайского чуда.
Ушел. Всем хорошего настроения.
 

pvvx

Активный участник сообщества
возможно, что Вы пускаете мой тест для файла в половину флеш.
либо флеш более скоростная, но результат у меня такой же как на китайской сборке с блокировкой ошибки.
Что за "блокировка ошибки"? Это как? Как может работать какая-то блокировка, если CPU нарывается на протектед при сортировке какой ему сектор стирать в spiffs?
 

nikolz

Well-known member
pvvx,
У меня флеш вроде бы всего 4 Мб
а программы все пишет и пишет:
TT=814.2,ts=17.3,s=5920.372
TT=817,ts=17.4,s=6080.367
TT=819.9,ts=17.4,s=6240.307
TT=822.8,ts=17.3,s=6400.281
TT=825.6,ts=17.3,s=6560.259
TT=828.5,ts=17.4,s=6720.21
TT=831.3,ts=17.4,s=6880.225
TT=834.2,ts=17.4,s=7040.262
TT=837.1,ts=21.5,s=7200.189
TT=839.9,ts=17.4,s=7360.17
TT=842.8,ts=17.4,s=7520.186
смотрю каталог:
Total : 3366161 bytes
Used : 2666624 bytes
Remain: 699537 bytes
записали всего 2.6 МB
Чудеса да и только.
 

nikolz

Well-known member
Что за "блокировка ошибки"? Это как? Как может работать какая-то блокировка, если CPU нарывается на протектед при сортировке какой ему сектор стирать в spiffs?
я же выкладывал прошивку китайскую с исправлением которая пишет файлы больше половины.
вот в ней и было исправлено. результаты ровно такие же как сейчас
за исключением последнего (запись файлов размером больше флеш)
Это только у Вас так сделано. Круче чем у китайцев. Те еще не додумались до такого.
 

pvvx

Активный участник сообщества
У меня флеш вроде бы всего 4 Мб
а программы все пишет и пишет:
....
смотрю каталог:
Total : 3366161 bytes
Used : 2666624 bytes
Remain: 699537 bytes
записали всего 2.6 МB
Чудеса да и только.
Прочтите что писал - нет ограничения у spiffs + Lua в записи.
Вы ошибку так и не диагностировали, а уже им всем пишите. Она возникает при уже занятых секторах, при поиске какой стирать.
В NodeMCU файловая система одноразовая - сделали формат, записали файл до половины размера и свободные сектора в spiffs кончились. Для следующей записи в NodeMCU, даже если удалили все файлы, надо делать формат. :) Иначе баг в процедуре сортировки поиска сектора с наименьшим кол-вом стираний для стирания - вылет CPU по протетктед... И это ещё не один баг.
А в spiffs было задумано по другому. По тому идите к автору spiffs, смотрите там уже есть ещё поправки и вникайте в систему... :)
А я просто скручу её так, как мне хочется - выкину и заменю на другую, как найду что более подходящее...
 
Последнее редактирование:

pvvx

Активный участник сообщества
@nikolz - вот запись файла предельной длины на малой flash:
Код:
> file.format()
format done.
> file.remove("script2.lua");file.open("script2.lua","w+");
> w = file.writelinew([[print("Test save max size file")]]);w([[a=0]]);w([[e = file.fsinfo()]]);
> w([[e = e/2-2048]]);w([[while(1) do]]);w([[ i=0;]]);w([[ if(e < 0) then break end]]);w([[ print("Save next max ~"..e.." bytes block")]]);w([[ T=tmr.now()]]);w([[ if (file.open("test.txt","a")) then]]);w([[  while ((i < e) and (file.write("0123456789012345678901234567890123456789012345678901234567890123")))   do]]);w([[   a=a+64]]);w([[   i=i+64]]);w([[  end]]);w([[  file.close()]]);w([[  x=i/((tmr.now()-T)/1000000)]]);
> w([[  print("Saved block "..i.." bytes, speed "..x.." bytes/sec...")]]);w([[ end]]);
> w([[ if(i < e) then break end]]);w([[ e = file.fsinfo()]]);w([[ e = e/2-2048]]);w([[ if(e>10240) then e = 10240 end]]);w([[end]]);w([[print("Saved "..a.." bytes. Disk full.")]]);file.close();dofile("script2.lua");
Test save max size file
Save next max ~14518 bytes block
Saved block 14528 bytes, speed 41641.467196739 bytes/sec...
Save next max ~7113.5 bytes block
Saved block 7168 bytes, speed 8098.7486936135 bytes/sec...
Save next max ~3474 bytes block
Saved block 3520 bytes, speed 4245.6545363974 bytes/sec...
Save next max ~1717 bytes block
Saved block 1728 bytes, speed 1493.7333219229 bytes/sec...
Save next max ~713 bytes block
Saved block 768 bytes, speed 878.64012136217 bytes/sec...
Save next max ~336.5 bytes block
Saved block 384 bytes, speed 657.11005053245 bytes/sec...
Save next max ~211 bytes block
Saved block 256 bytes, speed 876.64628007479 bytes/sec...
Save next max ~85.5 bytes block
Saved block 128 bytes, speed 434.42550620753 bytes/sec...
Saved 28480 bytes. Disk full.
>
----------------------------
script2.lua     : 592 bytes
test.txt        : 28480 bytes
----------------------------
Total file(s)   : 2
Total size      : 29072 bytes

Total : 34136 bytes
Used  : 30120 bytes
Remain: 4016 bytes

> file.fsstat()
   0 dddddddddddd/di    era_cnt: 84
   1 ddddddd/dd/dd/d    era_cnt: 81
   2 ddddddddd/d/ddd    era_cnt: 78
   3 ddddddddddd/did    era_cnt: 82
   4 ddddddddd/d/ddd    era_cnt: 79
   5 idddddddddddd/d    era_cnt: 83
   6 ddddddddddd/d/d    era_cnt: 80
   7 _______________    era_cnt: 86
   8 _______________    era_cnt: 87
   9 dddddddddddd/dd    era_cnt: 85
  10 ddddddddd/d/ddd    era_cnt: 77
phys_addr:   0x00071000
phys_size:   45056
era_cnt_max: 88
last_errno:  -10072
blocks:      11
free_blocks: 2
page_alloc:  120
page_delet:  15
used:        30120 of 34136
>
Как видим сплошной era_cnt: 87 секторов, после впихивания файла более половины диска.
(Это же надо было, чтобы на диске в 11 секторов при записи test.txt в 28480 bytes стереть 87 секторов! - автор spiffs поражает - супер ситема записала файл 8 раз стерев и переписав все сектора :) )
На 15.5Мег диске первые 7 мег пишутся со скоростью ~50 килобайт в сек, а последующие - втискиваются со стиранием со скоростью менее 1 килобайта в сек.
print("Test save max size file")
a=0
e = file.fsinfo()
e = e/2-2048
while(1) do
i=0;
if(e < 0) then break end
print("Save next max ~"..e.." bytes block")
T=tmr.now()
if (file.open("test.txt","a")) then
while ((i < e) and (file.write("0123456789012345678901234567890123456789012345678901234567890123"))) do
a=a+64
i=i+64
end
file.close()
x=i/((tmr.now()-T)/1000000)
print("Saved block "..i.." bytes, speed "..x.." bytes/sec...")
end
if(i < e) then break end
e = file.fsinfo()
e = e/2-2048
if(e>10240) then e = 10240 end
end
print("Saved "..a.." bytes. Disk full.")
Как итог - spiffs ужасная файловая система и не годится ни для какого применения. По этому она горячо любима народом. Закон такой - народ всегда и везде выбирает всё самое худшее.
 
Последнее редактирование:

nikolz

Well-known member
Прочтите что писал - нет ограничения у spiffs + Lua в записи.
Вы ошибку так и не диагностировали, а уже им всем пишите. Она возникает при уже занятых секторах, при поиске какой стирать.
В NodeMCU файловая система одноразовая - сделали формат, записали файл до половины размера и свободные сектора в spiffs кончились. Для следующей записи в NodeMCU, даже если удалили все файлы, надо делать формат. :) Иначе баг в процедуре сортировки поиска сектора с наименьшим кол-вом стираний для стирания - вылет CPU по протетктед... И это ещё не один баг.
А в spiffs было задумано по другому. По тому идите к автору spiffs, смотрите там уже есть ещё поправки и вникайте в систему... :)
А я просто скручу её так, как мне хочется - выкину и заменю на другую, как найду что более подходящее...
Я рад что Вы это поняли. я это понял давно поэтому и пытался Вам объяснить что Вы ничего не исправили и как писало до середины так и осталось а дальше и у Вас и у китайцев ищем свободное в этих записанных
У Вас и у вариант мой у китайцев система лезет выше и пишет с каждым разом все медленнее и медленнее.
---------------------
Я понимаю, что Вам советовать что писать против ветра.
Но все же не надо стараться выглядеть умнее чем есть.
Как я понял Вы по программированию институтов не кончали (самооучка) Вот и пытаетесь самоутверждаться обливая всех дерьмом
Но я не обижаюсь на обиженных жизнью.
 
Сверху Снизу