|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
Виртуальная стековая байт-машина27.08.2017, 15:35. Показов 7709. Ответов 35
Метки нет (Все метки)
Захотел прикрутить к проекту виртуальную машину.
Чтобы писать скрипты, компилировать в байт-код и выполнять его на контроллере. В общих чертах все понятно, но может уже у кого то опыт есть? Поделитесь, плиз. Начал с изучения статьи "Пишем интерпретатор скрипта и стековую машину" на хабре https://habrahabr.ru/post/223887/
0
|
|
| 27.08.2017, 15:35 | |
|
Ответы с готовыми решениями:
35
Виртуальная стековая машина Стековая виртуальная машина Виртуальная стековая машина передача данных |
|
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
||
| 27.08.2017, 21:03 | ||
Грэм, Пол "Lysp: побеждая посредственность"
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||||||
| 27.08.2017, 21:13 | ||||||
|
Riftistor, напротив, реализация получается предельно простая: каждая функция просто запрашивает сколько ей надо аргументов - используя для этого ту же функцию, что вычисляет внешнее выражение.
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 27.08.2017, 21:20 | |
|
Pymkvym, штука в том, что не надо стек руками делать - он у вас уже есть. Т.е. код для прямой польской записи получается проще. Вот в железе обратная бы проще вышла, наверное.
0
|
|
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
||
| 27.08.2017, 21:47 | ||
ну и интерпретаторы: https://github.com/zsaleeba/picoc https://github.com/pmachapmom/LittleC
0
|
||
|
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
||
| 28.08.2017, 00:11 | ||
но для HP50G, например, сделан проект NewRPL языка, но там ARM 200МГц процессор. P.S. Сейчас уже доступен швейцарский калькулятор DM42 совместимый с ПО HP42S и эмулятором Frii42. Железо в нём на базе STM32T476 контроллера на частоте 48/24 МГц (от USB|батареек) и экономичный ч.б экран 400x272. Цена, правда, для российского потребителя получается не очень гуманной на данный кальк. Для Европы, наверное, нормальная.
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 28.08.2017, 00:59 | |
|
Так нужно простое решение, а не всякие бейсики и форты. Вот система команд у МК как раз простая и вполне достаточная. Если нужно всегда можно добавить всякие prymt & plot.
0
|
|
|
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
|||||||
| 28.08.2017, 01:21 | |||||||
+: return eval()+eval() *: return eval()*eval() number: return number_value() Это не совсем то, о чем я думал, но согласен, сама реализация тоже простая, хоть и рекурсивная, но в случае с обратной нотацией мы сразу получаем такой-же порядок, который будет использоваться при исполнении кода. Допустим у нас было выражение a + b которое превратилось в ab+, а соответствующий ему код выглядит как:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 28.08.2017, 01:53 | |
|
Ну да. Прямая польская запись - рекурсия во время выполнения. С использованием аппаратного стека - дёшево. Плюс предельно простой и прозрачный код.
Обратная - итеративное выполнение, но стек придётся делать свой, что минус. На си почти наверняка получится медленнее, чем обратная (из-за расходов на свой стек), на асме не уверен (там можно схитрить, как в некоторых реализациях forth, поменяв местами стек возвратов и стек данных), "в железе" (verilog) - явно проще и быстрее. Да, ещё в форте обратная запись тянет за собой двухстековую архитектуру - за всё надо платить. Компиляция выражений с приоритетами и ассоциативностью в прямую и обратную запись одинаково тривиальна. Строго тот же рекурсивный спуск, только для прямой записи вначале пишете функцию, потом аргументы, а для обратной вначале аргументы, потом функцию. AST одно и то же, просто "печатается" в другом порядке.
0
|
|
|
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
||
| 28.08.2017, 02:49 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|||
| 28.08.2017, 06:23 | |||
|
Спасибо всем за интересную дискуссию и информацию!
Решил начать с простого - с интерпретатора. Вроде должно получиться. Писать будут скрипты для обработчиков различных событий: нажатие на ту или иную кнопку, изменение статуса блютус соединения, прием по ИК каналу "выстрела", команды от пульта и прочее. События могут иметь параметры: содержимое ИК пакета, команды пульта, новый статус соединения и пр. Необходимые параметры будут доступны соответствующим скриптам-обработчикам. Есть так же глобальные переменные, отвечающие за игровой процесс: уровень здоровья, количество патронов в обойме, остаток обойм, наносимый оружием урон (мощность оружия) и т.д. Они так же будут видны. Будут доступны таймеры с возможностью их настройки из скриптов - направление отсчета, интервал отсчета. Кроме того, не все команды нужно выполнять каждый раз. Инициализацию того же таймера нужно произвести разово. Поэтому будет разделитель кода инициализации, который выполниться лишь раз, и циклическим кодом. Например разделителем LOOP: Будут команды сравнения. Будет группировка блока команд фигурными скобками. #- это комментарии, строки будут игнорироваться Пока вроде всё, по ходу дела видно будет, чего добавить. С разделителями команд не определился. Проще, конечно: одна строка - одна команда. Но может сделаю разделителем команд точку с запятой. Например, нужно не чаще чем раз в две минуты выдавать две обоймы любому, кто выстрелит в устройство. Примерный вариант скрипта - обработчика полученного "выстрела".
0
|
|||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 28.08.2017, 08:34 | |
|
А как создать генератор на базе mBlock (Scratch 2.0 )?
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 28.08.2017, 08:46 | |
|
Создание модификации Скретч 2.0
https://ssratch.mit.edu/discuss/topys/40808/
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 28.08.2017, 15:31 | |
|
Я чего подумал....
Что нам мешает за первый проход получить индексы команд и значения параметров и загнать их в оперативку? Второй и последующие проходы гнать уже из оперативы, файл можно закрыть.
0
|
|
|
2 / 2 / 0
Регистрация: 06.07.2022
Сообщений: 19
|
|
| 06.07.2022, 20:04 | |
|
В качестве встроенной "виртуальной машины", часто, можно увидеть использование для встраивания в систему Lua.
0
|
|
|
2 / 2 / 0
Регистрация: 06.07.2022
Сообщений: 19
|
||
| 08.07.2022, 18:03 | ||
|
Для упомянутого в треде калькулятора DM42 (STM32L476ZG ** 1024KByte FLASH, 96KByte RAM)
сделали новую RPN прошивку на Rust https://github.com/D0ntPanic/rscalc
0
|
||
| 08.07.2022, 18:03 | |
|
Виртуальная машина win xp mode. После установки сканера Mustek 1200 UB Plus виртуальная машина перестала запускаться Стековая машина Стековая машина Виртуальная машина Виртуальная машина Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|