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

'Реверс' SDK Espressif и ROM-BIOS для создания открытого SDK.

pvvx

Активный участник сообщества
Перенос векторов прерываний в Iram потребовался для прикручивания NMI_Handler к софтовому PWM на таймере :)
Появилась void system_phy_set_max_tpw(uint8 max_tpw) напрямую переадресующая вызов к phy_set_most_tpw(uint8 max_tpw) c увеличением глубины стека. Такой переадреcсации в SDK ОЧЕНЬ много. Функции просто дублируют для увеличения размера кода, тормозов и глубины стека CPU в SDK:
Код:
system_phy_set_max_tpw:
                addi            a1, a1, -16
                s32i            a0, a1, 0
                call0           phy_set_most_tpw
                l32i            a0, a1, 0
                addi            a1, a1, 16
                ret
; End of function system_phy_set_max_tpw
system_phy_set_tpw_via_vdd33:
                addi            a1, a1, -16
                s32i            a0, a1, 0
                call0           phy_vdd33_set_tpw
                l32i            a0, a1, 0
                addi            a1, a1, 16
                ret
; End of function system_phy_set_tpw_via_vdd33
phy_vdd33_set_tpw:                      ; CODE XREF: system_phy_set_tpw_via_vdd33+6j
                addi            a1, a1, 0xF0
                s32i.n          a0, a1, 0
                call0           get_vdd33_offset
                l32r            a0, 0x3FFEAE5A
                s8i             a2, a0, 0x80 ; 0x3FFEAE5A+0x80
                l32i.n          a0, a1, 0
                addi            a1, a1, 0x10
                ret.n
; End of function phy_vdd33_set_tpw
Наверно за каждую глупую строчку на CИ прораммеру Espressif платят :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Кто расскажет, зачем отняли SPI1 в SDK 1.1.0?
Код:
/******************************************************************************
* FileName: app_main.c
* Description: Alternate SDK (libmain.a)
* Author: PV`
* (c) PV` 2015
* ver 0.0.1
*******************************************************************************/
#include "user_config.h"
#include "bios.h"
#include "hw/esp8266.h"
#include "hw/spi_register.h"
//#include "flash.h"
//=============================================================================
// overlap_hspi_init()
//-----------------------------------------------------------------------------
void overlap_hspi_init(void)
{
    while((SPI0_EXT2) || (SPI1_CMD & 0xFFFC0000)); // 0x600001F8 || 0x60000100
    PERI_IO_SWAP |= 0x80; // two spi masters on cspi
    SPI0_EXT3 |= 1;
    SPI1_EXT3 |= SPI_INT_HOLD_ENA;
    SPI1_USER |= SPI_CS_SETUP;
    SPI1_PIN = (SPI1_PIN & 0x7E) | (SPI_CS2_DIS | SPI_CS1_DIS); // SPI_CS0_ENA
    SPI1_CLOCK &= ~SPI_CLK_EQU_SYSCLK;
}
//=============================================================================
// overlap_hspi_deinit()
//-----------------------------------------------------------------------------
void overlap_hspi_deinit(void)
{
    while((SPI0_EXT2) || (SPI1_CMD & 0xFFFC0000)); // 0x600001F8 || 0x60000100
    PERI_IO_SWAP &= 0xF7F; // two spi masters on cspi
    SPI0_EXT3 &= 0x7E;
    SPI1_EXT3 &= 0x7C;
    SPI1_USER &= 0xFDF;
    SPI1_PIN = (SPI1_PIN & 0x7E) | (SPI_CS2_DIS | SPI_CS1_DIS);
    SPI1_CLOCK &= ~SPI_CLK_EQU_SYSCLK;
}
//=============================================================================
// overlap_hspi_read_data()
// Измененная с параметром void *des для работы и с нечетными адресами
//-----------------------------------------------------------------------------
#define SPI_FBLK 32
int overlap_hspi_read_data(SpiFlashChip *fchip, uint32 faddr, void *des, uint32 size)
{
    SPI1_PIN = (SPI1_PIN & 0x7E) |  (SPI_CS2_DIS | SPI_CS1_DIS);
    if(fchip->chip_size < faddr + size) return SPI_FLASH_RESULT_OK;
    if(des == NULL) return SPI_FLASH_RESULT_ERR;
    if(size < 1) return SPI_FLASH_RESULT_ERR;
    uint32 blksize = (uint32)des & 3;
    if(blksize) {
        blksize = 4 - blksize;
        if(size < blksize) blksize = size;
        SPI1_ADDR = faddr | (blksize << 24);
        SPI1_CMD = SPI_READ;
        size -= blksize;
        faddr += blksize;
        while(SPI1_CMD);
        register uint32 data_buf = SPI1_W0;
        do {
            *(uint8 *)des = data_buf;
            des = (uint8 *)des + 1;
            data_buf >>= 8;
        } while(--blksize);
    }
    while(size) {
        if(size < SPI_FBLK) blksize = size;
        else blksize = SPI_FBLK;
        SPI1_ADDR = faddr | (blksize << 24);
        SPI1_CMD = SPI_READ;
        size -= blksize;
        faddr += blksize;
        while(SPI1_CMD);
        uint32 *srcdw = (uint32 *)(&SPI1_W0);
        while(blksize >> 2) {
            *((uint32 *)des) = *srcdw++;
            des = ((uint32 *)des) + 1;
            blksize -= 4;
        }
        if(blksize) {
            uint32 data_buf = *srcdw;
            do {
                *(uint8 *)des = data_buf;
                des = (uint8 *)des + 1;
                data_buf >>= 8;
            } while(--blksize);
            break;
        }
    }
    return SPI_FLASH_RESULT_OK;
}
И команду spi_flash_read(a,b,c) заместили на overlap_hspi_read_data(flashchip,a,b,c)...
А пока в SDK 1.1.0 всё глючит неимоверно :mad:
Кароче SDK 1.0.2 ( так назовем этот последний вариант, вышедший как исправление для SDK 1.0.1 ) это есть последний, который официально работает на модулях ESP-01...12 с одной flash распаянной на свой единственный CS без спец. ухищрений :p
 
