На какой бы задаче псевдосрам пощупать?
- Войдите на сайт для отправки комментариев
Значит, мужики, по совету друзей, а именно sadman41, приобрёл я тут вот такие микросхемы PSRAM – на один мегабит от родного микрочипа, и на 64 мегабита от ESPRESSIV. Протравил платки-переходники на DIP-8 и сегодня напаял на них по одному экземпляру. Теперь ничто мне не мешает эти "псевдосрамы" пощупать.
Заради «пощупать» хочу сделать несколькоуровневую недобиблиотеку для работы с этими чипами. На нижнем уровне – запись/чтение байта (массива байтов) всеми способами (SPI, QPI и т.п.) а вот на верхнем … собственно с этим и пришёл.
В голове разные мысли. Например (одного другого не исключает),
1.
Сделать некий диспетчер динамической памяти со своими malloc/free, а может ещё и со сборкой мусора;
2.
Определить базовый класс с методами new и delete, чтобы любой пронаследованный класс безо всяких танцев с бубнами жил в этой PSRAM;
3.
Сделать надстройку на PROGMEM, позволяющую создавать объекты в PSRAM, инициализируя из PROGMEM без танцев с бубнами.
А может вообще ничего не надо? Сделать шаблон для работы с любыми типами на основе записи/чтения байта/массива по типу, как put и get в EEPROM библиотеке и хватит? Как думаете?
Скорее всего, я и не сделаю ничего, кроме нижнего уровня (надоест раньше, чем закончу), но раз уж у нас «вечная пятница», так чего не поболтать?
IMHO драйвер нижнего уровня и диспетчер памяти - никак не связанные задачи. А потому пытаться объединить их в одну библиотеку нерационально.
Да. это без разницы. Я назвал одной "несколькоуровневой" недобиблиотекой, Вы можете назвать двумя разными - "о терминологии спорить не будем" :-)
Архитектура мне видится пока примитивно. Типа классы для низкоуровневых операций (с одинаковым интерфейсом для обеих микросхем), от от них можно наследовать хоть диспетчер памяти, хоть базовый класс с переопределёнными new и delete - чего хошь.
Пока прогресс такой. Начал с микросхемы ESP-PSRAM64H. Запустил, заставил работать на аппаратном SPI и на ногодрыге. Работает нормально (пережила мою пайку :-)). Завтра буду мучать QPI. Хочу сравнить скорость. С ногодрыгом-то всё ясно, а вот QPI (тоже ногодрыжный) теоретически может и побить аппаратный SPI. Подсчитывать такты влом, проще сделать тест на заполнение всей памяти, потом считывание, сравнение (убедиться, что ничего не битое), а заодно и скорость сравнить для всех трёх вариантов.
Работаем помаленьку.
А как концептуально п.2 будет работать? Я пишу в скетче dumatelClass dumatel(100500) и оперирую экземпляром, который в PSRAM держит массив цветов для неонок (100500 шт.) , по команде dumatel.setColor(1, ORANGE), меняет оттенок заданной и по dumatel.show() гонит этот массив в сдвиговый регистр, к примеру?
Ну, как, у класса есть методы new и delete. При создании экземпляра, он запрашивает память своим методом new размером в собственный sizeof (уж как умеет и где умеет, там и запрашивает). При уничтожении, освобождает опять же своим собственным методом delete. Т.е. где и как запрашивал, там и освобождает. Таким образом получается, что методы класса живут в прогмем, как им и положено, а вот все свойства (данные) живут в псевдосраме. Свойства доступны или через акцессоры, или через операторы преобразования типов. Написание акцессора упрощается имеющимся в базовом классе универсальным акцессором, который по свойству (его смещению от начала данных экземляра) вытащит из срама (или засунет туда) что угодно. Там можно будет поковыряться насчёт синтаксического сахара, чтобы наружу вообще ничего не торчало, но в целом идея-то простая.
Тут есть жопа - это же срам, а не еепром - там нельзя хранить данные между выключениями машины, поэтому зафигачить туда пару мегов "Войны и мира" не получится - откуда инициализировать-то?
Получается, что все равно какой-то менеджер памяти нужен. Два экземпляра класса как разберутся где чьи тапки?
Памерюца this-ами.
Ну, разумеется, какой-то нужен.
Два дня думал, не могу придумать задачу именно для срама, где бы не подошла at24c32, встроенная в любой проект с часами 3231.
Два дня думал, не могу придумать задачу именно для срама, где бы не подошла at24c32, встроенная в любой проект с часами 3231.
Может сбор информации за какой-то период, например сутки, затем анализ и затем запись средних значений во флеш или карту памяти?
Это потомушто уже привык вдавливаться в 2Кб и бОльшими масштабами не мыслишь.
Мало памяти не бывает. Бывает мало водки. Новичек засрет любую память, профессионал оставит на утро.
Может формировать странички для графических дисплеев?
Да, нет, ну речь не о прикладной задаче. С прикладными-то как раз ясно, например, любой интерпретатор (Лисп, Бэйсик, Форт, Брейнфак) на ардуине плох тем, что сам занимает всю память, а на интерпретируемую программу не остаётся - вот и простор для творчества.
Я имею в виду задачу не прикладную, а типа "диспетчер памяти" или там ещё что-то. Т.е. уровнем повыше аппаратного драйвера, но всё же не прикладную.
Вот для этого проекта http://arduino.ru/forum/proekty/arduino-nano-emulyator-kompyutera-pod-up... эта память наверное бы подошла.
Во-во - это как раз из той же оперы, что перечисленные мною интерпретаторы.
Заработал QPI. Сейчас устрою им забег на скорость с SPI'ем :-) Слабо ему поди до аппаратного-то!
Шаблон вектора и словаря для размещения в этой памяти. Ну и пара примеров реализации.
я бы взял за основу Досовский MCB. Наерна. :)
На спектруме я так и делал, только упрощенный, ес-сна. Дажэ поискать текст могу. Тока он на Z80 ассемблере. :-)
Хотя... Кому я предлагаю. Петровичу это на час работы. :-)
Создана другая тема - http://arduino.ru/forum/programmirovanie/primer-ispolzovaniya-esp-psram64h-s-arduino