• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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`
 
Сверху Снизу