Последнее редактирование:

pvvx

Активный участник сообщества
Толи я совсем совсем ничего не понимаю, то-ли китайцы совсем решили плодить дубли каждой процедуре, про контрольку OR-ом уже .... :
Код:
/* China_bags_Espressif_SDK.c
*  SDK 1.1.0
*/
#include "user_config.h"
#include "bios.h"
#include "user_interface.h"
#include "hw/esp8266.h"

void ICACHE_FLASH_ATTR system_phy_set_rfoption(uint8 option)
{
    phy_afterwake_set_rfoption(option);
}

void ICACHE_FLASH_ATTR phy_afterwake_set_rfoption(uint8 option)
{
    uint32 x = (RTC_RAM_BASE[0x60>>2] & 0xFFFF) | (option << 16);
    RTC_RAM_BASE[0x60>>2] = x; // 0x60001060
    RTC_RAM_BASE[0x78>>2] |= x; // 0x60001078 - это ячейка памяти RTC c китай-контролькой области от 0x60001000 до 0x60001078, получаемая путем OR всех слов этой области :)
    // но сколько не OR-ь всё равно китай-програмер получит шиш в виде несовпадения, т.к. тогда уж надо OR-ить заново всё, но это китай-программеру из Espressif не объяснить :)
}

bool ICACHE_FLASH_ATTR system_deep_sleep_set_option(uint8 option)
{
    uint32 x = (RTC_RAM_BASE[0x60>>2] & 0xFFFF) | (option << 16);
    RTC_RAM_BASE[0x60>>2] = x; // 0x60001060
    rtc_mem_check(false); // пересчитать OR
    // return всегда false
}

