Программный код на внешней EEPROM | Интерпретируемый C

ilja89
Offline
Зарегистрирован: 01.09.2022

Доброго дня всем. Такой вопрос... В университете по одному из предметов проект на Ардуино. Нужно сделать мини-консоль с несколькими играми. По сути, не зубодробительно сложная задача, однако у Ардуино той всего толи 16, толи 32кб памяти. Маловато немного. Можно ли как-нибудь использовать внешний чип памяти для записи программного кода для последующего его выполнения?

Если нет, может кто подсказать что-то вроде библиотеки интерпретируемого языка для Ардуино? Я уже видел это: https://n.mtng.org/ele/arduino/iarduino.html , но iArduino немного ограничен в своих возможностях, а мне так или иначе, придётся ещё и внешние библиотеки использовать, и всего 26 переменных маловато будет...

rkit
Offline
Зарегистрирован: 23.11.2016

Купи контроллер с выполнением кода из внешней памяти и все дела. (правда всё равно не осилишь с такими вопросами)

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

У Mega 256 мб флеш

ilja89
Offline
Зарегистрирован: 01.09.2022

Скорее всего мне перепадёт Arduino UNO, так что это богатство пройдёт мимо меня.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Можно конечно же написать свой загрузчик и из него прошивать UNO загружая образы с внешней памяти. Но сможет ли это осилить ТС - большой вопрос !!!

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

Хмм.. Интересно..

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

ilja89 пишет:

 может кто подсказать что-то вроде библиотеки интерпретируемого языка для Ардуино?

А то! Держите!

Или, вот ещё!

Можете не благодарить!

ilja89
Offline
Зарегистрирован: 01.09.2022

Komandir пишет:

Можно конечно же написать свой загрузчик и из него прошивать UNO загружая образы с внешней памяти. Но сможет ли это осилить ТС - большой вопрос !!!

ТС не "сможет", ТС походу придётся делать это скрипя зубами любой ценой, либо писать собственный интерпретируемый язык. 

rkit
Offline
Зарегистрирован: 23.11.2016

Не бежать вперед телеги, и не считать байты, не зная на сколько их хватит, - не вариант, конечно же.

imp
Offline
Зарегистрирован: 20.06.2020

И чего на человека накинулись? Ну забанили его в гугле, может не ту порнуху качал, по сочувствовать надо, а вы сразу издеваться...

Вот ссылка на джава скрипт https://arduino.ru/projects/programmirovanie-arduino-sovmestimoi-platy-n...

ilja89
Offline
Зарегистрирован: 01.09.2022

rkit пишет:

Не бежать вперед телеги, и не считать байты, не зная на сколько их хватит, - не вариант, конечно же.

У меня уже есть некоторый опыт работы с Arduino, в прошлом году уже писал небольшой проект для превращения Ардуино в калькулятор с внешним вводом-выводом. Возможно, я недостаточно экспертен и не познал дзен, но моя не самая большая программа + библиотека для работы с дисплеем отжирали 8кб враз.
Учитывая, что в этом случае скорее всего придётся писать кода в разы больше, хотелось бы заранее узнать что как и куда можно делать, а не интересоваться этим в последний момент. Тем более, что уже на следующей неделе получать оборудование, и мне нужно точно знать что мне может пригодиться.

ilja89
Offline
Зарегистрирован: 01.09.2022

imp пишет:

И чего на человека накинулись? Ну забанили его в гугле, может не ту порнуху качал, по сочувствовать надо, а вы сразу издеваться...

Вот ссылка на джава скрипт https://arduino.ru/projects/programmirovanie-arduino-sovmestimoi-platy-n...

Повторюсь, у меня будет Arduino UNO. 

b707
Offline
Зарегистрирован: 26.05.2017

ilja89 пишет:

Учитывая, что в этом случае скорее всего придётся писать кода в разы больше, хотелось бы заранее узнать что как и куда можно делать

да ничего ты с памятью не сделаешь. Подгрузка кода с внешнего носителя - задача, которую ты точно не осилишь. Хотя бы потому, что готовых примеров в инете нет.

А знаешь почему нет? - потому что никто такой дуростью не занимается.

Так что если ты хочешь понять ситуацию заранее - вот заранее и приготовся к мысли. что у тебя только два пути - либо вжимать свое творчество в прокрустово ложе 32килобайтов, либо брать плату побольше.

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

ilja89 пишет:

Повторюсь, у меня будет Arduino UNO. 

Вообще-то контроллер подбирают под задачу, а не наоборот.

