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

Оперативная память ESP32.

Па вел

New member
Добрый день. Пришел на форум по такому вопросу: делаю Бейсик компьютер для школьного кружка(веду его сам). Сильная нехватка оперативной памяти. Всего на плате 500+ кило памяти. Фактически используется 300+. 200 залочены я так понимаю под вай-фай, сетевой протокол и прочее.
Как то можно малой "кровью" разблокировать хотя-бы частично эту не используемую память, вай-фай и сеть не планируются использоваться. PSRAM и память медленная на флеше под оперативную в данном случае не подходят, нет нормального/вообще нет доступа по DMA к этим секторам, а там как раз крутится 800х600 драйвер VGA+память операционки Бейсика.
Дополнительную оперативку в виде чипа тоже к ESP32 не приделать я так понял.
Напишите пожалуйста кто может знает что. Буду благодарен за любую информацию.
 

nikolz

Well-known member
Добрый день. Пришел на форум по такому вопросу: делаю Бейсик компьютер для школьного кружка(веду его сам). Сильная нехватка оперативной памяти. Всего на плате 500+ кило памяти. Фактически используется 300+. 200 залочены я так понимаю под вай-фай, сетевой протокол и прочее.
Как то можно малой "кровью" разблокировать хотя-бы частично эту не используемую память, вай-фай и сеть не планируются использоваться. PSRAM и память медленная на флеше под оперативную в данном случае не подходят, нет нормального/вообще нет доступа по DMA к этим секторам, а там как раз крутится 800х600 драйвер VGA+память операционки Бейсика.
Дополнительную оперативку в виде чипа тоже к ESP32 не приделать я так понял.
Напишите пожалуйста кто может знает что. Буду благодарен за любую информацию.
а почему бы не сделать LUA компьютер?
Все тоже самое что и в бейсике (в том числе интерактивный режим исполнения) плюс Wifi, BLE, Сеть, звук ,файловая система и т д и т п
К тому же этот язык во всех компьютерных играх используется , редакторе текста SCITE в промышленном оборудовании и т д и т п
 

nikolz

Well-known member
свой интерпретатор бейсика Вы можете поместить полностью во flash.
Памяти вам должно хватить на все. Вы что-то не так программируете.
монитор придется делать алфавитно-цифровой
либо с внешней памятью
 

l15ar

Member
Добрый день. Пришел на форум по такому вопросу: делаю Бейсик компьютер для школьного кружка(веду его сам). Сильная нехватка оперативной памяти. Всего на плате 500+ кило памяти. Фактически используется 300+. 200 залочены я так понимаю под вай-фай, сетевой протокол и прочее.
Как то можно малой "кровью" разблокировать хотя-бы частично эту не используемую память, вай-фай и сеть не планируются использоваться. PSRAM и память медленная на флеше под оперативную в данном случае не подходят, нет нормального/вообще нет доступа по DMA к этим секторам, а там как раз крутится 800х600 драйвер VGA+память операционки Бейсика.
Дополнительную оперативку в виде чипа тоже к ESP32 не приделать я так понял.
Напишите пожалуйста кто может знает что. Буду благодарен за любую информацию.
Проблема с памятью в ESP32 решаема!
Во первых, если вам не нужен BLE, WiFi и некоторые другие вещи, нафиг сие, память свободна! :)
Во вторых, корень проблемы лежит в использовании операционной системы RTOS в прошивке, нафиг её, память свободна, ресурсы свободны!
В третьих, можно расширить объем оперативной памяти, подключая последовательную оперативную память.

-- не нужно предлагать людям то, что многие из них отвергают, как недостойное! Многим ненравится Lua, не своей фантастической скоростью, своим фиговым синтаксисом! :\
 

nikolz

Well-known member
Проблема с памятью в ESP32 решаема!
Во первых, если вам не нужен BLE, WiFi и некоторые другие вещи, нафиг сие, память свободна! :)
Во вторых, корень проблемы лежит в использовании операционной системы RTOS в прошивке, нафиг её, память свободна, ресурсы свободны!
В третьих, можно расширить объем оперативной памяти, подключая последовательную оперативную память.

-- не нужно предлагать людям то, что многие из них отвергают, как недостойное! Многим ненравится Lua, не своей фантастической скоростью, своим фиговым синтаксисом! :\
нравятся обычно девки, а языки либо знаешь либо нет.
и не надо за всех напрягаться. Скажите просто - не осилили.
 

l15ar

Member
нравятся обычно девки, а языки либо знаешь либо нет.
и не надо за всех напрягаться. Скажите просто - не осилили.
ничего подобного..
проблема в другом, переключение контекста(мозгов) дорого стоит!
Считаю, лучше программировать хорошо на чём одном, чем на многом, но плохо!
Каждый, кто утверждает, что может написать на любом языке - хвастун!
Написать можно на любом языке, бесспорно, но что именно и как, это хороший вопрос!
Не вижу проблем в программировании на lua, но и не вижу преимуществ, совсем!
Точно также, как ruby vs perl, java vs C#.
-- и не надо за всех думать, на чём код писать, сами решим!
 

