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

EspLua вместо NodeMCU

потом попробуйте тест1
PS: а тем временем тот тест записи/перезаписи файла всё тикает...
Код:
if file.open("x.txt","w") then
local i=1
while 1  do
    print("heap="..node.heap())
file.writeline("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
    file.flush()
    tmr.wdclr()
    i=i+1
    print(i)
         end
end
 

pvvx

Активный участник сообщества
-Uart по умолчанию 230, 460, 921
-Буферы UART увеличить с 100/256 до 1024 или по более.
Данное не возможно. Не совместимо с текущей реализацией системы Lua и прерывания побайтного чтения из Flash/IRAM. Не позволяет скорость обработки строки и опроса новой. Приемный буфер у UART используется от ROM-BIOS. Он там 256 байт. Время ожидания и опроса новой строки = 80 ms и работает по таймеру. При скоростях более 9600 Baud данный буфер можно переполнить за эти 80 ms тысячу раз.
потом попробуйте тест1

Код:
if file.open("x.txt","w") then
local i=1
while 1  do
    print("heap="..node.heap())
file.writeline("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
    file.flush()
    tmr.wdclr()
    i=i+1
    print(i)
         end
end
Когда потом? Тот тест в текущей ситуации никогда не закончится - модуль включен к БП от бесперебойника, не давшего уже десяток лет ни оной секунды отключения питания (смена акк производится) :) Ну может когда flash протрется и начнет сбоить, то он и выскачит :) Это же тест от самого nikolz !
 
Время ожидания и опроса новой строки = 80 ms
То же непонятно, если строка по таймеру 80mc.
я получаю исполнение кода gpio.write за 200мкс.
Код:
Red=1
gpio.mode(Red, gpio.OUTPUT)
while 1 do
gpio.write(Red, gpio.LOW)
gpio.write(Red, gpio.HIGH)
gpio.write(Red, gpio.LOW)
gpio.write(Red, gpio.HIGH)
gpio.write(Red, gpio.LOW)
gpio.write(Red, gpio.HIGH)
end
или я опять не догоняю?
подправил код, не тот сунул...
 

pvvx

Активный участник сообщества
То же непонятно, если строка по таймеру 80mc.
я получаю исполнение кода gpio.write за 200мкс.
....
или я опять не догоняю?
Описывал же:
READLINE_INTERVAL
1) При инициализации, устанавливается на время до первой обработки строки в dojob() : https://github.com/pvvx/EspLua/blob/master/app/lua/lua.c#L467
2) И далее в цикле приема и обработки строк по UART: https://github.com/pvvx/EspLua/blob/master/app/lua/lua.c#L670
А так-же что попало в UART анализируется так-же, через READLINE_INTERVAL
https://github.com/pvvx/EspLua/blob/master/app/lua/lua.c#L664
https://github.com/pvvx/EspLua/blob/master/app/lua/lua.c#L716
Но так, как SDK замедлена в беспредел системой чтения переменных по прерываниям "протектед" для красивой цифры heap, то и 80 ms иногда не хватает.
Надо ставить 300 Baud, если работаете с 16 Mbytes flash со spiffs и тем, что наворотили NodeMCU-шуники. Иначе возникают пропуски - передаете символы программы на 9600, а Lua не успевает их обрабатывать. От этого никакое увеличение приемного буфера не спасает.
PS: а тест от Nikolz всё идет... :) Нафиг - прерываю...
 
