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

Вопрос Вопросы по RAM, IRAM и прочей памяти

JustACat

Moderator
Команда форума
pvvx, да, я помню, вы поднимали. Мне кажется, никто не захотел просто потому, что ни у кого не хватило на это думалки (ну или времени/желания). У меня именно думалки не хватает. Я web-программист обычный (а в вебе - все просто на самом деле), а с железками я очень на вы. Старюсь для себя что-то изучать, но идет медленно и сложно.
Но тут немного о другом тема - о памяти
Я и говорю, что мы с вами оффтопим :) Ну, пусть полежит до завтра, и завтра я наши последние пару-тройку сообщений отсюда удалю. Сегодня уже не могу...
 

anakod

Moderator
Команда форума
Мне кажется нормальная тема, не оффтоп, т.к. это и есть проблематика. В плане сабжа - есть откуда отталкиваться? К сожалению с GCC дружу не очень, но вопрос для меня так же интересный.
 

pvvx

Активный участник сообщества
Мне кажется нормальная тема, не оффтоп, т.к. это и есть проблематика. В плане сабжа - есть откуда отталкиваться? К сожалению с GCC дружу не очень, но вопрос для меня так же интересный.
Странслируйте проект из всех библиотек и создайте к нему крос или как тама-его... В общем файл заголовков на все переменные и процедуры в нем. Потом пишите свой код с сылками туда. Выйдет два модуля - ваша программа и библиотека. Счас так используется ROM-BIOS с описанием в eagle.rom.addr.v6.ld...
Ну а далее делаете сколько угодно модулей обращающихся к библиотеке, хоть по очереди загружаемые в IRAM или раскиданные по области кеширования flash.
Лучший вариант, по моему, если последовательно грузить-выполнять-освобождать модули в IRAM по одному адресу. Тогда можно загружать приложения по сети. Но для этого надо предельно высвободить IRAM от SDK процедур. А там с этим бардак.
Сразу - процедуры на таймере Lwip - все с атрибутом ICACHE_FLASH_ATTR, но почему-то куски сидят в IRAM, по недогляду китайцев (они в *.h прописали атрибуты, а в исходниках есть static процедуры и они ложатся в iram, т.к. им атрибут не перепал из *.h) :) И так многое (iram замусорена один раз исполняемыми процедурами при старте и ещё всяким, что можно было бы разместить в ICACHE_FLASH). Т.е. в IRAM можно выжать половину, без появления всяких проблем. Будет буфер хоть на 16 кило для оверлеев...
Всё это желательно дополнить полноценным отладчиком для коммуникации по сети (хоть UDP, но на первое время можно и по UART).
 
Последнее редактирование:

jcmvbkbc

New member
Пытаюсь собрать кросс-компилятор для ESP для луа, так как с gcc не работал, то не могу понять ошибку.
Возможно, кто-то подскажет. Вот часть сообщения:
Процитированная часть сообщения не несёт никакой полезной информации относящейся к ошибке.
Попробуйте отключить подавление диагностических сообщений в Makefile.
 

pvvx

Активный участник сообщества
anakod - Реализация оверлеев с библиотеками найдена в Xplorer Software (SDK) Version 6.0.2, Release RF.2015.2 (там и JTAG отладчик работает)
Но надо "законфигурировать" там ESP8266, как специфический клон процессора....
А можно и примеры перетащить в UDK (по образу и подобию) - там все исходники и отправные точки есть.
 
Последнее редактирование:
Доброго времени суток! Подскажите, как економить место в IRam, она постоянно переполняется, когда добавляю новые функции, и атрибуты MTD_FLASHMEM не всегда помогают.. вобщем я не пойму логики, что записывается в IRam и почему её всегда так мало, когда есть много флеш и свободной оперативы...

Total Used RAM : 40968
Free RAM : 40952
Free IRam : 638
 

pvvx

Активный участник сообщества
Доброго времени суток! Подскажите, как економить место в IRam, она постоянно переполняется, когда добавляю новые функции, и атрибуты MTD_FLASHMEM не всегда помогают.. вобщем я не пойму логики, что записывается в IRam и почему её всегда так мало, когда есть много флеш и свободной оперативы...