bool ICACHE_FLASH_ATTR rtc_mem_check(bool flg)
{
    volatile uint32 * ptr = &RTC_RAM_BASE[0];
    uint32 region_or_crc = 0;
    while(ptr != &RTC_RAM_BASE[0x78>>2]) region_or_crc |= *ptr++; // китай-контролька OR-ом! :)
    if(flg == false) {
        *ptr = region_or_crc; // RTC_RAM_BASE[0x78>>2] = region_or_crc
        return false;
    }
    return (*ptr != region_or_crc);
}
/*
После отключения/включения питания и старта SDK:
60001000: 02ff0000 1e39153d 203d203c 00000000  ..я.=.9.< = ....
60001010: 00000000 07c2060d 074207c2 07430782  ......В.В.B.‚.C.
60001020: 0b03090b 070b0307 02060703 fe891009  ..............‰ю
60001030: 4e52800e 3840444a 0c0601fd 07031810  .ЂRNJD@8э.......
60001040: 1d15110b 140e0906 0d091f17 231b1711  ...............#
60001050: 00000000 0d330000 0ff4fe89 00000000  ......3.‰юф.....
60001060: 6f690000 42fa1a59 c9c400b4 229821e5  ..ioY.ъBґ.ДЙе!˜"
60001070: f6b668f7 56f5cbde d0b4a8b8 016417fe  чh¶цЮЛхVёЁґРю.d.
Замечательная китай-конфигурация phy_rfoption 60001060 == 0x6f69 для WiFi :)

После deep_sleep:
60001000: 02ff0000 1e38153d 213d203c 00000000  ..я.=.8.< =!....
60001010: 00000000 0001050e 078107c1 078207c1  ........Б.Ѓ.Б.‚.
60001020: 0f03070d 070b0307 02070703 fe8c1009  ..............Њю
60001030: 4e52800e 3840444a 0d0603fd 07041911  .ЂRNJD@8э.......
60001040: 1d16120b 140e0a05 0e0a2018 231c1812  ......... .....#
60001050: 00000000 0d330000 0ff4fe89 00000000  ......3.‰юф.....
60001060: 00000001 42fa1a59 c9c400b4 229821e5  ....Y.ъBґ.ДЙе!˜"
60001070: f6b668f7 56f5cbde ffffffff 016417fe  чh¶цЮЛхVяяяяю.d.

60001078 == 0xffffffff - замечательная китай контролька :)
*/[code]
 
Последнее редактирование:

pvvx

Активный участник сообщества
Для страждущих:
Установка PLL CPU на 80MHz в модуле с 26MHz кварцем (для собственных загрузчиков своих SDK):
Код:
// Данный тест грузится и запускается в IRAM esptool -p COM6 -b 256000 load_ram 000000.bin
void call_user_start(void)
{
// ROM-BIOS стартует с кварцем 26MHz и думает, что у неё 40MHz. Частота CPU выходит 52MHz.
    ets_update_cpu_frequency(52); // указание правильной частоты для подсчета времени в ets_delay_us(), т.к. она считает такты CPU и множит на указанное число в MHz...
    UART0_CLKDIV = 52000000/115200;
    ets_printf("\nStart RAM porg\n");
    ets_printf("CLK CPU %u MHz\n", ets_get_cpu_frequency());
    ets_printf("---0---> %u %u \n", rom_i2c_readReg(103,4,1), rom_i2c_readReg(103,4,2));
    ets_delay_us(175); // задержка, чтобы успели выйти символы из UART и не возникло их прерываний с растягиванием при активных битах, порождающих "кракозябы"
// Переключение pll на 80MHz от кварца на 26MHz
    rom_i2c_writeReg(103,4,1,136);
    rom_i2c_writeReg(103,4,2,145);
// Тут уже 80 MHz
    ets_update_cpu_frequency(80);
    UART0_CLKDIV = 80000000/115200;
    ets_printf("---1---> %u %u \n", rom_i2c_readReg(103,4,1), rom_i2c_readReg(103,4,2));
    ets_printf("CLK CPU %u MHz\n", ets_get_cpu_frequency());
    ets_run();
}
Итоговый лог на 115200 Baud:
Код:
Start RAM porg
CLK CPU 52 MHz
---0---> 8 129
---1---> 136 145
CLK CPU 80 MHz
Кому не нравиться обращения к ROM-BIOS, то могут сами переписать rom_i2c_writeReg() :)
Код:
void rom_i2c_writeReg(uint32 a2, uint32 a3, uint32 a4, uint32 a5)
{
    volatile uint32 * ptr_reg = ((volatile uint32 *)0x60000D00 + (a3<<2));
    *ptr_reg = (a5 << 16) | (a4 << 8) | a2 | 0x1000000;
    while((*ptr_reg >> 25) & 1);
}
void rom_i2c_writeReg_Mask(int block, int host_id, int reg_add, int Msb, int Lsb, int indata);
{
.....
}
Для настройки скорости SAR ADC есть аналогичная pll:
Код:
#define i2c_bbpll                            0x67 // 103
#define i2c_bbpll_en_audio_clock_out        4
#define i2c_bbpll_en_audio_clock_out_msb    7
#define i2c_bbpll_en_audio_clock_out_lsb    7
#define i2c_bbpll_hostid                    4
По умолчанию ADC пашет на 20кГц...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Для своих загрузчиков разных SDK из большой flash осталось разобраться с "кэшированием" flash - ограничением его в 1 мегабайт. Т.е. пока не можем запустить на исполнение код из flash, который выше 1 мегабайта.
Китайцы походу разбили flash на куски - на несколько чипов. Это скорее всего и связно с ограничением "кэширования" flash в 1 мегабайт...
У кого есть какие предложения-предположения, что и где смотреть/искать в ESP8266 связанное с этим для преодоления данной проблемы (для запуска кода в любой области 16 мегабайтной flash) ?
Дурной идиотский пример от Espressif использовать несколько разных чипов не предлагать :)
 

