roboforum.ru

Технический форум по робототехнике.

Интерпретатор исходного кода для AVR

Интерпретатор исходного кода для AVR

galex1981 » 05 апр 2010, 00:36

Возникла идея реализовать интерпретатор исходного кода для МК AVR. Поясняю: для того чтобы МК AVR выполняли программу которая может занимать много больше чем вмещает в свою flash память МК, есть идея реализовать чтение файлов-исходников (написанных на Ассемблере, Бейсике или C - пока не решил на каком языке) располагающихся на Sd-карте и интерпретация команд с этого файла МК. Хотелось бы услышать мнения по этому поводу

Re: Интерпретатор исходного кода для AVR

Angel71 » 05 апр 2010, 02:02

может есть смысл взять иксмегу или что-то на подобии 128/256й меги? :oops: или нужен именно интерпретатор? интерпретаторы в природе какие-то уже есть, может и писать ничего не прийдётся

Re: Интерпретатор исходного кода для AVR

Vooon » 05 апр 2010, 02:34

eLua?

Re: Интерпретатор исходного кода для AVR

AndreiSk » 05 апр 2010, 03:14

pico C?

Re: Интерпретатор исходного кода для AVR

Michael_K » 05 апр 2010, 03:27

Лучше всего для интерпретации ИЗ ИСХОДНИКОВ подойдет форт.
Ну, бейсик, с некторыми натяжками - еще куда ни шло.
Си-интерпретатор исходников вещь вообще темная
- все упрется в то, насколько вы хотите урезать Си.

Я бы посоветовал создавать интерпретатор байт-кода
(это гораааааздо проще - за недельку, думаю, можно написать вполне, если не сильно усложнять)
но, правда возникнет необходимость найти (или написать?) подходящий к нему компилятор.
Производительность при выполнении из встроенного ОЗУ упадет "всего" раз в десять
(если без наворотов).

С внешней последовательной флэшкой/карточкой и интерпретатором "из исходника"
вы производительность проца убьете не просто в ноль, а в глубокий минус :wink:

Можно, конечно, еще выдумывать JIT-компиляторы, но боюсь, это уже малореальные фантазии.
Просто из-за объема работ и ограничений проца.

Re: Интерпретатор исходного кода для AVR

galex1981 » 05 апр 2010, 07:44

Согласен в том, что скорость выполнения программы будет небольшая, я расчитывал на то, что код, выполняемый МК будет большой

Re: Интерпретатор исходного кода для AVR

Michael_K » 05 апр 2010, 13:35

Ну вот вы представьте ваш "интерпретатор" встретил конструкцию
"a = my_functinon(b,c);"

В "чистом" интерпретаторе ему придется прошаривать весь исходный код с поиском подстрок в поисках функции my_function и ее объявления (чтобы узнать в какой тип преобразовать переменные b и с) вместе с разбором дефайнов, инклюдов и (не дай бог конечно) библиотек. И так на каждую строчку - там AVR-ка подохнет строки молотить и буферизировать.

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

Тогда уж проще целиком JIT-компилятор писать. Отдельная тема - безопасная обработка ошибок в интерпретаторе
(он же заранее кагбе не может знать, есть там синтаксические ошибки или нет), сборщик мусора и т.д.

Поэтому я и пишу, что байт-код - это удобный компромисс.

Re: Интерпретатор исходного кода для AVR

galex1981 » 05 апр 2010, 13:42

А если вариант загружать программу во внешнюю ОП а затем МК исполнять ее оттуда будет (конечно МК будет скорее всего что то из Мега128)...

Re: Интерпретатор исходного кода для AVR

Michael_K » 05 апр 2010, 13:59

galex1981 писал(а):А если вариант загружать программу во внешнюю ОП...

А зачем? Если программа в исходнике полезет в 64К, то скомпилированная явно и "со свистом"
поместится в 256к (мега2560, например).

Дело же не в том внешнее у вас озу или внутреннее, дело в принципе
Варианты:
- Ужасно тормозить, прошаривая весь исходник в поисках каждой переменной и функции, и не зная ничего о синтаксических ошибках, которые программист ему подложил.
- Страшно напрягшись, сделать встроенный JIT-компилятор, который сначала прошарит исходник пару раз, найдет ошибки, скомпилирует в свой промежуточный код, куда-то его положит и уже его будет интерпретировать.
- Чуть менее напрягшись, сделать внешний компилятор в байт-код, который (байт-код, а не компилятор) занимает мало места и удобно интерпретируется.

Ну можно что-то из этих вариантов намешать-скрестить и намутировать...

Re: Интерпретатор исходного кода для AVR

boez » 06 апр 2010, 11:22

На арм надо переходить, он фон-неймановский, а не гарвардский как AVR :)

Ну а еще вот жаба какая-то есть: http://www.harbaum.org/till/nanovm/index.shtml


cron
Rambler\'s Top100 Mail.ru counter