Последнее редактирование:
выкладываю прошивку сделайте тест на большом объеме
пришлось долго чистить 25q128.
Запустил test1, без закрытия файла.
где то на 23710 запись резко замедлилась до 1 сек.:eek:
что то не так , остановил.
прошивка более не запускается затерта инициализация.:(
 

pvvx

Активный участник сообщества
это с закрытием файла.
сколько набежало?
Код:
NodeMCU firmware detected.
=node.heap()
30160
> file.remove("script1.lua");
> file.open("script1.lua","w+");
> w = file.writeline
> w([[local i=1]]);
> w([[while 1 do]]);
> w([[file.open("x.txt","a") ]]);
> w([[file.writeline("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]]);
> w([[file.close() ]]);
> w([[tmr.wdclr()]]);
> w([[i=i+1]]);
> w([[print(i)]]);
> w([[end]]);
> file.close();
> dofile("script1.lua");
> node.compile('script1.lua')

----------------------------
http-example.lc : 540 bytes
http-example.lua : 1419 bytes
http.lc         : 2680 bytes
http.lua        : 6624 bytes
init.lc         : 232 bytes
init.lua        : 91 bytes
script1.lc      : 352 bytes
script1.lua     : 209 bytes
----------------------------
Total file(s)   : 8
Total size      : 12147 bytes

> r,u,t=file.fsinfo() print("Total : "..t.." bytes\r\nUsed  : "..u.." bytes\r\nRemain: "..r.." bytes\r\n") r=nil u=nil t=nil
Total : 14932241 bytes
Used  : 15060 bytes
Remain: 14917181 bytes

> dofile("script1.lc")
2
3
4
5
6
.... Вырезал, т.к. очень длинное
6893
6894
6895
8џю‚ѓѓ›cXћ†}ЋОэ <- Нажал RTS в ESPLorer

EspLua.ru 1.2.0 build 20150710  powered by Lua 5.1.4
>
----------------------------
http-example.lc : 540 bytes
http-example.lua : 1419 bytes
http.lc         : 2680 bytes
http.lua        : 6624 bytes
init.lc         : 232 bytes
init.lua        : 91 bytes
script1.lc      : 352 bytes
script1.lua     : 209 bytes
x.txt           : 696294 bytes
----------------------------
Total file(s)   : 9
Total size      : 708441 bytes

Total : 14932241 bytes
Used  : 717358 bytes
Remain: 14214883 bytes

> =file.fsstat()
   0 idid/dd/d/d/d/d    era_cnt: N/A
   1 i/ddd/i////////    era_cnt: N/A
   2 ///////////////    era_cnt: N/A
   3 ///////////////    era_cnt: N/A
   4 ///////////////    era_cnt: N/A
   5 ///////////////    era_cnt: N/A
   6 ///////////////    era_cnt: N/A
   7 /////dd/d/d/d/d    era_cnt: N/A
   8 /d/d/d/d/d/d/d/    era_cnt: N/A
   9 d/d/d//d/d/d/d/    era_cnt: N/A
  10 d/d/d/d/d/d/di/    era_cnt: N/A
  11 ddd/d/d/d/d/d/d    era_cnt: N/A
  12 /d/d/iid/ddi/d/    era_cnt: N/A
  13 d//d///d//d///d    era_cnt: N/A
  14 //d///d//d///d/    era_cnt: N/A
  15 /d///d//d///d//    era_cnt: N/A
  16 d///d//d///d//d    era_cnt: N/A
  17 ///d//d///d//d/    era_cnt: N/A
  18 //d//d///d//d//    era_cnt: N/A
  19 /d//d///d//d///    era_cnt: N/A
  20 d//d///d//d//d/    era_cnt: N/A
  21 //d//d///d//d//    era_cnt: N/A
  22 /d//d///d//d///    era_cnt: N/A
  23 d//d///d//d///d    era_cnt: N/A
  24 //d///d//d///d/    era_cnt: N/A
  25 /d///d//d///d//    era_cnt: N/A
  26 d///d//d///d//d    era_cnt: N/A
  27 ///d//d///d//d/    era_cnt: N/A
  28 //d//d//d///d//    era_cnt: N/A
  29 d///d//d///d//d    era_cnt: N/A
.... Вырезал, т.к. очень длинное
652 d///d//d///d//d    era_cnt: N/A
653 ///d//d///d//d/    era_cnt: N/A
654 //d//d///d//d//    era_cnt: N/A
655 /d//d///d//d///    era_cnt: N/A
656 d//d///d//d///d    era_cnt: N/A
657 //d//d///d//d//    era_cnt: N/A
658 /d//d///d//d///    era_cnt: N/A
659 d//d///d//d///d    era_cnt: N/A
660 //di___________    era_cnt: N/A
661 _______________    era_cnt: N/A
662 _______________    era_cnt: N/A
663 _______________    era_cnt: N/A
664 _______________    era_cnt: N/A
665 _______________    era_cnt: N/A
666 _______________    era_cnt: N/A
667 _______________    era_cnt: N/A
.... Вырезал, т.к. очень длинное
3964 _______________    era_cnt: N/A
3965 _______________    era_cnt: N/A
3966 _______________    era_cnt: N/A
3967 _______________    era_cnt: N/A
phys_addr:   0x00080000
phys_size:   16252928
era_cnt_max: 1
last_errno:  -10072
blocks:      3968
free_blocks: 3307
page_alloc:  2858
page_delet:  7046
used:        717358 of 14932241
>
Ваш тест ещё не пробовал.
Запустил этот http://esp8266.ru/forum/threads/esplua-vmesto-nodemcu.449/page-7#post-8714
жду завершения... Сколько ждать? Счас он пишет
~1200
heap=28336
 
Последнее редактирование:

pvvx

Активный участник сообщества
Код:
33782
heap=28336
2Т_ЗRSvоcXљ†щЋОэ

EspLua.ru 1.2.0 build 20150710  powered by Lua 5.1.4
>
----------------------------
http-example.lc : 540 bytes
http-example.lua : 1419 bytes
http.lc         : 2680 bytes
http.lua        : 6624 bytes
init.lc         : 232 bytes
init.lua        : 91 bytes
script1.lc      : 352 bytes
script1.lua     : 209 bytes
script2.lua     : 277 bytes
x.txt           : 3411881 bytes
----------------------------
Total file(s)   : 10
Total size      : 3424305 bytes

Total : 14932241 bytes
Used  : 3455266 bytes
Remain: 11476975 bytes
>
Полный лог не влез в буфер ESPLorer (256 к)
В итоге имеем:
Код:
=file.fsstat()
   0 idid/dd/d/d/d/d    era_cnt: N/A
   1 i/ddd/i////////    era_cnt: N/A
   2 ///////////////    era_cnt: N/A
   3 ///////////////    era_cnt: N/A
   4 ///////////////    era_cnt: N/A
   5 ///////////////    era_cnt: N/A
   6 ///////////////    era_cnt: N/A
   7 /////dd/d/d/d/d    era_cnt: N/A
   8 /d/d/d/d/d/d/d/    era_cnt: N/A
   9 d/d/d//d/d/d/d/    era_cnt: N/A
  10 d/d/d/d/d/d/di/    era_cnt: N/A
  11 ddd/d/d/d/d/d/d    era_cnt: N/A
  12 /d/d/iid/ddi///    era_cnt: N/A
  13 ///////////////    era_cnt: N/A
---- повторы ///////////////    era_cnt: N/A 
789 ///////////////    era_cnt: N/A
790 ///////////////    era_cnt: N/A
791 ////////d/d//d/    era_cnt: N/A
792 //d//d///d//d//    era_cnt: N/A
793 /d//d///d//d///    era_cnt: N/A
794 d//d///d//d///d    era_cnt: N/A
795 //d///d//d///d/    era_cnt: N/A
---- повторы примерно этого //d///d//d///d/    era_cnt: N/A
3961 //d///d//d///d/    era_cnt: N/A
3962 /d///d//d///d//    era_cnt: N/A
3963 d///d//d///d//d    era_cnt: N/A
3964 i______________    era_cnt: N/A
3965 _______________    era_cnt: N/A
3966 _______________    era_cnt: N/A
3967 _______________    era_cnt: N/A
phys_addr:   0x00080000
phys_size:   16252928
era_cnt_max: 1
last_errno:  -10072
blocks:      3968
free_blocks: 3
page_alloc:  13766
page_delet:  45695
used:        3455266 of 14932241
>
Записалась вся Flash, запись сорвалась на последнем блоке файловой системы и что там вошло в описание файла - неизвестно, т.к. скрипт Lua не остановился (не проверяет ошибок и ограничений).

Напомню: В web, запись диска через HTTP:
"Файл диска с десятком PDF на 14 642 368 байта записывается из MS Explorer в W25Q128 за 88.22 сек, считая первый пакет открытия соединения по TCP/IP до закрытия соединения." 160..180 килобайт в сек, со стиранием :) Упирается в скорость Flash (W25Q128FV)
 
Последнее редактирование:
Допустимый размер файла понятен.
Какой размер у диска?
вот тест5
Код:
--Test5
local i=1
local n=1
fname="x1.txt"
--
function wr_file()
local n=1
--print("heap="..node.heap())
file.open(fname,"w")
while n<=10000  do
file.writeline("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
tmr.wdclr()
n=n+1
print(n)
end
--file.flush()
file.close()
                  end
--
while i<=5 do
fname="x"..i..".txt"
print(fname)
wr_file()
i=i+1
end
Получилось что и размер диска равен максимальному размеру файла
Код:
5048
5049
5050
5051
ь!¤§
жЗ!ќя
жЗ�њLКми

NodeMCU 0.9.6 build 20150627  powered by Lua 5.1.4
lua: cannot open init.lua
>
----------------------------
Test5.lua       : 437 bytes
x1.txt          : 1000000 bytes
x2.txt          : 504800 bytes
----------------------------
Total file(s)   : 3
Total size      : 1505237 bytes

> r,u,t=file.fsinfo() print("Total : "..t.." bytes\r\nUsed  : "..u.." bytes\r\nRemain: "..r.." bytes\r\n") r=nil u=nil t=nil
Total : 3426401 bytes
Used  : 1518550 bytes
Remain: 1907851 bytes
В ревизии 20150627 не затерла инициализацию...:),
но где же сообщение "Full Disk"?:(
 
Еще 2 теста прошивок уважаемых Nikols и Pvvx

Код:
Прошивка от  Nikols

5954
5955
5956
здесь зависла
---reset---

NodeMCU 9.9.9 build 20150713  powered by Lua 5.1.4
lua: cannot open init.lua
>
Total : 3201705 bytes
Used  : 1603134 bytes
Remain: 1598571 bytes

>
----------------------------
Test5.lua       : 437 bytes
x1.txt          : 1000000 bytes
x2.txt          : 595000 bytes
----------------------------
Total file(s)   : 3
Total size      : 1595437 bytes

Total : 3201705 bytes
Used  : 1603134 bytes
Remain: 1598571 bytes

>

Прошивка от  Pvvx

4785
4786
4787
Љ¦Цт¤ћ€    д

EspLua.ru 1.2.0 build 20150710  powered by Lua 5.1.4
lua: cannot open init.lua
>
----------------------------
Test5.lua       : 437 bytes
x1.txt          : 1000000 bytes
x2.txt          : 478400 bytes
----------------------------
Total file(s)   : 3
Total size      : 1478837 bytes

> r,u,t=file.fsinfo() print("Total : "..t.." bytes\r\nUsed  : "..u.." bytes\r\nRemain: "..r.." bytes\r\n") r=nil u=nil t=nil
Total : 3366161 bytes
Used  : 1491693 bytes
Remain: 1874468 bytes

>
Наверное старые ревизии скачал, поправьте если так.
Резюме.
Ни одна не затерла инициализацию - это хорошо.
но где же сообщение "Full Disk"?:p
Как использовать остальную Flash, 1,8 мБайт для 25q32 или 13,5 мБайт для 25q128 ? :(
 
Поставил память 25q32 из другой партии (упаковки) на Nodemcu Board 1.0.

Залил прошивку NodeMCU 9.9.9 build 20150713 powered by Lua 5.1.4 от Nikols
в Nodemcu Board 1.0 (наш оживший "Татагочи")
Работает.
Код:
NodeMCU 9.9.9 build 20150713  powered by Lua 5.1.4
lua: cannot open init.lua
>
Прошивка от Pvvx упорно не хочет запускаться на
Код:
Can't autodetect firmware, because proper answer not received.
load 0x40100000, len 156, room 16
tail 12
chksum 0xef
csum 0xef
csum err
ets_main.c
Эта загадка не решаемая ;)
 
Пишется bin в память, это совсем другое.

Там же FS такая же, а перетащить?:p
 

pvvx

Активный участник сообщества
Прошивка от Pvvx упорно не хочет запускаться на
Код:
Can't autodetect firmware, because proper answer not received.
load 0x40100000, len 156, room 16
tail 12
chksum 0xef
csum 0xef
csum err
ets_main.c
Эта загадка не решаемая ;)
Если плата не хочет запускать простой короткий лоадер, ни байта, то с чем это связано?
gpio.write(Red, gpio.LOW)
gpio.write(Red, gpio.HIGH)
Во всех прошивках ~400 us от фронта до следующего. А в UART прием от 80 ms мин. строка.
Spiffs не работает ни где. Так он написан и совмещен с Lua :) Проверка на ошибку записи в файл не проходит. После записи файла до выхода по ошибке ничего нового на диск не записать, хотя место остается :)
 
Последнее редактирование:
Если плата не хочет запускать простой короткий лоадер, ни байта, то с чем это связано?
Заинтересовало потому что это не неисправность платы.
Все остальные прошивки работают!
Кто то на форуме писал о защите кода в ESP, вот оно!:p
по этому и интересно...
 

pvvx

Активный участник сообщества
Заинтересовало потому что это не неисправность платы.
Все остальные прошивки работают!
Кто то на форуме писал о защите кода в ESP, вот оно!:p
по этому и интересно...
Да это китайцы. Понавешали транзисторов на GPIO0 и RESET, а при старте в GPIO0 выводится 26 MHz и что там твориться - только вам и известно, но найти и исправить пока не можете :)
Во вторых вы грузите не мой код. У моего контролька другая - chksum 0x71
 
Сверху Снизу