anakod

Moderator
Команда форума
Спасибо за без лишней скромности лучшую работу по реверсу esp. По кешу у меня есть встречный вопрос - а нельзя ли задавать область кеширования динамически, те в той части где находится интересующий нас код, и при этом сохранять общий объем в тех же исходных рамках.
 

pvvx

Активный участник сообщества
Спасибо за без лишней скромности лучшую работу по реверсу esp. По кешу у меня есть встречный вопрос - а нельзя ли задавать область кеширования динамически, те в той части где находится интересующий нас код, и при этом сохранять общий объем в тех же исходных рамках.
Не вижу такой возможности пока, т.к. вся информация по "кэшированию" пока не доступна. Предварительно это дело завязано как-то аппаратно с SPI и причем с обоими.
Из общего соображения должен где-то иметься регистр задания базы адреса кеша, а адрес в SPI уже дает смещение. В итоге всё равно получаем доступными только первый мег. Тут надо искать где заложен размер кеширования.
Если алго другой, тогда вообще ничего не ясно :)
 

pvvx

Активный участник сообщества
@anakod для сведения к sming:
В SDK 1.0.2 и 1.1.0 процедура чтения flash переехала c SPI0 на SPI1 и там пошуровали массу регистров, при этом spi_flash_read теперь (на SPI1) не имеет отключения/включения Cache_Read_Disable()/Cache_Read_Enable(). Так-же перенесли вектора прерываний в IRAM (см. их новые ld файлы) и встроили в них полу-программный ШИМ, а в AT что-то ещё, типа таймеров.
AT запустить со своим загрузчиком, использующим только SPI0 для flash и базовые вектора в ROM-BIOS пока не удалось - висят процедуры espconn (наверно в новом NMI_vector какой счетчик для них)...
А в общем я с их SDK заканчиваю. Никакой поддержки их SDK далее не гарантирую, т.к. оно содержит тучу ошибок. Метода идет к тому, что из их либ будут вырезаны только основные процедуры работы с wifi , а всё остальное писать самим... Т.е. никаких esp_init_data_default.bin и прочей фигни от них, типа их конфигов в конце flash, deep_sleep и прочего... Этим г... Espressif пусть развлекает янки :)
 
Последнее редактирование:

anakod

Moderator
Команда форума
А в общем я с их SDK заканчиваю. Никакой поддержки их SDK далее не гарантирую, т.к. оно содержит тучу ошибок. Метода идет к тому, что из их либ будут вырезаны только основные процедуры работы с wifi , а всё остальное писать самим... Т.е. никаких esp_init_data_default.bin и прочей фигни
На мой взгляд это единственное разумное решение в тушей ситуации. Будь они открыты к диалогу, действительно можно было бы прорабатывать код сдк и его ошибки. Но в текущей ситуации единственное разумное решение - реверсить ром и идти к созданию стабильного решения а не заплаток к их коду. Уж извините но по факту Espressif более чем огорчает. Вообще не понимаю как с таким прекрасными железом (да я понимаю что оно тоже ограничено и не является панацеей от всех бед, но в своей задумке и ценовой категории это действительно прекрасный продукт) они умудряются так бездарно подходить к софтверной части. Скорее всего тут работают разные команды. А может быть просто инвестиции закончились.
 