Па вел

New member
Спасибо за ответы. Сам интерпретатор Бейсика обитает во флеш памяти, но его оперативная память программ на текущий момент 64 килобайта (это минималка, и ее не хватает уже)живет все таки в оперативке. Также в оперативной памяти живет буфер экрана в 800х600 в 8 цветов, по 4 бита 1 пиксель.
Работа идет с детьми(бесплатный кружок во всем), а для них визуальное зачастую главное.
Программируем через Ардуино IDE, не оптимальный вариант конечно, но детям оно понятнее всего. Я сам не "супер" программист и кружком занимаюсь в свободное от основной работы время. Пишу на СИ++ в основном.
 

l15ar

Member
Спасибо за ответы. Сам интерпретатор Бейсика обитает во флеш памяти, но его оперативная память программ на текущий момент 64 килобайта (это минималка, и ее не хватает уже)живет все таки в оперативке. Также в оперативной памяти живет буфер экрана в 800х600 в 8 цветов, по 4 бита 1 пиксель.
Работа идет с детьми(бесплатный кружок во всем), а для них визуальное зачастую главное.
Программируем через Ардуино IDE, не оптимальный вариант конечно, но детям оно понятнее всего. Я сам не "супер" программист и кружком занимаюсь в свободное от основной работы время. Пишу на СИ++ в основном.
Хорошо, вывод осуществляется на какое устройство? и через какой интерфейс?
Потому, что, не обязательно хранить копию экрана в основной памяти! (обычно так делают, когда есть ресурсы и архитектура соответствующая).
Достаточно, выводить команды на внешнее устройство (LCD экран), который, уже имеет свою память, которые, будут рисовать на нём!
ИМХО.
 

Па вел

New member
Вот такое вот чудо. Детский образовательный компьютер, себестоимостью в 500 рублей. Ввод данных с клавиатуры и мышки, сд карты и прочего. Вывод данных -изборажение на VGA монитор и звук(пищалка).
Как то пытаюсь освободить память неиспользуемую мной (примерно 200 килобайт ее, но это с учетом всего, понятно что всю ее не "забрать"). Даже если в конфигураторе сборки под ESP32 указать что доступна вся память, то непосредственно после сборки ее там не будет. А если уже после загрузки программы попробовать "занулить" те банки памяти, где висит все лишнее, плата уходит в сброс.
Я не специалист, по этому и интересуюсь. Возможно есть какой то способ доступа к этом памяти.
Для этих задач была выбрана ESP32 плата по соображениям цена/качество, доступность и возможность программирования через Ардуино среду.
 

l15ar

Member
обратную сторону можно увидеть? (возможно там есть какие то микросхемы)
и если есть наименование изделия, хорошо бы.
Так, прикольно! Ничего не скажешь!
Скорее всего, на одном ESP32 сделан видеоадаптер, на втором, не знаю пока..
USB-хост всё таки сделан на отдельном чипе(на обороте), так думаю..
 

dzanis

New member
Как то можно малой "кровью" разблокировать хотя-бы частично эту не используемую память, вай-фай и сеть не планируются использоваться.
Просто надо выделить память динамично.Без кода мне не понятно как у вас выделена память,просто приведу пример.
К примеру у вас массив 10 килобайт int buf[1024 * 10]; и для него не хватает статичной памяти , о чём может предупредит компилятор.
В этом случае создайте этот массив динамично
C++:
int * buf;
void setup() {
   buf = calloc(1, 1024 * 10);
   if(buf != NULL)
    Serial.println("buf OK");
}
 

l15ar

Member
Просто надо выделить память динамично.Без кода мне не понятно как у вас выделена память,просто приведу пример.
К примеру у вас массив 10 килобайт int buf[1024 * 10]; и для него не хватает статичной памяти , о чём может предупредит компилятор.
В этом случае создайте этот массив динамично
...
неужели в самом деле! :)
Человеку не хватает памяти, потому что, большой кусок памяти - видеобуфер(800*600*4)/8=240000=234.375Кб.
Потому что, ESP32 двухядерный процессор, на каждое ядро нужна выделенная память!
Относительно остального сложно сказать, нет информации.
Если система сообщает, что оперативной памяти столько, то как бы вы там не выделяли, чудес не будет!
Считаю, скорее всего в прошивках использована RTOS - она действительно занимает немалую память, которую, просто так не освободить! :\
 

Па вел

New member
Спасибо еще раз за ответы. В настоящий момент уехал с семьей до "любимой" тещи на выходные. Попробую порыться в коде и глянуть, может где что лишнее есть). Попутно буду думать над памятью.
Выше спрашивали про USB хост, он на отдельной платке со спичечный коробок, подключается опционально в слот расширения который справа.
Еще раз спасибо за помощь!
 
Сверху Снизу