int ICACHE_FLASH_ATTR rtc_mem_check(int flg)
{
volatile uint32 * ptr = (volatile uint32 *)RTC_RAM_BASE;
uint32 region_or = 0;
while(ptr != (volatile uint32 *)(RTC_RAM_BASE + 0x78)) region_or |= *ptr++;
if(flg==false) {
*ptr = region_or;
return false;
}
return (*ptr != region_or);
}
Вывод питания часиков не выведен ни на одном китайском модуле для продажи. Всё схвачено - вы должны постоянно покупать новые модули а они будут вечно писать новые поправки для SDK. В этом весь смысл игры.Буду посмотреть на модуль, как там разводка сделана.
Уже добрался до него. Вырезайте из libmain.a app_main.o и вставляйте свой. Типа "исходники" на замену app_main.o даны в свалкетогда осталось разобраться с перезагрузкой, но тут мне кажеться уже виноват watchdog.
Перепишите китай-SDK и/или сделайте отдельное питание на VCC_RTC. Проблема неисправимая - контрольная сумма начальной области в RAM-RTC c RF параметрами в китай-SDK считается неправильно и алгоритм работы с ней тоже не верен, даже если изменить метод подсчета и сдалеть правильную CRC. Китайцам это не объяснить.Переодически ловлю данное сообщение при разработке на C++, используя github.com/esp8266/Arduino.
Оно бы нечего, но мне переодически нужно чтобы девайс самостоятельно перезагрузился, а перезагрузка иногда стопорится как раз на этом сообщении.
Можете что ни будь посоветовать на данный счет?
А есть шанс / возможность намекнуть китайцам на более грамотное решение (если конечно у вас есть это решение), подсчета контрольной суммы?Перепишите китай-SDK и/или сделайте отдельное питание на VCC_RTC. Проблема неисправимая - контрольная сумма начальной области в RAM-RTC c RF параметрами в китай-SDK считается неправильно.
Это невозможно Они этого не хотят и этого сообщения "MEM CHECK FAIL!!!" у них нет, т.к. в данный момент при старте модуля ещё не вышел Pll на нормальную частоту и у них в кодах стоит сбросить буфер fifo UART сразу после вывода туда этого сообщения. Но другая ветка старта, если не производится перестройка PLL или сменена процедура вывода в os_printf всё-таки выводит это сообщение и от него нет избавления, т.к. другие процедуры в SDK рушат их-же контрольную китай-OR сумму, без дальнейшего пересчета. Пересчет китай-OR контрольки есть только в пару процедур, но данные то кто восстановит?А есть шанс / возможность намекнуть китайцам на более грамотное решение (если конечно у вас есть это решение), подсчета контрольной суммы?
void ICACHE_FLASH_ATTR user_rf_pre_init(void)
{
/* volatile */ uint32 * ptr_reg_rtc_ram = (/* volatile */ uint32 *)0x60001000;
if((ptr_reg_rtc_ram[24] >> 16) > 4) {
ptr_reg_rtc_ram[24] &= 0xFFFF;
ptr_reg_rtc_ram[30] = 0;
}
}
Да... Однозначно печально. Я попробую разобраться в том, что вы описали. Большое спасибо за проделываемую работу и за подробный разбор. Пока не могу ответить уверенно, что понял где и что нужно править, но информация отложилась, а значит когда дойду до этого момента - будет где подсмотреть.И не стоит описывать эту проблему китайцам. Они тогда впишут новый баг и на "исправление" затратят ещё килобайты памяти 'heap' и для кода во flash. Все "исправления" указанные им были сделаны только исключительно таким образом, особенно по программе "вы Баунти" для лохов. В итоге имеем раздувшийся до неприличных размеров китай-SDK с тысячами багами...
Этот процесс пока не возможен. Во первых китай-SDK состоит из 90% кода взятого с open-source с нарушением лицензий. Во вторых школа программирования в Китае ещё не поставлена, а текущий подход к этому у них смешон (до популярных баек). В третьих руководство Espressif не хочет нанять нормальных программистов - удавяться от пару центов. В четвертых у них другая цель - привязать вас к их сайту IoT всеми возможными путями и создавать такой SDK, чтобы был постоянный "пиар", за счет "обновления" (исправления) и чтоб каждая новая версия требовала новой реализации модуля с целью увеличения продаж тестовых партий не отлаженных чипов (метод оплаты разработки чипа за счет пользователей). В итоге ситуация неизлечима в ближайшие годы...Тем не менее если такую работу все таки проделать - это очень сильно поднимет общую стабильность ESP, уровень доверия к ESP.