pvvx

Активный участник сообщества
Вообще не понимаю как с таким прекрасными железом (да я понимаю что оно тоже ограничено и не является панацеей от всех бед, но в своей задумке и ценовой категории это действительно прекрасный продукт) они умудряются так бездарно подходить к софтверной части. Скорее всего тут работают разные команды. А может быть просто инвестиции закончились.
Не то и не другое. Они же не дают описание чипа, а скрывают данные по нему. На описание хоть кое-как много "инвестиций" не требуется.
Не нашел возможности изменения размера "кэширования" у flash в регистрах периферии :( Flash всегда отображается в области c 0x40200000 по 0x40300000, что не меняй в разных регистрах.
Надо пробовать лезть в TLB CPU, а там, в wdtlb/witlb пока не разбирался. У нас тут, на форуме, есть jcmvbkbc - он должен знать с чем их едеят, но как всегда молчит - (это называется "автор поддержки call0 ABI в xtensa gcc" - по этому и молчит :) )
wdtlb/witlb загружаются сразу по старту, в первых исполняемых кодах CPU из ROM...
---------
WDT в SDK 1.1.0 теперь просто повешен на таймер и ему дано правильное название - SoftWdtTimer :)

Логика работы WDTв SDK 1.1.0:

По таймеру “SoftWdtTimer “ в pp_soft_wdt_feed () проверяется флаг ответа на запрос pp_post(12), если он ещё активен – то:

Cache_Read_Disable();
Cache_Read_Enable_New();
system_restart_local(); // перезагрузка


Если не активен, то выставляется флаг и вызывается pp_post(12) с ets_timer_arm_new(SoftWdtTimer, 1600, 0, 1). “1600” грузится из переменной в памяти для возможности изменения периода опроса.

По событию “12” в task флаг сбрасывается (+ сбрасывается WDT).
---------
Это extern void ets_wdt_enable(void); , к примеру в sming, неверно и несовместимо ни с одним из SDK ( от 0.9.5 по 1.1.0 точно).
Во первых ets_wdt_enable(int wdt_mode, int a, in b) и wdt_mode 5 шт у ROM-BIOS - 0,1,2,3,4. int wdt_mode, int a, in b сохраняются в struct swdt_info.
У ROM-BIOS другая логика работы с WDT и имеет разные варианты алгоритмов ...
Есть три переменных сохраняемых в памяти в структуре wdt_info (RAM_BIOS:3FFFC708).
Она примерно такая:
struct swdt_info {
int wdt_mode;
int reg_WDT_REG1; // равны периоду в WDT_REG1 (но это пока не точно)
int reg_WDT_REG2; // равны периоду в WDT_REG2 (но это пока не точно)
} wdt_info;
int ets_wdt_get_mode(); // возвращает wdt_mode из wdt_info.
void ets_wdt_restore(int wdt_mode); // при параметре =0 не вызывает ets_wdt_enable() с параметрами из wdt_info
void ets_wdt_init(void); // просто включает WDT и активирует прерывание wdt_timer_proc() в которой в зависимости от режима wdt_mode разная обработка
void ets_wdt_disable(void); // рубит WDT и отключает wdt_timer_proc() в зависимости от режима wdt_mode
По этой причине у всех горе писателей использующих copy-paste вечно всё падает по WDT. :)
Реверс ROM-BIOS wdt.c в Web_Base\xlam\libs\bios\wdt.c
 
Последнее редактирование:

jcmvbkbc

New member
У нас тут, на форуме, есть jcmvbkbc - он должен знать с чем их едеят, но как всегда молчит - (это называется "автор поддержки call0 ABI в xtensa gcc" - по этому и молчит :) )
pvvx, если вы забыли, почему я молчу в ответ на ваши реплики, я вам напомню: http://esp8266.ru/forum/threads/proekt-v-xtensa-xplorer.113/page-2#post-2404
И на ваши вопросы я отвечу вам вашими же словами: "вы работайте, работайте".
Сделайте милость, не упоминайте больше моего имени и не обращайтесь ко мне иначе как со смиренными просьбами.
Пока вы продолжаете вести себя как говно я не рассматриваю вас как собеседника и никакой помощи от меня лично вы не получите.
 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx, если вы забыли, почему я молчу в ответ на ваши реплики, я вам напомню: http://esp8266.ru/forum/threads/proekt-v-xtensa-xplorer.113/page-2#post-2404
