На какой бы задаче псевдосрам пощупать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Значит, мужики, по совету друзей, а именно sadman41, приобрёл я тут вот такие микросхемы PSRAM – на один мегабит от родного микрочипа, и на 64 мегабита от ESPRESSIV. Протравил платки-переходники на DIP-8 и сегодня напаял на них по одному экземпляру. Теперь ничто мне не мешает эти "псевдосрамы" пощупать.

Заради «пощупать» хочу сделать несколькоуровневую недобиблиотеку для работы с этими чипами. На нижнем уровне – запись/чтение байта (массива байтов) всеми способами (SPI, QPI и т.п.) а вот на верхнем … собственно с этим и пришёл.

В голове разные мысли. Например (одного другого не исключает),

1.
Сделать некий диспетчер динамической памяти со своими malloc/free, а может ещё и со сборкой мусора;

2.
Определить базовый класс с методами new и delete, чтобы любой пронаследованный класс безо всяких танцев с бубнами жил в этой PSRAM;

3.
Сделать надстройку на PROGMEM, позволяющую создавать объекты в PSRAM, инициализируя из PROGMEM без танцев с бубнами.

А может вообще ничего не надо? Сделать шаблон для работы с любыми типами на основе записи/чтения байта/массива по типу, как put и get в EEPROM библиотеке и хватит? Как думаете?

Скорее всего, я и не сделаю ничего, кроме нижнего уровня (надоест раньше, чем закончу), но раз уж у нас «вечная пятница», так чего не поболтать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

IMHO драйвер нижнего уровня и диспетчер памяти - никак не связанные задачи. А потому пытаться объединить их в одну библиотеку нерационально.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да. это без разницы. Я назвал одной "несколькоуровневой" недобиблиотекой, Вы можете назвать двумя разными - "о терминологии спорить не будем" :-)

Архитектура мне видится пока примитивно. Типа классы для низкоуровневых операций (с одинаковым интерфейсом для обеих микросхем), от от них можно наследовать хоть диспетчер памяти, хоть базовый класс с переопределёнными new и delete - чего хошь.

Пока прогресс такой. Начал с микросхемы ESP-PSRAM64H. Запустил, заставил работать на аппаратном SPI и на ногодрыге. Работает нормально (пережила мою пайку :-)). Завтра буду мучать QPI. Хочу сравнить скорость. С ногодрыгом-то всё ясно, а вот QPI (тоже ногодрыжный) теоретически может и побить аппаратный SPI. Подсчитывать такты влом, проще сделать тест на заполнение всей памяти, потом считывание, сравнение (убедиться, что ничего не битое), а заодно и скорость сравнить для всех трёх вариантов.

Работаем помаленьку.

sadman41
Offline
Зарегистрирован: 19.10.2016

А как концептуально п.2 будет работать? Я пишу в скетче dumatelClass dumatel(100500) и оперирую экземпляром, который в PSRAM держит массив цветов для неонок (100500 шт.) , по команде dumatel.setColor(1, ORANGE), меняет оттенок заданной и по dumatel.show() гонит этот массив в сдвиговый регистр, к примеру?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, как, у класса есть методы new и delete. При создании экземпляра, он запрашивает память своим методом new размером в собственный sizeof (уж как умеет и где умеет, там и запрашивает). При уничтожении, освобождает опять же своим собственным методом delete. Т.е. где и как запрашивал, там и освобождает. Таким образом получается, что методы класса живут в прогмем, как им и положено, а вот все свойства (данные) живут в псевдосраме. Свойства доступны или через акцессоры, или через операторы преобразования типов. Написание акцессора упрощается имеющимся в базовом классе универсальным акцессором, который по свойству (его смещению от начала данных экземляра) вытащит из срама (или засунет туда) что угодно. Там можно будет поковыряться насчёт синтаксического сахара, чтобы наружу вообще ничего не торчало, но в целом идея-то простая.

Тут есть жопа - это же срам, а не еепром - там нельзя хранить данные между выключениями машины, поэтому зафигачить туда пару мегов "Войны и мира" не получится - откуда инициализировать-то?

sadman41
Offline
Зарегистрирован: 19.10.2016

Получается, что все равно какой-то менеджер памяти нужен. Два экземпляра класса как разберутся где чьи тапки?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:
Два экземпляра класса как разберутся где чьи тапки?

Памерюца this-ами. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, разумеется, какой-то нужен.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Два дня думал, не могу придумать задачу именно для срама, где бы не подошла at24c32, встроенная в любой проект с часами 3231. 

alex_r61
Offline
Зарегистрирован: 20.06.2012

DetSimen пишет:

Два дня думал, не могу придумать задачу именно для срама, где бы не подошла at24c32, встроенная в любой проект с часами 3231. 

 Может сбор информации за какой-то период, например сутки, затем анализ и затем запись средних значений во флеш или карту памяти?

sadman41
Offline
Зарегистрирован: 19.10.2016

Это потомушто уже привык вдавливаться в 2Кб и бОльшими масштабами не мыслишь.

svm
Offline
Зарегистрирован: 06.11.2016

sadman41 пишет:
Это потомушто уже привык вдавливаться в 2Кб и бОльшими масштабами не мыслишь.

Мало памяти не бывает. Бывает мало водки. Новичек засрет любую память, профессионал оставит на утро.

Может формировать странички для графических дисплеев?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет, ну речь не о прикладной задаче. С прикладными-то как раз ясно, например, любой интерпретатор (Лисп, Бэйсик, Форт, Брейнфак) на ардуине плох тем, что сам занимает всю память, а на интерпретируемую программу не остаётся - вот и простор для творчества.

Я имею в виду задачу не прикладную, а типа "диспетчер памяти" или там ещё что-то. Т.е. уровнем повыше аппаратного драйвера, но всё же не прикладную.

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

 Вот для этого проекта http://arduino.ru/forum/proekty/arduino-nano-emulyator-kompyutera-pod-up... эта память наверное бы подошла.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Во-во - это как раз из той же оперы, что перечисленные мною интерпретаторы.

Заработал QPI. Сейчас устрою им забег на скорость с SPI'ем :-) Слабо ему поди до аппаратного-то!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Шаблон вектора и словаря для размещения в этой памяти. Ну и пара примеров реализации.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я бы взял за основу Досовский MCB.  Наерна. :) 

На спектруме я так и делал, только упрощенный, ес-сна.  Дажэ поискать текст могу.  Тока он на Z80  ассемблере. :-)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Хотя... Кому я предлагаю.  Петровичу это на час работы. :-)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015