Т.е. Вам нужно сначала более четко осознать масштабы задачи и требуемые для ее решения ресурсы, и только потом выбирать контроллер.

mixail844
Offline
Зарегистрирован: 30.04.2012

Но ведь никто не говорит о играх типа GTA на Ардуино,может ТСу достаточно что то вроде Pong или змейки.и не обязательно же что бы вы все игры были записаны заранее.
До ТСа такое уже делали ,искать в Гугле arduboy

ilja89
Offline
Зарегистрирован: 01.09.2022

andriano пишет:

ilja89 пишет:

Повторюсь, у меня будет Arduino UNO. 

Вообще-то контроллер подбирают под задачу, а не наоборот.

Т.е. Вам нужно сначала более четко осознать масштабы задачи и требуемые для ее решения ресурсы, и только потом выбирать контроллер.

Что в университете дадут, с тем и буду работать. А дадут скорее всего Arduino UNO. Выбора особо нету.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

А знаешь почему нет? - потому что никто такой дуростью не занимается.

на  PIC контроллере есть девайс(контроллер полива на 32 программируемых канала но он никогда не выключается, работает как обычные часы) работающий годами с подгружаемыми по софтовому I2C программами, можно ли это сделать на avr не знаю. Как - понятия не имею, по моему представлению на PIC  это невозможно, но контроллер есть и работает )))

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Возможно я не прав, но на ассемблере эта задача вполне реализуема.

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

Green
Offline
Зарегистрирован: 01.10.2015

Брэйнфаки и Лиспы сложны для ТС, но Бейсиков то полно всяких. Даже для тини2313 есть. Код в ЕЕПРОМе и вперёд.

Green
Offline
Зарегистрирован: 01.10.2015

Во. Только сейчас прочёл название топика... Тогда вот. https://n.mtng.org/ele/arduino/iarduino.html

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну тогда еще и сам топик прочти ))

Green
Offline
Зарегистрирован: 01.10.2015