И на ваши вопросы я отвечу вам вашими же словами: "вы работайте, работайте".
Сделайте милость, не упоминайте больше моего имени и не обращайтесь ко мне иначе как со смиренными просьбами.
Пока вы продолжаете вести себя как говно я не рассматриваю вас как собеседника и никакой помощи от меня лично вы не получите.
Да гуляйте дальше и лучше лесом - вас заждались на esp8266.com с глупыми вопросами...
А тут всё равно от вас толку никакого - одни ошибочные данные даете и обманываете народ :) А по процу всё есть в PDF от Tensilica, Inc. Надо только время найти почитать, чтобы сделать фичу "многих SDK в одной прошивке" для народу. А мне это не особо надо. По вашему заявлению данную тему про расширение "кэша" и загрузчика для "многих SDK в одной прошивке" со спокойной совестью полностью перекладываю на вас :) Вы успешно застолбили и это меcто :) Оно как раз теперь пахнет :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Интересно - как можно по не инициализированному указателю что-либо писать (SDK1.1.0 libmmain.a: eagle_lwip_if.o) ?
Bag_DSK1.1.0_eagle_lwip_if_alloc.gif
Китайцы отключили у транслятора все варнинги?
 

pvvx

Активный участник сообщества
@anakod - обновил Web_Base\app\main\eagle_lwip_if.c в своей свалке для совместимости с SDK 1.1.0.
Все структуры Lwip китайцы сделали __attribute__((packed)). В eagle_lwip_if.c проставил смещения к обращаемым полям структур для сравнения с вашей конфигурацией Lwip, если будете адаптировать... заодно закиньте kadamski, если удастся...
Адреса куда сохраняются указатели на память queue нашлись...
Ошибку, указанную выше, не инициализированного указателя исправил как было проще.
 

pvvx

Активный участник сообщества
Слепил минимальный тестовый загрузчик "OpenSDK no WiFi" c mem_manager, переключением на 80MHz CLK CPU, os_printf_plus(), os_sprintf_plus(), wdt, ets_timer_arm_us, exception и т.д. https://github.com/pvvx/SDKnoWiFi
Код:
   Section|                   Description| Start (hex)|   End (hex)|Used space
------------------------------------------------------------------------------
      data|        Initialized Data (RAM)|    3FFE8000|    3FFE8000|       0
    rodata|           ReadOnly Data (RAM)|    3FFE8000|    3FFE8004|       4
       bss|      Uninitialized Data (RAM)|    3FFE8008|    3FFE8030|      40
      text|            Cached Code (IRAM)|    40100000|    4010037C|     892
irom0_text|           Uncached Code (SPI)|    40240000|    40240548|    1352
Total Used RAM : 44
Free RAM : 81876
Free IRam : 31894
Использует всего 40 байт в bss, а 4 в rodata - это из-за ld. Т.е. загружать ROM-BIOS надо только одну секцию кодов, путем указания кол-ва секций = 0 в заголовке flash (второй байт с начала, после 0xE9). B итоге до старта user_init() после сброса чипа проходит менее 30ms. Это происходит за счет не вывода сообщений загрузчиком ROM-BIOS из-за ошибки и соответственно нет ожидания передачи символов в UART на 74880 baud, что при загрузке 3-х стандартных блоков дает длительную задержку и вызывает повышение потребления при использовании частых коротких просыпаний после deep_sleep для опроса датчиков...
Тестовый лог из user_init():
Код:
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)


OpenLoaderSDK v1.3
Test 'SDK no WiFi'
Heap size:    81848 bytes
Bss size:    40 bytes
Stack pointer:    0x3fffffb0
ets_delay_us(1000) dt=1001
ets_delay_us(10000) dt=10001
ets_delay_us(100000) dt=100000
Просто проверял соответствие ets_delay_us() и system_get_time().
Можно дописывать всякие deep_sleep() и прочее... будут адаптированы и интегрированы к "OpenSDK no WiFi" позже...
 