Total Used RAM : 40968
Free RAM : 40952
Free IRam : 638
Для вашего проекта на ESPWebFramework существуют такие атрибуты: https://github.com/fdivitto/ESPWebFramework/blob/master/projects/ESPWebFramework/src/fdv.h#L48
Они размещены в секции flash: https://github.com/fdivitto/ESPWebF...p_iot_rtos_sdk-master/ld/eagle.app.v6.ld#L211
Базовый RTOS, на котором построен ваш проект и другие SDK используют ICACHE_FLASH_ATTR https://github.com/fdivitto/ESPWebF...os_sdk-master/include/espressif/c_types.h#L76
Для данных, в китай-SDK используется атрибут ICACHE_RODATA_ATTR он равен __attribute__((section(".irom.text"))).
Без добавления к нему __attribute__((aligned(4))) и компиляции с опцией -Os в UDK приложения будут вечно падать (os_printf(), strlen() и в подобных процедурах). Полного избавления от нежелания процедур работать с aligned(4) данными во Flash пока нет. Пишите свои обработчики этих данных или правильно копируйте в RAM перед передачей другим процедурам.
Вот всё что отмечено описанными атрибутами и помещается в Flash. Остальное в RAM или IRAM.
Так-же возможно увеличение размера IRAM на +16 килобайт до 48 килобайт.
Для этого требуется использовать RTOS библиотеки из моего проекта https://github.com/pvvx/mp3_decode.
Заменив стандартные libpp.a и libmain.a на lib48pp.a и lib48main.a + использовать app/main/phy_chip_v6_unused.c
 
Последнее редактирование:
Мне пришли модули а там микросхемы не 512 к а 4096 кбайт памяти... Что нужно поменять в проекте чтоб нормально все работало и использовалась вся память? я нашел в мейкфайле след. настройки
# SPI_SPEED = 20MHz, 26.7MHz, 40MHz, 80MHz
SPI_SPEED?=40
# SPI_MODE: QIO, QOUT, DIO, DOUT
SPI_MODE?=QIO
# SPI_SIZE: 256KB, 512KB, 1024KB, 2048KB, 4096KB
SPI_SIZE?=512

это все что нужно поменять или есть еще какие-то настройки в проекте?

И еще, есть ли какая нибудь общая тема по написанию прошивок, чтоб можно было любые вопросы задавать... ато вопросов тьма тьмущая по разным темам..
 
Последнее редактирование:
Пока поменял параметр SPI_SIZE?=4096 пока полет нормальный, но как всегда не хватает IRam...
Для этого требуется использовать RTOS библиотеки из моего проекта https://github.com/pvvx/mp3_decode.
он у меня чёт не собирается под еклипсом, говорит нету питон.ехе. А какие именно файлы нужно взять с Вашего проекта и заменить в моём
 

pvvx

Активный участник сообщества
Пока поменял параметр SPI_SIZE?=4096 пока полет нормальный, но как всегда не хватает IRam... он у меня чёт не собирается под еклипсом, говорит нету питон.ехе. А какие именно файлы нужно взять с Вашего проекта и заменить в моём
Для этого требуется использовать RTOS библиотеки из моего проекта https://github.com/pvvx/mp3_decode.
Заменив стандартные libpp.a и libmain.a на lib48pp.a и lib48main.a + использовать app/main/phy_chip_v6_unused.c
Плюс изменить в eagle.app.v6.ld, строку описания размера IRAM на:
iram1_0_seg : org = 0x40100000, len = 0x0C000
Но вашего проекта нет и точно сказать, что и как невозможно. Может у вас используются другие остальные библиотеки, от другой версии RTOS и т.д. :)
Если описанное сразу не осмыслить - то помочь будет сложно :(
 
Сразу всё осмыслить не могу))) Но очень хочу) Мой проект построен на основе этого https://drive.google.com/file/d/0B33QooUuYkiURDgxa01KeGpIaE0/view?usp=sharing точнее я просто добавляю туда свои файлы и свой функционал.. Это С++ проект из примеров которые идут с СДК.
Что конкретно мне не понятно в данный момент:
- Мне нужно только заменить стандартные libpp.a и libmain.a на lib48pp.a и lib48main.a или еще какие-то файлы с расширением.а нужно добавлять в проект
- использовать app/main/phy_chip_v6_unused.c - его нужно просто вставить в проект? у меня плюсовой проект, что значит использовать, нужно какие-то функции с него вызывать?

pvvx посмотрите пожалуйста проект по ссылке, который я использую.
 

pvvx

Активный участник сообщества
Мне нужно только заменить стандартные...
Ваш проект у меня не транслируется. Слишком много ошибок - исправлять некогда...
Взял стандартный из UDK (C:\Espressif\examples\ESPWebFramework) - там выходит ошибка:

c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: build/app.out section `.text' will not fit in region `iram1_0_seg'


Изменил строку в Makefile:

LIBS = gcc hal phy pp net80211 wpa main freertos lwip udhcp


на

LIBS = mgcc hal phy pp net80211 wpa main freertos lwip udhcp


И всё OK:

Total Used RAM : 44832
Free RAM : 37088
Free IRam : 5558


Измените строку в Make и скопируйте libmgcc.a от сюда https://github.com/pvvx/mp3_decode/blob/master/lib/libmgcc.a (жать кнопу "RAW")
в директорию библиотек UDK C:\Espressif\ESP8266_RTOS_SDK\lib\
 
Сверху Снизу