Да. Ужос! Ухожу.(

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

скинемся и подарим TC нормальную ардуино мега?

rkit
Offline
Зарегистрирован: 23.11.2016

ilja89 пишет:

rkit пишет:

Не бежать вперед телеги, и не считать байты, не зная на сколько их хватит, - не вариант, конечно же.

У меня уже есть некоторый опыт работы с Arduino, в прошлом году уже писал небольшой проект для превращения Ардуино в калькулятор с внешним вводом-выводом. Возможно, я недостаточно экспертен и не познал дзен, но моя не самая большая программа + библиотека для работы с дисплеем отжирали 8кб враз.
Учитывая, что в этом случае скорее всего придётся писать кода в разы больше, хотелось бы заранее узнать что как и куда можно делать, а не интересоваться этим в последний момент. Тем более, что уже на следующей неделе получать оборудование, и мне нужно точно знать что мне может пригодиться.

И ты собрался с каждой игрой копию библиотеки для дисплея тянуть? И ты думаешь, что интерпретатор отожрет меньше 8кб? И ты думаешь, что ардуина потянет серьезную задачу в интерпретаторе?

ilja89
Offline
Зарегистрирован: 01.09.2022

Я думаю, что вариантов у меня немного.

b707
Offline
Зарегистрирован: 26.05.2017

ilja89 пишет:

Я думаю, что вариантов у меня немного.

и оба они перечислены в сообшении 13

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

b707 пишет:

ilja89 пишет:

Я думаю, что вариантов у меня немного.

и оба они перечислены в сообшении 13

Ну, почему? Есть ещё третий вариант - бросить это дело и идти в армию. Выбор, на самом деле, есть всегда.

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

ilja89 пишет:

andriano пишет:

Т.е. Вам нужно сначала более четко осознать масштабы задачи и требуемые для ее решения ресурсы, и только потом выбирать контроллер.

Что в университете дадут, с тем и буду работать. А дадут скорее всего Arduino UNO. Выбора особо нету.

Раз и задание и контроллер дадут в университете, значит, кто-то уже "осознал масштабы..." и решил, что UNO вполне достаточно для этой задачи.

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

mykaida пишет:

Возможно я не прав, но на ассемблере эта задача вполне реализуема.

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

Сомневаюсь.

Такое вполне возможно (и реально делается) в фон-Неймановской архитектуре.  AVR же построена по Гарвардской архитектуре, у нее два раздельных адресных пространства для программы и для данных. Т.е. одному и тому же адресу соответствует две реальные ячейки памяти: одна во flash, другая в RAM. Мы можем загрузить что-то в RAM, но передать управление можно только на flash.

Т.е. читать что-то из flash вместо RAM можно с использованием PROGMEM, а вот выполнять из RAM вместо flash, мне кажется, возможности нет.

В Arduino Due такого ограничения нет - там адреса уникальны.

PS. Можно, конечно, сделать, чтобы прошивка сама себя перепрошивала, скажем, с SD-карты, но, думаю, это с одной стороны выходит за рамки предполагаемой квалификации исполнителя, а с другой - ставит вопрос о надежности из-за ограниченного ресурса flash.

PPS. Когда я слышу утверждения, что что-либо можно реализовать только на ассемблере, я вспоминаю картинку:

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

mykaida пишет:

Возможно я не прав, но на ассемблере эта задача вполне реализуема.

Причём тут ассемблер? Загрузчики вполне себе на С пишутся.

ilja89
Offline
Зарегистрирован: 01.09.2022

andriano пишет:

mykaida пишет:

Возможно я не прав, но на ассемблере эта задача вполне реализуема.

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

Сомневаюсь.

Такое вполне возможно (и реально делается) в фон-Неймановской архитектуре.  AVR же построена по Гарвардской архитектуре, у нее два раздельных адресных пространства для программы и для данных. Т.е. одному и тому же адресу соответствует две реальные ячейки памяти: одна во flash, другая в RAM. Мы можем загрузить что-то в RAM, но передать управление можно только на flash.

Т.е. читать что-то из flash вместо RAM можно с использованием PROGMEM, а вот выполнять из RAM вместо flash, мне кажется, возможности нет.

В Arduino Due такого ограничения нет - там адреса уникальны.

PS. Можно, конечно, сделать, чтобы прошивка сама себя перепрошивала, скажем, с SD-карты, но, думаю, это с одной стороны выходит за рамки предполагаемой квалификации исполнителя, а с другой - ставит вопрос о надежности из-за ограниченного ресурса flash.

PPS. Когда я слышу утверждения, что что-либо можно реализовать только на ассемблере, я вспоминаю картинку:

Я думаю, я вполне смогу выпросить две Ардуино, так что не обязательно чтобы Ардуино перепрошивала саму себя. Сейчас подумал, можно сделать чтобы одна из Ардуин работала с образами для загрузки на внешней памяти, и перепрошивала при необходимости вторую, а вторая уже собственно действовала в виде консоли.

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

на Уно с внешней памятью неплохо эмулируют Z80, целый спектрум. Тут где-то была тема, на форуме в подвале. Так что нет пределов человеческой фантазии.

lilik
Offline
Зарегистрирован: 19.10.2017

ilja89 пишет:

Нужно сделать мини-консоль с несколькими играми. 

https://www.instructables.com/Arduino-VGA-Console-With-Five-Games/

:)

Сам игрался, целых 5 минут.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Esp8266 купите , оно копейки стоит. Там и память внешняя -  места вагон. Портов правда маловато, но зато вайфай- можно онлайн игры писать. Файловая система опять же на борту. Софт перепрошивается по воздуху.

все что для счасья нужно

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

inspiritus пишет:

Esp8266 купите , оно копейки стоит. Там и память внешняя -  места вагон. Портов правда маловато, но зато вайфай- можно онлайн игры писать. Файловая система опять же на борту. Софт перепрошивается по воздуху.

все что для счасья нужно

тогда уж лучше RP2040 c 16 мегабайтами памяти

inspiritus
Offline
Зарегистрирован: 17.12.2012

Всему своё время и каждой задаче свое железо. 
нану я заполнил кодом, в меге исчерпал озу, сейчас мучаю есп8266. Как достигну ейных пределов, стану искать следующее железо с минимальной ценой перехода. Возможно esp32. RP еще не пробовал, но запомнил.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

inspiritus пишет:

Всему своё время и каждой задаче свое железо. 
нану я заполнил кодом, в меге исчерпал озу, сейчас мучаю есп8266. Как достигну ейных пределов, стану искать следующее железо с минимальной ценой перехода. Возможно esp32. RP еще не пробовал, но запомнил.

у меня восемь штук ESP32 трудятся, в стеке, надысь обновил ПО и в ESP8266, начало догонять двухядерник, сейчас отстаёт процентов на 30 всего, ESP32 c пинами свободными повеселее, как только китайцы начнут выпускать аналог Rasberry PI Pico W бери, там вайфай на борту

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

у меня восемь штук ESP32 трудятся, в стеке,

ферма?