Последнее редактирование:

anakod

Moderator
Команда форума
Спасибо, будем изучать! Так приятно видеть полностью открытое, понятное и легко читаемое решение в отличии от кучи непонятных и часто глючных библиотек Espressif :)
  1. Поправьте, пожалуйста, кодировку файлов в редакторе, у Вас видимо cp1251, а надо UTF8 (если правильно понимаю). Иначе на гитхабе комментарии не читаются.
  2. Насколько много остается нерешенных задач для того чтобы под OpenSDK заработал WiFi? Как я понял Вы уже значительно расковыряли libphy?
  3. По концепции этого SDK, мне кажется, deep sleep обязательно нужен. Чтобы с датчиками полноценно работать.
  4. Я думаю было бы было бы интересно сочетание http://richard.burtons.org/2015/05/17/decompiling-the-esp8266-boot-loader-v1-3b3/ с OpenSDK. Но возможно оно и не требуется, т.к. здесь уже разобрано больше. С другой стороны задачи несколько разные и отчасти друг друга хорошо дополняют.
 

pvvx

Активный участник сообщества
По концепции этого SDK, мне кажется, deep sleep обязательно нужен. Чтобы с датчиками полноценно работать
Он уже работает первые тесты прошел.
Код:
ets Jan  8 2013,rst cause:2, boot mode:(3,7)


OpenLoaderSDK v1.3
Old reset: Deep_Sleep
Test 'SDK no WiFi'
Heap size:    81848 bytes
Bss size:    40 bytes
Stack pointer:    0x3fffffb0
sys_deep_sleep 50000 us...
<0>
ets Jan  8 2013,rst cause:2, boot mode:(3,7)


OpenLoaderSDK v1.3
Old reset: Deep_Sleep
Test 'SDK no WiFi'
Heap size:    81848 bytes
Bss size:    40 bytes
Stack pointer:    0x3fffffb0
sys_deep_sleep 50000 us...
<0>
....
Это с ноликом в заголовке Flash - ROM-BIOS не выводит соо загрузок.

deep_sleep_50ms.gif
А вот так тормозит UART на выводе символов ^^^ уже в тесте SDK.
В итоге вышло до 30ms - загрузка SDK, далее 20 ms тупит UART на выводе отладки, 50ms deep_sleep(50000) и по новой. 50/50 нагрузка :).
Глобально ещё не проверял - ошибок пока должно быть много - слеплено кое-как и пока не актуальны украшения и прочая бижутерия...
С cp1251 надо какую-то опцию в git крутить, но пока тоже не до него :)
 
Последнее редактирование:

anakod

Moderator
Команда форума
С cp1251 надо какую-то опцию в git крутить, но пока тоже не до него :)
Я думаю достаточно в текстовом редакторе в котором работаете Вы сменить кодировку. Если в эклипсе, то File -> Properties -> Encoding
И глобально вероятно нужно ее изменить чтобы все новые были в стандартном UTF8.
 

pvvx

Активный участник сообщества
Я думаю достаточно в текстовом редакторе в котором работаете Вы сменить кодировку. Если в эклипсе, то File -> Properties -> Encoding
И глобально вероятно нужно ее изменить чтобы все новые были в стандартном UTF8.
Я работаю в FAR и в Eclipse и под win - у них всё хорошо с 1251. В git тоже 1251 всё читается и принимается. Не работает только отображение в браузере. Для этого необходимо дать опцию локальному git передавальшику/принимальщику при приеме-передаче перекодировать в КОИ8. Но лень копаться (c первого раза не вышло), а описания как это настроить в инет все старые и не катят для новых git. Часть файлов перекодируется - например txt, а вот си коменты и прочее не хочет. Надо искать опцию и где она пихается. Она точно есть.
 

anakod

Moderator
Команда форума
КОИ8 тут вряд ли поможет. Мне кажется Вы зря не хотите переходить на UTF8, сейчас это повсеместный стандарт. Да и для международного проекта самое правильное решение :)

UPD Просто я, например, как раз с браузера люблю репозитории просматривать, и думаю таких много.
 
Сверху Снизу