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

Разработка ‘библиотеки’ малого webсервера на esp8266.

AlexMelven

New member
pvvx, USE_CPU_SPEED на самом деле не меняет частоту проца? Вроде как она используется всего в одном месте - sys_read_sfg()
 

vad7

Active member
pvvx, Пытаюсь разобраться с сохранением настроек.
Правильно ли я понял, что для сохранения настроек используется флеш с адреса 0x79000 (495616), сектор размером 4096. Всего секторов - 3.
Функция get_addr_bscfg берет последний используемый сектор.
По какому принципу меняется номер сектора?
Только при переполнении сектора во время записи - пробуем удалить неиспользуемые объекты.
Старый сектор более не используется, так?
Зачем тогда менять номер сектора?
 

pvvx

Активный участник сообщества
pvvx, Пытаюсь разобраться с сохранением настроек.
Правильно ли я понял, что для сохранения настроек используется флеш с адреса 0x79000 (495616), сектор размером 4096. Всего секторов - 3.
Функция get_addr_bscfg берет последний используемый сектор.
По какому принципу меняется номер сектора?
Только при переполнении сектора во время записи - пробуем удалить неиспользуемые объекты.
Старый сектор более не используется, так?
Зачем тогда менять номер сектора?
Нет - это не Ардуино. Старый остается, на случай если во время перехода к записям в новый сектор выключили питание. При переходе к новому сектору происходит паковка старых данных - удаляются старые записи. 3 сектора дают увеличение кол-ва записей до дырки во flash и при переполнении для новых записей стирается самый старый сектор.
 
Последнее редактирование:

vad7

Active member
pvvx, Написал функцию, выдающую размер текущего конфига, у меня получилось = 1240 байт.
Если сочтете необходимым, добавьте в github.
Код:
// Возвращает размер текущей сохраненной конфигурации в байтах
int32 ICACHE_FLASH_ATTR current_cfg_length(void)
{
    fobj_head fobj;
    uint32 base_addr = get_addr_bscfg(false); // поиск текушего сегмента
    if(base_addr < 4) return -base_addr; // error
    uint32 faddr = base_addr + 4;
    do {
        if(flash_read(faddr, &fobj, fobj_head_size)) return -4; // последовательное чтение из сегмента
        if(fobj.x == fobj_x_free) {
            break;
        }
        faddr += align(fobj_head_size + (fobj.n.size > MAX_FOBJ_SIZE ? MAX_FOBJ_SIZE : fobj.n.size));
    } while(faddr <= (base_addr + FMEMORY_SCFG_BANK_SIZE - align(fobj_head_size+1)));
    return faddr - base_addr;
}
 

pvvx

Активный участник сообщества
pvvx, Написал функцию, выдающую размер текущего конфига, у меня получилось = 1240 байт.
Если сочтете необходимым, добавьте в github.
А цель этого?
В пакете обслуживания "мелких сохранений" не хватает уборщика - стирания неиспользуемых записей, например от другой прошивки или глюков. Но надо создавать список используемых в прошивке сохраняемых ID. Без этого будет вечно тащиться ненужный блок с неиспользуемым ID, но это я использую при смене прошивок...
 

vad7

Active member
Если эти сохранения только для внутренних переменных прошивки, то мне думается, что вообще все эти навороты с 3-мя секторами лишнии.
А список ид вроде же есть в flash_eep.h?
 

pvvx

Активный участник сообщества
Если эти сохранения только для внутренних переменных прошивки, то мне думается, что вообще все эти навороты с 3-мя секторами лишнии.
Дайте альтернативу.
Пример использования "сохранения" дан в USE_GPIOs_intr // включение примера с счетчиками срабатывания прерываний на GPOIs.
Альтернатива за вами :)
А список ид вроде же есть в flash_eep.h?
Но проверки и описанной процедуры то нет.
 
Последнее редактирование:

vad7

Active member
Альтернатива, я думаю, использовать всю область 3-х секторов (12KB) под запись настроек.
Удаление старых и упаковка тоже, наверно, нужна.
 

vad7

Active member
в webbin/Makefile опечатка, должно быть:
../WEBFS22.exe -h "*.htm, *.html, *.cgi, *.xml, *.bin, *.txt, *.wav" -z "mdbini.bin, *.inc, *.ini, snmp.bib" ../WEBFiles ../webbin WEBFiles.bin
 

vad7

Active member
У меня нет, как и eagle.app.v6.out. Пока не удалишь - в них старые данные.
А в makefile в путях должно "../" стоять, а стоит "./"
 

pvvx

Активный участник сообщества
Альтернатива, я думаю, использовать всю область 3-х секторов (12KB) под запись настроек.
Удаление старых и упаковка тоже, наверно, нужна.
Тогда надо 2x 13 килобайт. Иначе - потеря данных, если требуется такое их кол-во :)
 

vad7

Active member
pvvx, Если в Rapid_Loader в call_user_start после Cache_Read_Enable(0, 0, 0) вставить свой код для копирования флеша, работать будет?
Я так понимаю, что нужно изменить loader_flash_boot_addr и next_flash_header_addr.
Если так, как их посчитать?
 

pvvx

Активный участник сообщества
pvvx, Если в Rapid_Loader в call_user_start после Cache_Read_Enable(0, 0, 0) вставить свой код для копирования флеша, работать будет?
А что-бы ему не работать? Так вся прошивка работает с опцией 48 кило IRAM.
Я так понимаю, что нужно изменить loader_flash_boot_addr и next_flash_header_addr.
Если так, как их посчитать?
Если делаете по аналогии, т.е. прикручивание будет путем копирования к первому блоку стандартного загрузчика, то:
вручную - странслировать и посмотреть размер полученного начального бинарника. К размеру прибавить адрес старта flash и получите адрес loader_flash_boot_addr.
Если сами располагаете загрузчики в falsh - то и next_flash_header_addr адреса сами вписываете.
Есть малый нюанс - после Cache_Read_Enable(0, 0, 0), до старта инициализации CPU CLK в SDK частота QSPI всего 26x2 MHz или 26MHz. Но это всё равно в десятки раз больше, чем при дальнейшей загрузке стандартно, через SPI у ROM-BIOS.
----
Вышло обновление V0.5.7, в основном по Modbus RS-485...
 
Последнее редактирование:

vad7

Active member
В моем случае next_flash_header_addr тоже надо изменить, проверил, работает.
[HASHTAG]#define[/HASHTAG] loader_size 176 // file size: 0x00000.bin
[HASHTAG]#define[/HASHTAG] loader_flash_boot_addr (0x40200000 + loader_size)
[HASHTAG]#define[/HASHTAG] next_flash_header_addr (loader_flash_boot_addr + 64) // +file size: addld.bin

Только теперь вывод в отладку увеличился, загрузка идет два раза:
ets Jan 8 2013,rst cause:1, boot mode:(3,6)

load 0x40100000, len 124, room 16
tail 12
chksum 0xc7
ho 0 tail 12 room 4
load 0x3ffe8000, len 20, room 12
tail 8
chksum 0x94
csum 0x94

Rapid loader!!!


meSD dЊc{|Њd`
 
Сверху Снизу