pvvx
Активный участник сообщества
SHERTS - какие надо давать директивы компилятору СИ и т.д, чтобы загнать строки и константы в section ".irom.text" (в кешируемую область flash)?
os_printf в SDK 0.9.5 переписали и он кладет строки в .irom.text.
Но, при переносе туда других констант, почему-то возникает "протектед" при обращении к ним...
Я не проф.программер и не знаю что там надо приписать, чтобы загнать в область .irom.text к примеру const char *HTTPCacheControl = "Cache-Control: "; и это потом не вызывало "протектед" при обращении к строке любыми стандартными процедурами...
Возможно это связано со спецификой "кеширования" flash. (Типа os_printf сидит в iram, а от туда можно лезть в область "кеширования" flash, а из процедуры с атрибутом ICACHE_FLASH_ATTR нельзя?)
К С++ это тоже теперь относится, т.к. укладка переменных в область "кеширования" flash высвобождает heap и другую RAM память, и так малую. (Иначе у вас вырастет "data" и "rodata" отъев от "bss" и "heap".)
И в SDK 0.9.5 новые загрузчики flash и esp_init_data_default.bin c ещё неизвестными "котовасиями"... И в следующем SDK они опять будут новыми Т.е. распределение по по памяти сегментов и их загрузка с распределением не предсказуема.
os_printf в SDK 0.9.5 переписали и он кладет строки в .irom.text.
Код:
#ifdef USE_OPTIMIZE_PRINTF
#define os_printf(fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR = fmt; \
os_printf_plus(flash_str, ##__VA_ARGS__); \
} while(0)
#else
#define os_printf os_printf_plus
#endif
Я не проф.программер и не знаю что там надо приписать, чтобы загнать в область .irom.text к примеру const char *HTTPCacheControl = "Cache-Control: "; и это потом не вызывало "протектед" при обращении к строке любыми стандартными процедурами...
Возможно это связано со спецификой "кеширования" flash. (Типа os_printf сидит в iram, а от туда можно лезть в область "кеширования" flash, а из процедуры с атрибутом ICACHE_FLASH_ATTR нельзя?)
К С++ это тоже теперь относится, т.к. укладка переменных в область "кеширования" flash высвобождает heap и другую RAM память, и так малую. (Иначе у вас вырастет "data" и "rodata" отъев от "bss" и "heap".)
И в SDK 0.9.5 новые загрузчики flash и esp_init_data_default.bin c ещё неизвестными "котовасиями"... И в следующем SDK они опять будут новыми Т.е. распределение по по памяти сегментов и их загрузка с распределением не предсказуема.
Последнее редактирование: